2015-05-27 53 views
0

對,所以我通過Scheme代碼將信息從數據庫中提取出來,並將其顯示在網絡表單上,可以在其中修改或創建新記錄。 獲取圖像我創建了一個通用處理程序作爲一種虛擬地址。將參數傳遞到通用處理程序

我在通過dropdownlist.selectedItem.Text(這是您選擇所需記錄的計劃代碼的位置)值時遇到了一些問題,並將其添加到通用處理程序中的參數中。我可以直接傳入一個字符串,然後只需選擇特定的Scheme代碼,它就可以工作。

這是SQL命令代碼

 public static TemplateData ReturnData(string schemeCode) 
    { 
     string sqlInstructionCstmID = "SELECT TOP(1) LetterTemplateCustomisationId, TemplateId, Logo, SchemeCode, Version, Comment FROM LetterTemplateCustomisation WHERE SchemeCode ='" + schemeCode + "'"; 

     string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["LettersDatabase"].ConnectionString; 
     SqlConnection connect = new SqlConnection(connectionString); 

     SqlCommand command = new SqlCommand(sqlInstructionCstmID, connect); 

     command.CommandType = CommandType.Text; 

     connect.Open(); 

     SqlDataReader dr = command.ExecuteReader(); 

     TemplateData tempData = null; 
     if (dr.HasRows) 
     { 
      dr.Read(); 
      tempData = new TemplateData(dr); 
     } 

     dr.Close(); 
     connect.Close(); 

     return tempData; 
    } 

通用處理器...與空參數

public class ImageHandler : IHttpHandler 
{  
    public void ProcessRequest(HttpContext context) 
    { 
     TemplateData imgData = DataClass.ReturnData(); 


     if (imgData != null) 
     { 
      context.Response.ContentType = "image/jpeg"; 
      context.Response.BinaryWrite(imgData.Logo); 
      context.Response.OutputStream.Write(imgData.Logo, 0, imgData.Logo.Length); 

      context.Response.Flush(); 
     } 
    } 

,這背後是

 protected void btnSearch_Click(object sender, EventArgs e) 
    { 
     if (ddSchemeCode.SelectedIndex > 0) 
     { 
      // Existing Data to load from database 
      TemplateData temp = DataClass.ReturnData(ddSchemeCode.SelectedItem.Text); 
      if (temp != null) 
      { 

       txtVersion.Text = temp.Version; 
       txtComment.Text = temp.Comment; 
       txtSchemeCode.Text = temp.SchemeCode; 
       txtTemplateId.Text = temp.TemplateId; 
       imgLogo.ImageUrl = "ImageHandler.ashx" 
      } 
     } 

的代碼,所以它的TemplateData imgData = DataClass.ReturnData();中的空參數我遇到困難了。

像往常一樣,非常感謝提前的人!

回答

0

DataClass.ReturnData();不起作用,因爲它沒有爲所需的schemeCode參數提供值。

您應該創建另一個沒有該參數的方法,或者提供一個默認值,如null,這將省去SQL語句中的過濾器。

例如:

public static TemplateData ReturnData(string schemeCode = null) 
{ 
    string sqlInstructionCstmID = "SELECT TOP(1) LetterTemplateCustomisationId, TemplateId, Logo, SchemeCode, Version, Comment FROM LetterTemplateCustomisation; 

    if (!string.IsNullOrEmpty(schemeCode)) 
    { 
     sqlInstructionCstmID += " WHERE SchemeCode ='" + schemeCode + "'"; 
    } 

注意你應該確保使用parameterized queries,對於很多的原因吧!

另一種選擇,如果適用,它通過HttpHandler傳遞值。一種方法是使用URL參數。

string schemeCode = Request.Querystring["schemeCode"]; 

然後通過這樣的:

http://someurl/handler.ashx?schemeCode=123 

如果不使用參數化查詢,現在,上面是一個SQL漏洞。

+0

好吧,參數化查詢,我會查找它們,歡呼。 我想'ddSchemeCode.SelectedItem.Text'到這些參數,或'temp.SchemeCode'什麼的,但我不知道如何傳遞它。 – Bigtingz92

+0

如果你想傳入處理程序,你應該通過URL傳遞它。 –

+0

好的,很酷。所以會是這樣的: 'imgLogo.ImageUrl =(「ImageHandler.ashx?schemeCode = {0}」,ddSchemeCode.SelectedItem.Text);' – Bigtingz92

相關問題