繁体   English   中英

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

[英]I need to retrieve the vaL1 in c# using ,search by red and blue value and find two values

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

默认页面3: /WebSite4/Default4.aspx?vaL1=blue,red

此检索表单页面在页面中查看。

默认页面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
    {

    }
}

我认为您的问题是您没有分隔项目,因此您的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
    {

    }
}

SqlConnection con = new SqlConnection(“数据源= xxxx;初始目录=电子商务;用户ID = sa;密码= xxx”); SqlCommand cmd =新的SqlCommand(); 受保护的无效Page_Load(对象发送者,EventArgs e){如果(!IsPostBack){//Label1.Text = Request.QueryString [“ Item”]; //Label2.Text = Request.QueryString [“ Color”]; // grid(); var colourTable = new DataTable(); colourTable.Columns.Add(“ Value”,typeof(string)); var colors = Request.QueryString [“ vaL1”]。Split(','); for(int i = 0; i <colours.Length; i ++){var newRow = colourTable.NewRow(); newRow [0] =颜色[i]; colourTable.Rows.Add(newRow);

        }
    }
    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
    {

    } 

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM