请您耐心看一下我将在下面编写的代码。我有两种方法:
public void AddInParameters(string parameterName, OracleDbType dbtype,
object value)
{
OracleParameter myparameter = new OracleParameter();
myparameter.ParameterName = parameterName;
myparameter.OracleDbType = dbtype;
myparameter.Value = value;
myparameter.Direction = ParameterDirection.Input;
this._parameters.Add(myparameter);
}
和
public void AddOutParameter(string parameterName, OracleDbType dbType)
{
OracleParameter myparameter = new OracleParameter();
myparameter.ParameterName = parameterName;
myparameter.OracleDbType = dbType;
myparameter.Direction = ParameterDirection.Output;
this._parameters.Add(myparameter);
}
私有字段_parameters 是List 类型。如您所见,这些方法分别创建 Input 和 Output 参数并将它们添加到 _parameters 列表中。然后我有以下方法,它将采用 OracleCommand 并将列表中的所有参数添加到其中:
private void ProcessParameters(OracleCommand command)
{
foreach (OracleParameter myparameter in this._parameters)
{
command.Parameters.Add(myparameter);
}
}
这是我返回 OracleDataReader 的最终方法:
public OracleDataReader ExecuteReader(string commandText, CommandType commandType)
{
OracleDataReader returnValue = null;
OracleCommand myCommand = this.CreateCommand(commandText, commandType);
this.ProcessParameters(myCommand);
try
{
myCommand.Connection.Open();
returnValue = myCommand.ExecuteReader(CommandBehavior.CloseConnection);
}
catch (Exception ex)
{
throw new DatabaseException(ex.Message);
}
return returnValue;
}
所有这些方法都在数据访问层类库中。在我想调用 ExcuteReader 方法的类中,我按顺序执行以下操作:
- 我首先使用 AddInParameters 和 AddOutparameters 添加参数
- 然后我调用 ExecuteReader 方法。
但我有时会得到“错误数量或类型的参数”Oracle 异常。如果我拒绝使用这些方法并继续使用标准方式(创建连接,然后是命令,然后逐个添加参数,打开连接并最后调用 OracleCommand.ExecuteReader 方法),我不会收到该错误。奇怪的是我在我的应用程序入口处使用了这些方法,但在那里我从来没有遇到任何异常。我在执行 ExecuteReader 方法之前设置了一个断点来检查参数列表,一切似乎都很好,我的意思是所有参数都设置正确。你能告诉我我在这里缺少什么吗?
PS 我使用 .NET 的 Oracle 数据提供程序(Oracle.Data.Access.dll)。