簡體   English   中英

將參數傳遞給通用處理程序

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM