C# 执行存储提示指定参数太多
来源:互联网 发布:apache spark 介绍 编辑:程序博客网 时间:2024/04/29 08:57
昨天晚上写程序执行存储过程 调用以下函数在第一次运行可以正常执行,第二次运行提示存储指定参数太多,把以上函数改为下面的代码可以执行正常
/**//// <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();
}
return obj;
}
/// 执行存储过程,并返回查询所返回的结果集中第一行的第一列。忽略额外的列或行
/// </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();
}
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;
}
/// 执行存储过程,并返回查询所返回的结果集中第一行的第一列。忽略额外的列或行
/// </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的参数列表,这样在每次调用执行存储过程时就是本次传入的正确参数。
我的理解是这样的。
- C# 执行存储提示指定参数太多
- 关于ASP.net中的存储过程"为过程或函数指定的参数太多?"的问题
- "为过程或函数指定的参数太多"的问题 C#
- MySQL 带INOUT参数执行搜索提示的存储过程
- C#执行带参数,返回参数的存储过程
- C#执行带参数的存储过程一个事例
- c#执行sqlserver带返回参数的存储过程
- 为过程或函数 ##指定的参数太多
- 执行存储过程--“为过程或函数指定了过多的参数”的错误
- 执行存储过程--“为过程或函数指定了过多的参数”的错误 .
- "执行存储过程"“为过程或函数指定了过多的参数”的错误 .
- C#执行存储过程
- C# 执行存储过程
- C# 执行存储过程
- c#执行存储过程
- c#调用存储过程,提供了参数老是提示“没有提供该参数”
- C#使用OleDB操作ACCESS插入数据时提示:至少一个参数没有被指定值。
- 有关c# update access时提示至少一个参数没有被指定值
- 阿蒙:程序员是一个美好的职业
- 1月9日——培训第41天
- Modern c++ design 第二章:技术
- 《Web性能测试实战》“2006最受读者喜爱”十大开发类技术图书第12名
- task_rq(p)
- C# 执行存储提示指定参数太多
- JavaScript事件總匯
- VC下Winsock头文件冲突解决方法
- 恭喜老婆,贺喜老婆
- 搭建JMF运行平台(Eclipse)
- 仿google拖拽, asp实现
- javascript 关于窗口的操作
- 从程序员角度看ELF
- 将阿拉伯数字转换成中文大写的函数(javascript)