sql >> データベース >  >> RDS >> Mysql

MySqlCommandを使用してストアドプロシージャを実行するときのSqlNullValueException

    これは、OracleのMySQL Connector / NET(別名MySql.Data)のバグのようです。 )。そのバグデータベースで私がよく知っているバグのようには見えません。新しい問題として提出する必要があるかもしれません。 (バグ75301 見た目は似ていますが、同じ問題であることがすぐにはわかりません。)

    MySqlConnector に切り替えることをお勧めします;これはMySQL用の代替ADO.NETライブラリであり、Dapperおよび多くの既知のバグを修正 MySQLコネクタ/NETで。 MySqlConnectorには、真の非同期I / Oサポートもあります。これは、実装されていません Connector/NETで;これは、QueryAsyncを使用する場合に重要になります コード内。

    OracleのMySQLConnector/ NETを引き続き使用する場合は、CheckParameters=falseを追加することで問題を回避できる可能性があります。 接続文字列に。 これは重大な変更になる可能性があることに注意してください あなたのコードに;設定をfalseに設定した場合は、各CommandType.StoredProcedureにパラメーターが追加されていることを手動で確認する必要があります。 MySqlCommand データベースとまったく同じ順序になっています(MySql.Dataがそれらを修正しなくなるため)。

    更新: Connector / NETソースコードを確認したところ、データベースに予期しないデータが含まれているようです。次の2つのクエリのいずれかが行を生成しますか?その場合、どの値がNULLであるか ?

    SELECT * FROM information_schema.routines
    WHERE specific_name IS NULL OR
        routine_schema IS NULL OR
        routine_name IS NULL OR
        routine_type IS NULL OR
        routine_definition IS NULL OR
        is_deterministic IS NULL OR
        sql_data_access IS NULL OR
        security_type IS NULL OR
        sql_mode IS NULL OR
        routine_comment IS NULL OR
        definer IS NULL;
    
    SELECT * FROM mysql.proc
    WHERE specific_name IS NULL OR
        db IS NULL OR
        name IS NULL OR
        type IS NULL OR
        body IS NULL OR
        is_deterministic IS NULL OR
        sql_data_access IS NULL OR
        security_type IS NULL OR
        sql_mode IS NULL OR
        comment IS NULL OR
        definer IS NULL;
    

    使用しているMySQLサーバー(MySQL、MariaDB、Amazon Aurora)とバージョンはどれですか?




    1. ユーザー定義関数でRAND()を使用する

    2. SQL /HQLJavaからのテーブル名と列名の解析

    3. MySQL:NULLフィールドはどのくらいのスペースを使用しますか?

    4. mysqldb.escape_stringと同等のpsycopg2?