11

私はこのクラスを持っています

public class User
{
    public int UserId { get; set; }
    public string UserName { get; set; }
    public bool IsValidated { get; set; }
}

そして、dapperを使用してこのSQLを入力しています。

var users = connection.Query<User>("SELECT userId, userName, TRUE `IsValidated` FROM user WHERE [...]").ToList();

これを実行すると、次のエラーが発生します。

列2の解析エラー(IsValidated = 1-Int64)

私はdapperコードをステップスルーしましたが、sqldatareaderはその列がであると言っているint64ので、.NETMysqlコネクタは「TRUE」(MYSQLではtinyintである必要があります)がであると考えているようint64です。

INTのすべてのバージョン(INT、BIGINT、TINYINT、SMALLINT、MEDIUMINT)について、.NETコネクタがint64を返すというこのバグレポートを見つけました。ただし、これはMySQL 5.0のバグであり、修正されました。5.5を使用しています。私はmysql.dataバージョン6.4.3.0を持っています

IsValidated列がと宣言された一時テーブルにすべてを選択することでこの問題を「解決」しましたBOOLが、これはお粗末な解決策です。

4

1 に答える 1

1

私は Drapper に詳しくありませんが、MySQL はブール値を int (通常は tinyint) として返すため、クラスを次のように変更することも 1 つのオプションです。

public class User  
{  
    public int UserId { get; set; }  
    public string UserName { get; set; }
    private bool _isValidated = false;
    public bool IsValidated
    { 
        get{ return _isValidated;}
        set{ _isValidated = Boolean.Parse(value); }
   }  
}  

または、SQLでキャストを試してください

cast(TRUE `IsValidated` as bit)

私はこれを試していませんが、少なくとも提案があります。ではごきげんよう。

于 2012-04-15T18:55:33.423 に答える