Не удалось преобразовать Oracle.DataAccess.Client.OracleParameterCollection в Oracle.DataAccess.Client.OracleParameter
Я использую команду sql для хранения текста команды и некоторых параметров:
myOracleCommand = New OracleCommand
With myOracleCommand
.CommandType = CommandType.Text
.CommandText = "MY QUERY"
.Parameters.Add(New OracleParameter("Test1", OracleDbType.Varchar2, "05", ParameterDirection.Input))
.Parameters.Add(New OracleParameter("Test2", OracleDbType.Varchar2, DBNull.Value, ParameterDirection.Input))
.Parameters.Add(New OracleParameter("Test3", OracleDbType.Int32, DBNull.Value, ParameterDirection.Input))
.CommandTimeout = 60
End With
' But after running this :
ExecuteReader("T3B", myOracleCommand.CommandText.ToString, Text, myOracleCommand.Parameters)
Тогда я получаю это сообщение об ошибке:
Невозможно преобразовать значение типа "Oracle.DataAccess.Client.OracleParameterCollection" в "Таблица 1 измерения (ов) Oracle.DataAccess.Client.OracleParameter"
Что я должен сделать, чтобы решить проблему?
1 ответ
Я верю, я знаю ответ на ваш вопрос. В этой строке
ExecuteReader("T3B", myOracleCommand.CommandText.ToString, Text, myOracleCommand.Parameters)
ты используешь myOracleCommand.Parameters
, который имеет тип OracleParameterCollection
, хитрый ExecuteReader
ожидает массив OracleParameter
,
Что вам нужно сделать, это преобразовать эту коллекцию в массив и передать этот массив. И за это OracleParameterCollection
имеет метод CopyTo
, Итак, это тривиально
Dim a(myOracleCommand.Parameters.Count - 1) As OracleParameter
myOracleCommand.Parameters.CopyTo(a, 0)
ExecuteReader("T3B", myOracleCommand.CommandText, Text, a)
Замечания: ToString
не нужен в CommandText.ToString()
потому что текст команды уже является строкой