解决办法很简单:添加语句: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