PetaPoco没有返回预期的数据

时间:2012-03-14 09:27:41

标签: c# .net sql-server-ce sql-server-ce-4 petapoco

我的一个列上有BIT数据类型。

我编写了一个SELECT * FROM TABLE WHERE BITCOLUMN <> @0

的查询

如果我传入1或0,它可以正常工作但如果我传入3 PetaPoco不会返回我期望的结果。

当我使用3作为参数值时,在查询窗口中执行SQL会返回所有记录。

有什么想法吗?

更新:如果我使用string SQL = "SELECT * FROM TABLE WHERE BITCOLUMN <> " + MethodParam;这会按预期返回数据。

3 个答案:

答案 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