C#执⾏存储提⽰指定参数太多昨天晚上写程序执⾏存储过程 调⽤以下函数
///<summary>
/// 执⾏存储过程,并返回查询所返回的结果集中第⼀⾏的第⼀列。忽略额外的列或⾏
///</summary>
///<param name="proName">存储过程名称</param>
///<param name="param">存储过程参数</param>
///<returns>返回值为object 使⽤时需要拆箱操作</returns>
public static object ExecScalar(string proName,SqlParameter[] param)
{
object obj=new object();
try
{
param nameOpenConn();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = proName;
for(int i = 0; i < param.Length; i++)
{
cmd.Parameters.Add(param[i]);
}
obj = cmd.ExecuteScalar();
}
catch(Exception e)
{
throw new Exception(e.Message);
}
finally
{
CloseConn();
}
return obj;
}
在第⼀次运⾏可以正常执⾏,第⼆次运⾏提⽰存储指定参数太多,把以上函数改为下⾯的代码可以执⾏正常
///<summary>
/// 执⾏存储过程,并返回查询所返回的结果集中第⼀⾏的第⼀列。忽略额外的列或⾏
///</summary>
///<param name="proName">存储过程名称</param>
///<param name="param">存储过程参数</param>
///<returns>返回值为object 使⽤时需要拆箱操作</returns>
public static object ExecScalar(string proName,SqlParameter[] param)
{
object obj=new object();
try
{
OpenConn();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = proName;
for(int i = 0; i < param.Length; i++)
{
cmd.Parameters.Add(param[i]);
}
obj = cmd.ExecuteScalar();
}
catch(Exception e)
{
throw new Exception(e.Message);
}
finally
{
CloseConn();
cmd.Parameters.Clear(); //注意这⼀句 解决参数太多问题的关键
}
return obj;
}
原因应该是第⼀次调⽤的SqlParameter参数在SqlCommand的参数列表中未被释放  ⽽⼆次调⽤⼜传⼊参数导致SqlCommand中的参数数量递增,这样就导致了参数太多的错误。
在程序中增加SqlCommand.Parameters.Clear();⽅法在每次执⾏完存储过程的时候就释放SqlCommand的参数列表,这样在每次调⽤执⾏存储过程时就是本次传⼊的正确参数。
我的理解是这样的。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。