.NET8でNuGetパッケージ「MySQL.Data」を使用すると不具合と思われる挙動が起きる

kaihatsu 0 評価のポイント
2024-06-21T03:18:37.97+00:00

.NET8でMySqlParameter(string parameterName, object value)のパターンのコンストラクタを使用して、valueに固定値「0」を指定するとnullがセットされてしまいます。

いつ頃対応予定でしょうか。

以下URLの「Contact owners →」リンクよりMySQLに問い合わせましたが、応答がありませんでしたので、こちらに問い合わせした次第です。

https://www.nuget.org/packages/MySql.Data/8.4.0

よろしくお願いいたします。

.NET
.NET
.NET ソフトウェア フレームワークに基づく Microsoft テクノロジ。
48 件の質問
C#
C#
C 言語ファミリをルーツとし、コンポーネント指向プログラミングのサポートを含む、オブジェクト指向およびタイプセーフのプログラミング言語。
15 件の質問
0 件のコメント コメントはありません
{count} 件の投票

2 件の回答

並べ替え方法: 最も役に立つ
  1. gekka 7,986 評価のポイント
    2024-06-21T03:43:57.0233333+00:00

    ここはMySQLの連絡先ではないので、不具合だと考えるのでしたら公式フォーラム公式バグレポートにしましょう。

    enum型に対して整数値の0を与えるとenum型にもなるので、コンストラクタの引数の2個めがMySqlDbTypeと解釈されているだけだと思いますが。

    public sealed class MySqlParameter
    	public MySqlParameter(string parameterName, object value)
    	public MySqlParameter(string parameterName, MySqlDbType dbType)
    

    明示的にobjectの方を呼ばれるようにすればいいです。

     MySql.Data.MySqlClient.MySqlParameter p = new MySql.Data.MySqlClient.MySqlParameter("", (object)0);
    
    0 件のコメント コメントはありません

  2. SurferOnWww 2,406 評価のポイント
    2024-06-21T07:43:20.74+00:00

    @gekka さんの回答とダブるところがありますが・・・

    いつ頃対応予定でしょうか。

    バグではないので対応はされないでしょう。

    MySqlParameter("@name", 0) というように第 2 引数に 0 というリテラルを使ったのだと思いますが、そうすると 0 は列挙型とみなされ MySqlParameter(String, MySqlDbType) のオバーロードが使われるからです。(注: Enum MySqlDbType は列挙型)

    詳しくは Stackoverflow の記事 Why does MySqlParameter Add parameter as 0 convert to null を見てください。

    SqlParameter の場合は Microsoft のドキュメント SqlParameter(String, Object) に説明があって、周知の事実的な話です。