我需要检索vaL1在c#使用,通过红色和蓝色的值搜索,并找到两个值

本文关键字:搜索 两个 蓝色 vaL1 检索 红色 使用 | 更新日期: 2023-09-27 18:03:57

这个值(val1)我通过url传递(我的意思是这个操作作为复选框列表中的jobong过滤器选项,通过选择索引过滤,然后通过另一个页面并通过数据库检索):

Default Page 3: /WebSite4/Default4.aspx?vaL1=blue,red

要在页面中查看的检索表单页。

Default Page 2:

public void grid()
{
    con.Open();
    cmd = new SqlCommand("select * from lady_cloth where color in('" + Request.QueryString["vaL1"] + "')", con);
    SqlDataAdapter da1 = new SqlDataAdapter(cmd);
    DataSet ds3 = new DataSet();
    da1.Fill(ds3);
    con.Close();
    if (ds3.Tables[0].Rows.Count > 0)
    {
        GridView1.DataSource = ds3;
        GridView1.DataBind();
    }
    else
    {
    }
}

我需要检索vaL1在c#使用,通过红色和蓝色的值搜索,并找到两个值

SqlConnection con = new SqlConnection("数据源=xxxx;初始目录=e_commerce;用户ID=sa;密码=xxx");SqlCommand cmd = new SqlCommand();Page_Load(对象发送者,EventArgs e){如果(! IsPostBack){//Label1。Text = Request.QueryString["Item"];//Label2。Text = Request.QueryString["Color"];//网格();var colortable = new DataTable();colourTable.Columns。Add("价值",typeof (string));var colors = Request.QueryString["vaL1"].Split(',');For (int I = 0;我& lt;colours.Length;我+ +){var newRow = colortable . newRow ();newRow[0] = colors [i];

colourTable.Rows.Add(启动);
        }
    }
    string sql = "SELECT * FROM lady_cloth WHERE color IN (SELECT Value FROM @Colours)";
    cmd = new SqlCommand(sql, con);
    DataSet ds3 = new DataSet();
    using (var adapter = new SqlDataAdapter(sql, con))
    {
        var parameter = new SqlParameter("@Colours", SqlDbType.Structured);
        //parameter.Value = colourTable;
        parameter.TypeName = "dbo.StringList";
        cmd.Parameters.Add(parameter);
        con.Open();
        adapter.Fill(ds3);
    }
    if (ds3.Tables[0].Rows.Count > 0)
    {
        GridView1.DataSource = ds3;
        GridView1.DataBind();
    }
    else
    {
    } 
}

我认为你的问题是你没有分开你的项目,所以你的SQL最终看起来像:

select * 
from lady_cloth 
where color in('blue,red')

而你真正想要的是

select * 
from lady_cloth 
where color in('blue','red')

如果你正在使用SQL Server 2008或更高版本,那么我建议使用表值参数。第一步是创建您的类型:

CREATE TYPE dbo.StringList TABLE (Value NVARCHAR(MAX));

我倾向于只创建易于重用的泛型类型,但这将由您自己决定。

然后在你的方法中,你需要将你的值分割成一个数组,并将它们添加到一个数据表中:

var colourTable = new DataTable();
colourTable.Columns.Add("Value", typeof(string));
var colours = Request.QueryString["vaL1"].Split(',');
for (int i = 0; i < colours.Length; i++)
{
    var newRow = colourTable.NewRow();
    newRow[0] = colours[i];
    colourTable.Rows.Add(newRow);
}

您可以将此表作为参数添加到命令中:

string sql = "SELECT * FROM lady_clock WHERE Color IN (SELECT Value FROM @Colours)"
cmd = new SqlCommand(sql, con);
var parameter = new SqlParameter("@Colours", SqlDbType.Structured);
parameter.Value = colourTable;
parameter.TypeName = "dbo.StringList";
cmd.Parameters.Add(parameter);

最后,您可以通过使用SQL和连接初始化SqlDataAdapter来减少代码:

public void grid()
{
    var colourTable = new DataTable();
    colourTable.Columns.Add("Value", typeof(string));
    var colours = Request.QueryString["vaL1"].Split(',');
    for (int i = 0; i < colours.Length; i++)
    {
        var newRow = colourTable.NewRow();
        newRow[0] = colours[i];
        colourTable.Rows.Add(newRow);
    }
    string sql = "SELECT * FROM lady_clock WHERE Color IN (SELECT Value FROM @Colours)"
    DataSet ds3 = new DataSet();
    using (var adapter = new SqlDataAdapter(sql, con))
    {
        var parameter = new SqlParameter("@Colours", SqlDbType.Structured);
        parameter.Value = colourTable;
        parameter.TypeName = "dbo.StringList";
        adapter.Parameters.Add(parameter);
        con.Open();
        da1.Fill(ds3);
    } 
    if (ds3.Tables[0].Rows.Count > 0)
    {
        GridView1.DataSource = ds3;
        GridView1.DataBind();
    }
    else
    {
    }
}