Oracle客户端的可选sql命令参数

时间:2012-11-05 15:38:40

标签: c# .net oracle sqlcommand

我正在尝试使用比它使用的参数更多的sqlcommand。因为我得到了异常ORA 01036.这个描述让我知道我只能传递将在查询中实际使用的参数。

我无法在任何地方找到它 - 这是真的吗?这看起来很愚蠢,仅限于我......

1 个答案:

答案 0 :(得分:1)

  1. 我尝试使用System.Data.SqlClient.SqlConnection重新创建您的情况以连接到Oracle数据库但未成功。

  2. 使用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 ();
    
  3. 这让我相信你是对的:在查询Oracle时,命令中传递的参数数量必须与查询中的参数数量相匹配。

    一个。在使用Oracle时,我还建议您保持参数与查询中的使用顺序相同。根据您使用的DLL,参数不会根据参数名称进行映射,而是按插入顺序进行映射。

  4. 戴夫