ADO.NET参数化查询时问题, 变量名"@telNum"已声明。变量名在批查询或存储过程内部必须唯一

今天在使用参数化查询循环插入数据库时,碰到这个问题: 变量名"@telNum"已声明。变量名在批查询或存储过程内部必须唯一。

在多次执行SqlCommand的时候,第一次执行没有错..第二次就会出现变量名在批查询或存储过程内部必须唯一,

这是因为以前的参数还存在事务中。所以在执行第二次时,变量无法辨别,我们只需SqlCommand执行完毕后,添加如下语句即可:cmd.Parameters.Clear();就可以了,也就是在同一事务中若要多次执行带有相同参数名的SQL语句,必须在第一次执行后清理参数.

以下是我写的C#源代码:

OpenFileDialog ofd = new OpenFileDialog();

ofd.Filter = "文本文件|*.txt";
            if (ofd.ShowDialog() != true)
            {
                return;
            }
            else
            {
                string[] tels = File.ReadAllLines(ofd.FileName,Encoding.Default);
                string connStr = @"Data Source=.\SQLExpress;Initial Catalog=practice;User ID=sa;Password=381213";
                DateTime startTime = DateTime.Now; //获得开始执行sqlCommand的时间
                using (SqlConnection conn = new SqlConnection(connStr))
                {
                    conn.Open();
                    using (SqlCommand cmd = conn.CreateCommand())
                    {
                        for (int i = 1; i < tels.Length; i++)
                        {
                            string[] s = tels[i].Split('\t');
                            string startTelNum = s[0];
                            string area = s[1].Trim('"');
                            string telType = s[2].Trim('"');
                            string areaNum = s[3].Trim('"');
                            cmd.CommandText = "insert into telNum(telNum,area,telType,areaNum)values(@telNum,@area,@telType,@areaNum)";
                            cmd.Parameters.AddWithValue("@telNum", startTelNum);
                            cmd.Parameters.AddWithValue("@area", area);
                            cmd.Parameters.AddWithValue("@telType", telType);
                            cmd.Parameters.AddWithValue("@areaNum", areaNum);
                            cmd.ExecuteNonQuery();
                            cmd.Parameters.Clear();//必须加上这句,不然在第二次执行sqlCommand时会报错
                        }
                        TimeSpan timespan = DateTime.Now - startTime;

                        double totaltimes=timespan.TotalSeconds; //计算耗费的总时间
                        MessageBox.Show("数据插入成功,共耗时" + totaltimes + "秒");
                    }
                }
            }

        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值