我有一个方法可以让我返回数据集。但为此我必须传递我的SP的所有参数 期待SQL。
我正在动态创建SP的所有参数。 因此,当我尝试创建参数时,它会给我空指针异常。
我有一个方法可以返回IDbDataParameter[]
我要在IDbDataParameter[]
数组中添加参数。
我写了这一行,为数组添加了5个参数
IDbDataParameter[] param = IDbDataParameter(5);
public IDbDataParameter[] CreateParams(WorkEntry workEntry,string CallingPage,string Operation)
{
IDbDataParameter[] param = new IDbDataParameter(5);
param[0].DbType = DbType.Int32;
param[0].Size = 50;
param[0].ParameterName = "@AutoID";
param[0].Direction = ParameterDirection.ReturnValue;
param[1].DbType = DbType.String;
param[1].Size = 50;
param[1].ParameterName = "@OperatorName";
param[1].Direction = ParameterDirection.InputOutput;
param[2].DbType = DbType.String;
param[2].Size = 50;
param[2].ParameterName = "@Date";
param[2].Direction = ParameterDirection.InputOutput;
param[3].DbType = DbType.String;
param[3].Size = 50;
param[3].ParameterName = "@StartDate";
param[3].Direction = ParameterDirection.Input;
param[4].DbType = DbType.String;
param[4].Size = 50;
param[4].ParameterName = "@EndDate";
param[4].Direction = ParameterDirection.Input;
return param;
}
在此行尝试添加参数后,它正在给我 对象引用未设置为对象的实例。
提前致谢。
答案 0 :(得分:4)
这一行
IDbDataParameter[] param = IDbDataParameter(5);
看起来像*你正在创建一个新数组,但是它不会为数组中的每个元素创建一个实例。在下一行执行此操作:
param[0].DbType = DbType.Int32;
param[0]
仍然为空。你需要实例化它
param[0] = new SqlParameter(); // or whatever implementation you're using.
param[0].DbType = DbType.Int32;
....
*我说"看起来像",但它看起来不像有效的语法 - 应该像
IDbDataParameter[] param = new IDbDataParameter[5];
答案 1 :(得分:2)
问题是您没有创建参数,因此您的数组包含5个空值。这是更好的实现,为您的db provider替换SqlParameter相应的参数类型。
private IDbDataParameter CreateParameter(DbType parameterType, int size, string name, ParameterDirection direction)
{
return new SqlParameter
{
DbType = parameterType,
Size = size,
ParameterName = name,
Direction = direction
};
}
public IDbDataParameter[] CreateParams(WorkEntry workEntry, string CallingPage, string Operation)
{
IDbDataParameter[] param = new[]
{
CreateParameter(DbType.Int32, 50, "@AutoID", ParameterDirection.ReturnValue),
CreateParameter(DbType.String, 50, "@OperatorName", ParameterDirection.InputOutput),
CreateParameter(DbType.String, 50, "@Date", ParameterDirection.InputOutput),
CreateParameter(DbType.String, 50, "@StartDate", ParameterDirection.Input),
CreateParameter(DbType.String, 50, "@EndDate", ParameterDirection.Input),
};
return param;
}
考虑使用DbProviderFactories类来创建参数。