变量名“@varname”已经宣布发行 [英] The variable name '@VarName' has already been declared Issue

查看:105
本文介绍了变量名“@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? thanks here 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”已经宣布发行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆