4

我正在尝试为 sqlcommand 提供比它使用的更多的参数。因此,我得到异常 ORA 01036。该描述使我了解到一个事实,即我只能传递将在查询中实际使用的参数。

我在任何地方都找不到它——这是真的吗?这似乎很愚蠢,仅限于我......

4

1 回答 1

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

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

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

戴夫

于 2012-11-08T20:56:25.327 回答