在c#asp.net中使用IDbDataParameter[]动态设置参数类型
我有一个方法可以返回数据集。但为此,我必须传递SP所需的所有参数 对SQL的期望值 我正在动态创建SP的所有参数。 因此,当我尝试创建参数时,它会给我null指针异常 我有一个方法返回给我在c#asp.net中使用IDbDataParameter[]动态设置参数类型,c#,asp.net,c#-4.0,C#,Asp.net,C# 4.0,我有一个方法可以返回数据集。但为此,我必须传递SP所需的所有参数 对SQL的期望值 我正在动态创建SP的所有参数。 因此,当我尝试创建参数时,它会给我null指针异常 我有一个方法返回给我IDbDataParameter[]我想在IDbDataParameter[]数组中添加参数 我写这行代码是为了给数组添加5个参数 IDbDataParameter[] param = IDbDataParameter(5); public IDbDataParameter[] CreateParams(Wo
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;
}
在这行之后,当它尝试添加参数时,它会给我
对象引用未设置为对象的实例
提前谢谢。这一行
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];
这条线
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];
问题是您没有创建参数,因此数组包含5个空值。下面是更好的实现,将SqlParameter替换为适合您的db提供程序的参数类型
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;
}
考虑使用DbProviderFactorys类创建参数。问题在于您没有创建参数,因此数组包含5个空值。下面是更好的实现,将SqlParameter替换为适合您的db提供程序的参数类型
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;
}
考虑使用DbProviderFactorys类创建参数。哪一行出错?此行参数[0]。DbType=DbType.Int32;显示方法的代码
GetParameters(5)
很抱歉,我现在已经更新了问题您仍然没有在问题中添加GetParameters
方法代码哪一行出现错误?此行参数[0]。DbType=DbType.Int32;显示方法的代码GetParameters(5)
抱歉,我现在更新了问题您仍然没有在问题中添加GetParameters
方法代码是的,先生,它工作得非常好。&还有一个疑问是,没有创建对象的原因是接口?因为它没有进行初始化另一个疑问是如何允许我们为接口IDbDataParameter[]param=newIDBDataParameter[5]创建对象;是的,先生,它工作得很好还有一个疑问是,没有创建对象的原因是接口?因为它没有进行初始化另一个疑问是如何允许我们为接口IDbDataParameter[]param=newIDBDataParameter[5]创建对象;谢谢,先生,它也在工作。但是我确实喜欢这个IDbDataParameter[]param=CreateParameter(DbType parameterType,int size,string name,ParameterDirection),但是在这种情况下,我不必每次都创建sqlparameter对象&CreateParameter将返回IDbDataParameter[]。但我确实喜欢这个IDbDataParameter[]param=CreateParameter(DbType parameterType、int size、字符串名称、ParameterDirection方向),但在这种情况下,我不必每次都创建sqlparameter对象&CreateParameter将返回IDbDataParameter[]