我使用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 '类型的值转换为' Table 1 dimension (s) Oracle.DataAccess.Client.OracleParameter '
我该怎么做才能解决这个问题?
我相信我知道你的问题的答案。在这一行
ExecuteReader("T3B", myOracleCommand.CommandText.ToString, Text, myOracleCommand.Parameters)
使用类型为OracleParameterCollection
的myOracleCommand.Parameters
,而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
,因为命令文本已经是字符串