我需要检索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
{
}
}
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
{
}
}