我正在尝试为 sqlcommand 提供比它使用的更多的参数。因此,我得到异常 ORA 01036。该描述使我了解到一个事实,即我只能传递将在查询中实际使用的参数。
我在任何地方都找不到它——这是真的吗?这似乎很愚蠢,仅限于我......
我正在尝试为 sqlcommand 提供比它使用的更多的参数。因此,我得到异常 ORA 01036。该描述使我了解到一个事实,即我只能传递将在查询中实际使用的参数。
我在任何地方都找不到它——这是真的吗?这似乎很愚蠢,仅限于我......
我尝试使用 System.Data.SqlClient.SqlConnection 重新创建您的情况以连接到 Oracle 数据库,但未成功。
使用 System.Data.OracleClient.OracleConnection 我能够测试带参数和不带参数的查询。以下代码使用未注释的“string sql ...”成功。注释的“字符串 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,参数不会根据参数名称进行映射,而是根据插入顺序进行映射。
戴夫