2

列の 1 つに BIT データ型があります。

私はするクエリを書きましたSELECT * FROM TABLE WHERE BITCOLUMN <> @0

1 または 0 を渡すと正常に動作しますが、3 を渡すと、PetaPoco は期待する結果を返しません。

パラメータ値として 3 を使用すると、クエリ ウィンドウで SQL を実行すると、すべてのレコードが返されます。

何か案は?

更新:これを使用string SQL = "SELECT * FROM TABLE WHERE BITCOLUMN <> " + MethodParam;すると、期待どおりにデータが返されます。

4

3 に答える 3

4

どのような結果を期待しているか教えていただけますか? MSDNによると、ビット列は 1、0、または null のいずれかです。すべての行が選択されるため、3 を渡すと意味がありません。

私の簡単なテストでは、Petapoco が期待どおりに動作することがわかりました。

using (var database = new Database("sql"))
{
    string sql = "SELECT COUNT(*) FROM TBLTESTBIT WHERE BITCOLUMN <> " + "3";
    var test = database.ExecuteScalar<long>("SELECT COUNT(*) FROM TBLTESTBIT WHERE BITCOLUMN <> @0", 3);
    var test2 = database.ExecuteScalar<long>(sql);

    Console.WriteLine(test == test2); // this output true
    Console.Read();
}
于 2012-03-14T10:42:35.547 に答える
0

パラメータ化されたSQL文字列を使用する場合、引数の1つとして値3のintを渡しているためだと思います。次に、PetaPoco はその引数の IDataParameter を作成し、DbType はデフォルトで DbType.Int32 に設定されます。これは、PetaPoco が基になるテーブルの列の型を認識していないためです。

于 2012-03-14T11:54:29.390 に答える