4

使用するよりも多くのパラメーターを sqlcommand にフィードしようとしています。そのため、例外 ORA 01036 が発生しています。この説明から、クエリで実際に使用されるパラメーターしか渡すことができないという事実がわかりました。

どこにもありません - 本当に本当ですか? それはかなり愚かで私に限られているようです...

4

1 に答える 1

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 によっては、パラメーターはパラメーター名に基づいてマップされるのではなく、挿入順にマップされます。

デイブ

于 2012-11-08T20:56:25.327 に答える