使用IN操作符使用文本框检索多行

本文关键字:检索 文本 IN 操作符 使用 | 更新日期: 2023-09-27 18:11:34

我用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仍然没有从数据库中检索数据。我知道它不是检索,因为它考虑所有的输入作为一个整体,并尝试在数据库中搜索。

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

使用IN操作符使用文本框检索多行

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

您可以使用另一个临时变量,将文本框值设置为:

 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);