无法将 Oracle.DataAccess.Client.OracleParameterCollection 转换为 Oracle.DataAccess.Client.OracleParameter

Cannot convert Oracle.DataAccess.Client.OracleParameterCollection to 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) 

然后我收到此消息错误:

Cannot convert a value of type ' Oracle.DataAccess.Client.OracleParameterCollection ' to ' Table 1 dimension ( s) Oracle.DataAccess.Client.OracleParameter '

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

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

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) 

注意:CommandText.ToString()不需要ToString,因为命令文本已经是字符串