2015-10-07 6 views
1

Я использую команду SQL, чтобы сохранить текст команды и некоторые параметры:Невозможно преобразовать Oracle.DataAccess.Client.OracleParameterCollection в Oracle.DataAccess.Client.OracleParameter

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'

Что мне делать, чтобы исправить эту проблему?

ответ

0

Я считаю, что я знаю ответ на ваш вопрос. В этой строке

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(), потому что текст команды уже строка

+0

Работа номер один, спасибо за вашу помощь !! –

 Смежные вопросы

  • Нет связанных вопросов^_^