使用文本框使用IN运算符检索多行

时间:2015-09-07 07:54:49

标签: c# asp.net oracle

我使用C#在ASP.net中创建了一个网页。此页面从Oracle 11g数据库中检索数据。在此页面中,我放置了一个文本框,在运行页面时,我用它在文本框中输入数字,因此数据从数据库中检索。

请参阅我的代码: -

protected void Button1_Click(object sender, EventArgs e)
{
    OracleConnection con = new OracleConnection("Data Source=10.31.41.103/ORCL;User ID=RL_PET;Password=RL_PET;Unicode=True");
    DataSet ds = new DataSet();
    con.Open();
    OracleDataAdapter a = new OracleDataAdapter("SELECT PALLET_NO,MERGE,RES_WT,GROUP_ID,RACK_NO,WH_CD,DATA_STS,SCAN_DT,INPUT_DT,MPNSEQ_NO,MPN_DT FROM WI_PALLET WHERE PALLET_NO IN ('" + TextBox1.Text + "')", con);
    a.Fill(ds);
    if (String.IsNullOrEmpty(TextBox1.Text))
    {
        GridView1.Visible = false;
        string display = "Please Enter Pallet No...!!";
        ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('" + display + "');", true);

    }
    else if (ds.Tables[0].Rows.Count == 0)
    {
        GridView1.Visible = false;
        string display = "Please check Pallet No...!!";
        ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('" + display + "');", true);

    }
    else
    {
        GridView1.DataSource = ds;
        GridView1.DataBind();
        GridView1.Visible = true;
        con.Close();
    }
} 

我在文本框中传递了值95403355,95403354,95403353,但是数据无法从数据库中检索。 我知道它没有检索,因为它将所有输入视为整体并尝试在数据库中搜索。

我的问题是任何解决方案,如转义序列,以便我可以检索数据。

2 个答案:

答案 0 :(得分:0)

您可以使用另一个临时变量,将文本框值放在其中:

 string filter = "'" + TextBox1.Text.Replace(",","','") + "'";

您的查询可能会像这样:

 OracleDataAdapter a = new OracleDataAdapter("SELECT PALLET_NO,MERGE,RES_WT,GROUP_ID,RACK_NO,WH_CD,DATA_STS,SCAN_DT,INPUT_DT,MPNSEQ_NO,MPN_DT FROM WI_PALLET WHERE PALLET_NO IN (" + filter + ")", con);

答案 1 :(得分:0)

在您的代码中"PALLET_NO IN ('" + TextBox1.Text + "')"变为PALLET_NO IN ('95403355,95403354,95403353'),其中'95403355,95403354,95403353'是单个varchar2表达式。只需检查代码中的引号即可。如果PALLET_NO是数字,则从in-expression中删除单引号。