本文介绍了变量名“@varname”已经宣布发行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我插入多个项目到表的基础上,从下拉列表中选择。当我从下拉一个项目下来,然后一切工作正常,但是当我选择多个项目,然后我得到这个错误
变量名@CompName'已声明。变量名必须是查询批处理或存储过程中是唯一的。
我在做什么错了?谢谢
这里是我的code
保护无效DV_Test_ItemInserting(对象发件人,DetailsViewInsertEventArgs E)
{
的foreach(列表项的listItem在cblCustomerList.Items)
{
如果(listItem.Selected)
{
字符串名称= listItem.Value;
sqlcon.Open();
。字符串COMPNAME =((文本框)DV_Test.FindControl(txtCompName))Text.ToString();
。字符串民=((文本框)DV_Test.FindControl(txtNum))Text.ToString();
CMD的SqlCommand =新的SqlCommand(选择CompNamefrom MyTable的,其中COMPNAME ='+ COMPNAME +'和Num ='+数字+,名称='+姓名+',sqlcon);
SqlDataReader的博士= cmd.ExecuteReader();
如果(dr.Read())
{
lblmsg.Text =无效;
}
其他
{
dr.Close(); sqlcmd.CommandText =INSERT INTO MyTable的(COMPNAME,民,名称)VALUES(@CompName,@num,@Name);
sqlcmd.Parameters.Add(@ COMPNAME,SqlDbType.VarChar).value的= COMPNAME;
sqlcmd.Parameters.Add(@民,SqlDbType.VarChar).value的=民;
sqlcmd.Connection = sqlcon;
sqlcmd.ExecuteNonQuery();
DV_Test.ChangeMode(DetailsViewMode.Insert);
sqlcon.Close();
}
sqlcon.Close();
} }
}
解决方案
您要添加的paramters @CompName
和 @num
来查询,通过循环每次。
您需要将呼叫转移到添加
外循环并使用以下步骤更新:
sqlcmd.Parameters [@ COMPNAME]值= COMPNAME。
。sqlcmd.Parameters [@民]值=民;
所以你的code变为:
sqlcmd.CommandText =INSERT INTO MyTable的(COMPNAME,民,名称)VALUES(@CompName,@num,@Name);
sqlcmd.Parameters.Add(@ COMPNAME,SqlDbType.VarChar);
sqlcmd.Parameters.Add(@民,SqlDbType.VarChar);的foreach(列表项的listItem在cblCustomerList.Items)
{
如果(....)
{
....
}
其他
{
dr.Close(); sqlcmd.Parameters [@ COMPNAME]值= COMPNAME。
。sqlcmd.Parameters [@民]值=民;
sqlcmd.Connection = sqlcon;
sqlcmd.ExecuteNonQuery();
DV_Test.ChangeMode(DetailsViewMode.Insert);
sqlcon.Close();
}}
I am inserting multiple items into table based on a selection from drop down list. When I select one item from the drop down then everything works fine but when I select multiple items then I get this error
The variable name '@CompName' has already been declared. Variable names must be unique within a query batch or stored procedure.
what am i doing wrong? thankshere is my code
protected void DV_Test_ItemInserting(object sender, DetailsViewInsertEventArgs e)
{
foreach (ListItem listItem in cblCustomerList.Items)
{
if (listItem.Selected)
{
string Name= listItem.Value;
sqlcon.Open();
string CompName= ((TextBox)DV_Test.FindControl("txtCompName")).Text.ToString();
string Num = ((TextBox)DV_Test.FindControl("txtNum")).Text.ToString();
SqlCommand cmd = new SqlCommand("select CompNamefrom MyTable where CompName= '" + CompName+ "' and Num = '" + Num + "' and Name= '" + Name+ "' ", sqlcon);
SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
{
lblmsg.Text = "Not Valid";
}
else
{
dr.Close();
sqlcmd.CommandText = "INSERT INTO MyTable(CompName, Num, Name) VALUES(@CompName, @Num, @Name)";
sqlcmd.Parameters.Add("@CompName", SqlDbType.VarChar).Value = CompName;
sqlcmd.Parameters.Add("@Num", SqlDbType.VarChar).Value = Num;
sqlcmd.Connection = sqlcon;
sqlcmd.ExecuteNonQuery();
DV_Test.ChangeMode(DetailsViewMode.Insert);
sqlcon.Close();
}
sqlcon.Close();
}
}
}
解决方案
You are adding the paramters @CompName
and @Num
to your query every time through the loop.
You need to move the call to Add
outside the loop and use the following to update them:
sqlcmd.Parameters["@CompName"].Value = CompName;
sqlcmd.Parameters["@Num"].Value = Num;
So your code becomes:
sqlcmd.CommandText = "INSERT INTO MyTable(CompName, Num, Name) VALUES(@CompName, @Num, @Name)";
sqlcmd.Parameters.Add("@CompName", SqlDbType.VarChar);
sqlcmd.Parameters.Add("@Num", SqlDbType.VarChar);
foreach (ListItem listItem in cblCustomerList.Items)
{
if (....)
{
....
}
else
{
dr.Close();
sqlcmd.Parameters["@CompName"].Value = CompName;
sqlcmd.Parameters["@Num"].Value = Num;
sqlcmd.Connection = sqlcon;
sqlcmd.ExecuteNonQuery();
DV_Test.ChangeMode(DetailsViewMode.Insert);
sqlcon.Close();
}
}
这篇关于变量名“@varname”已经宣布发行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!