版本信息: Microsoft .NET Framework 版本:2.0.50727.3053; ASP.NET 版本:2.0.50727.3053
今天在进行一个项目的时候调用存储过程的时候遇到了下面的错误
“/***”应用程序中的服务器错误。
过程或函数 'proc_GetBillDealDetails' 需要参数 '@BDPIDs',但未提供该参数。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.Data.SqlClient.SqlException: 过程或函数 'proc_GetBillDealDetails' 需要参数 '@BDPIDs',但未提供该参数。
源错误:
行 229: catch (DbException ex)
行 230: {
行 231: throw ex;
行 232: }
行 233: finally
源文件: ****\ShowBDPDetail.aspx.cs 行: 231
堆栈跟踪:
[SqlException (0x80131904): 过程或函数 'proc_GetBillDealDetails' 需要参数 '@BDPIDs',但未提供该参数。]
而我仔细检查了下,我的参数都是添加了的,参数的类型、大小等都设置好了的,而且之前一直这样做都没遇到这样的错误,于是调试了下,原来是自己疏忽了,我习惯于用属性来读取字段的值,字段如果为空或者null则进行相关的初始化操作,对于Request.QueryString或者Form传入的数据我一般都喜欢这样做。
比如:
private string mBDPIDs;
/// <summary>
/// BDTIDs,多个分类查询的ID组成的字符串
/// </summary>
public string BDPIDs
{
get
{
if (string.IsNullOrEmpty(mBDPIDs))
{
mBDPIDs = HttpUtility.UrlDecode(Request.QueryString["bdpIDs"], Encoding.Default);
//Trace.Write(mBDPIDs);
}
return mBDPIDs;
}
set { mBDPIDs = value; }
}
这样做诚然没有什么错,但是错就错在我再给DbCommand的参数赋值的时候用到的是mBDPIDs,这就导致传入的参数值为null,就出现了存储过程参数未能传入的情况。在我这种情况下只需把参数赋值改成BDPIDs
这个属性就可以了。
这个错误自己其实已经出现了两次了,所以总结在此,以防以后再出这种低级错误