1

我正在使用 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 维度 (s) Oracle.DataAccess.Client.OracleParameter”

我应该怎么做才能解决问题?

4

1 回答 1

0

我相信,我知道你的问题的答案。在这一行

ExecuteReader("T3B", myOracleCommand.CommandText.ToString, Text, myOracleCommand.Parameters) 

您使用myOracleCommand.Parameters,它是类型的OracleParameterCollection,wileExecuteReader期望数组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()因为命令文本已经是字符串

于 2015-10-07T21:28:26.397 回答