C#数据库插入多条数据,抛出异常:另一个 SqlParameterCollection 中已包含 SqlParameter

解决办法很简单:添加语句:cmd.Parameters.Clear();

原理:在SqlCommand使用完后清理SqlParameter。

代码示例:

		//定义连接数据库的配置字符串,需要填入你的连接字符串
        private static string connectionString = "************************************";
        /// <summary>
        /// 执行增、删、改的方法
        /// </summary>
        /// <param name="sql">预计执行的非SELECT查询语句</param>
        /// <param name="param">SQL语句中的可变参数</param>
        /// <returns>返回受影响的行数</returns>
        public static int ExecuteNonQuery(string sql, params SqlParameter[] param)
        {
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                try
                {
                    conn.Open();
                    SqlCommand cmd = new SqlCommand(sql, conn);
                    cmd.Parameters.AddRange(param);
                    int affectCount = cmd.ExecuteNonQuery();
                    cmd.Parameters.Clear();//添加这一句即可解决此问题
                    return affectCount;
                }
                catch (Exception ex)
                {
                    Console.WriteLine("异常信息:\n" + ex.Message);
                    return -2;
                }
            }
        }


//向数据库插入多条数据的方法
        public static void TestSqlParameter()
        {

            string str = "1;2;3";
            string[] strArray = str.Split(';');


            string sqlValue = "insert into out_in_storage(day_night_shift,record_acc," +
                "record_name,handle_acc,handle_name,is_outed,product_line,fixure_id,log_time) " +
                "values(@day_night_shift,@record_acc,@record_name,@handle_acc,@handle_name,@is_outed," +
                "@product_line,@fixure_id,@log_time)";
            SqlParameter[] parameters = {
            new SqlParameter("@day_night_shift","day"),
            new SqlParameter("@record_acc", "123"),
            new SqlParameter("@record_name", "张飞"),
            new SqlParameter("@handle_acc", "2"),
            new SqlParameter("@handle_name", "operator"),
            new SqlParameter("@is_outed", 1),
            new SqlParameter("@product_line", "1"),
            new SqlParameter("@fixure_id", "1"),
            new SqlParameter("@log_time", "2019/2/18")
            };

            for (int i = 0; i < strArray.Length; i++)
            {
                parameters[7] = new SqlParameter("@fixure_id", strArray[i]);
                int affectCount = SqlHelper.ExecuteNonQuery(sqlValue, parameters);
                Console.WriteLine("影响行数:" + affectCount);
            }



        }

参考
https://www.cnblogs.com/jhli/p/6898650.html

发布了68 篇原创文章 · 获赞 12 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_35077107/article/details/104399816
今日推荐