[英]Passing a parameter into a generic handler
正確,因此我要通過“方案代碼”從數據庫中提取信息,並將其顯示在可修改或創建新記錄的Web表單上。 為了得到圖像,我創建了一個通用處理程序作為一種虛擬地址。
我在將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();
的空參數TemplateData imgData = DataClass.ReturnData();
我遇到困難。
和往常一樣,在此先感謝大家!
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 + "'";
}
請注意,出於多種原因,您應該確保使用參數化查詢 !
另一個選項(如果適用)因此將值通過HttpHandler
傳遞。 一種方法是使用URL參數。
string schemeCode = Request.Querystring["schemeCode"];
然后像這樣傳遞它:
http://someurl/handler.ashx?schemeCode=123
如果您現在不使用參數化查詢,則上面是一個SQL漏洞。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.