我正在尝试使用比它使用的参数更多的sqlcommand。因为我得到了异常ORA 01036.这个描述让我知道我只能传递将在查询中实际使用的参数。
我无法在任何地方找到它 - 这是真的吗?这看起来很愚蠢,仅限于我......
答案 0 :(得分:1)
我尝试使用System.Data.SqlClient.SqlConnection重新创建您的情况以连接到Oracle数据库但未成功。
使用System.Data.OracleClient.OracleConnection我能够测试带有和不带参数的查询。以下代码使用未注释的'string sql ...'成功。带注释的'string sql'将遇到您问题中提到的相同错误。
StringBuilder sb = new StringBuilder ();
string sql = "SELECT CASE_ID, CLAIM_NR, CLAIM_PHS_CD FROM TABLENAME WHERE CASE_ID = :ci";
//string sql = "SELECT CASE_ID, CLAIM_NR, CLAIM_PHS_CD FROM TABLENAME";
using ( OracleConnection connection = new OracleConnection ( RegistryConnectionInformation.GetDBConnString () ) )
{
OracleParameter ci = new OracleParameter();
ci.ParameterName = "ci";
ci.Value = "12345";
OracleCommand command = new OracleCommand ( sql, connection );
command.Parameters.Add ( ci );
connection.Open ();
OracleDataReader reader = command.ExecuteReader ();
try
{
while ( reader.Read () )
{
sb.Append ( string.Format ( "{0} - {1} - {2}\n", reader [ 0 ], reader [ 1 ], reader [ 2 ] ) );
}
}
catch ( Exception ex )
{
sb.Append ( string.Format ( "{0}\n\n{1}", ex.Message, ex.StackTrace ) );
}
finally
{
reader.Close ();
}
}
return sb.ToString ();
这让我相信你是对的:在查询Oracle时,命令中传递的参数数量必须与查询中的参数数量相匹配。
一个。在使用Oracle时,我还建议您保持参数与查询中的使用顺序相同。根据您使用的DLL,参数不会根据参数名称进行映射,而是按插入顺序进行映射。
戴夫