我的一个列上有BIT数据类型。
我编写了一个SELECT * FROM TABLE WHERE BITCOLUMN <> @0
如果我传入1或0,它可以正常工作但如果我传入3 PetaPoco不会返回我期望的结果。
当我使用3作为参数值时,在查询窗口中执行SQL会返回所有记录。
有什么想法吗?
更新:如果我使用string SQL = "SELECT * FROM TABLE WHERE BITCOLUMN <> " + MethodParam;
这会按预期返回数据。
答案 0 :(得分:4)
你能告诉我你期待的结果吗?根据{{3}},位列可以是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();
}
答案 1 :(得分:0)
我认为这将是因为当您使用参数化的sql字符串时,您将传入int值为3的args作为其中一个args。然后,PetaPoco将为该参数创建一个IDataParameter,默认情况下DbType将设置为DbType.Int32,因为PetaPoco不知道基础表列的类型是什么。
答案 2 :(得分:0)
使用new Sql()
而非Append
。
您应该Query = new PetaPoco.Sql(
使用Query = PetaPoco.Sql.Append