Не удалось преобразовать 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() потому что текст команды уже является строкой

Другие вопросы по тегам