我正在使用C#作为网络应用程序的复选框列表。我在下面写下我的代码。当我从复选框列表中选择多个值时,它会报告错误。但只有一个值选择,它工作正常。
代码分为两部分:
1.从复选框列表中选择(multichoice):该值与数据库中的值相同,存储相关数据
2.显示值到gridview:选择后,将整个表显示到gridview进行显示。
我的错误是当从复选框中选择2个或更多值时,则错误显示“变量名称@textInput
已经声明。变量名称在查询批处理或存储过程中必须是唯一的。”
有人可以帮我解决这个问题吗?或者你还有其他办法。
using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class TestGridview : System.Web.UI.Page
{
private int count = 0;
private DataSet dc = new DataSet();
protected void Page_Load(object sender, EventArgs e)
{
}
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
// Create the list to store.
List<String> YrStrList = new List<string>();
foreach (ListItem item in CheckBoxList1.Items)
{
if (item.Selected)
{
YrStrList.Add(item.Value);
}
}
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["XMLConnectionString"].ConnectionString);
// Create the command object
string str = "SELECT * FROM XML WHERE [Part_Numbber] = @textInput";
SqlCommand cmd = new SqlCommand(str, con);
for (int d = 0; d < YrStrList.Count; d++)
{
DataSet ds = new DataSet();
string text;
text = YrStrList[d];
cmd.Parameters.AddWithValue("textInput", text);
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(ds, "XML");
if (count == 0) {
dc = ds.Clone();
count++;
}
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
if (ds.Tables[0].Rows[i].ItemArray[0].ToString() != "NULL")
dc.Tables[0].ImportRow(ds.Tables[0].Rows[i]);
}
}
GridView1.DataSource = dc;
GridView1.DataBind();
}
protected void CheckBoxList1_SelectedIndexChanged(object sender, EventArgs e)
{
}
}
答案 0 :(得分:1)
由于您重复执行相同的查询,您可以在循环外添加参数,然后将其填入内部。
SqlCommand cmd = new SqlCommand(str, con);
command.Parameters.Add(new SqlParameter("@textInput", 0));
for (int d = 0; d < YrStrList.Count; d++)
{
string text;
text = YrStrList[d];
command.Parameters["@textInput"].Value = text ;
...
}