[英]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.