[英]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.