2

我的一列上有一个 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 字符串时,您传入的 int 值为 3 in 作为参数之一。然后,PetaPoco 将为该参数创建一个 IDataParameter,并且默认情况下 DbType 将设置为 DbType.Int32,因为 PetaPoco 不知道基础表列类型是什么。

于 2012-03-14T11:54:29.390 回答
0

new Sql()不使用Append

你应该Query = new PetaPoco.Sql(使用Query = PetaPoco.Sql.Append

于 2016-10-13T09:23:07.137 回答