C# PetaPoco未返回预期数据

C# PetaPoco未返回预期数据,c#,.net,sql-server-ce,sql-server-ce-4,petapoco,C#,.net,Sql Server Ce,Sql Server Ce 4,Petapoco,我的一列上有一个位数据类型 我编写了一个查询,它从表中选择*,其中BITCOLUMN@0 如果我通过1或0,效果很好,但是如果我通过3,PetaPoco不会返回我期望的结果 当我使用3作为参数值时,在查询窗口中执行SQL会返回所有记录 有什么想法吗 更新:如果我使用string SQL=“SELECT*FROM TABLE WHERE BITCOLUMN”+MethodParam按预期返回数据。您能告诉我您预期的结果吗?根据,位列可以是1、0或null。当您将3传递给它时,它对我没有意义,因为它

我的一列上有一个位数据类型

我编写了一个查询,它从表中选择*,其中BITCOLUMN@0

如果我通过1或0,效果很好,但是如果我通过3,PetaPoco不会返回我期望的结果

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

有什么想法吗


更新:如果我使用
string SQL=“SELECT*FROM TABLE WHERE BITCOLUMN”+MethodParam按预期返回数据。

您能告诉我您预期的结果吗?根据,位列可以是1、0或null。当您将3传递给它时,它对我没有意义,因为它将选择所有行

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();
}
我的快速测试显示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();
}
使用(var数据库=新数据库(“sql”))
{
string sql=“从TBLTESTBIT中选择计数(*),其中位列“+”3”;
var test=database.ExecuteScalar(“从TBLTESTBIT中选择COUNT(*),其中BITCOLUMN@0”,3);
var test2=database.ExecuteScalar(sql);
Console.WriteLine(test==test2);//此输出为true
Console.Read();
}

你能告诉我你希望得到什么样的结果吗?根据,位列可以是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();
}
使用(var数据库=新数据库(“sql”))
{
string sql=“从TBLTESTBIT中选择计数(*),其中位列“+”3”;
var test=database.ExecuteScalar(“从TBLTESTBIT中选择COUNT(*),其中BITCOLUMN@0”,3);
var test2=database.ExecuteScalar(sql);
Console.WriteLine(test==test2);//此输出为true
Console.Read();
}

我认为这是因为当您使用带参数的sql字符串时,您传递的int值为3 in,作为参数之一。PetaPoco随后将为该参数创建一个IDataParameter,默认情况下,DbType将设置为DbType.Int32,因为PetaPoco不知道基础表列类型是什么。

我认为这是因为当您使用参数化sql字符串时,您将使用值为3的int作为参数之一传入。PetaPoco随后将为该参数创建IDataParameter,默认情况下,DbType将设置为DbType.Int32,因为PetaPoco不知道基础表列类型是什么。

使用
new Sql()
而不是
Append

您应该使用
Query=new-PetaPoco.Sql(
over
Query=PetaPoco.Sql.Append
使用
new-Sql()
而不是
Append



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

您的意思是类似于
database.ExecuteScalar(“从TBLTESTBIT中选择COUNT(*),其中BITCOLUMN@0”,“3”);
?它不起作用,您必须先将其转换为int。因为最终的sql是
SELECT*FROM tblTestBit where bitColumn'3';
您正在运行哪个版本的PetaPoco?将sql变量更改为string sql=“SELECT COUNT(*)FROM tblTestBit where bitColumn”+3;我正在使用SQL Server 2008运行nuget的最新版本。它仍然适用于我。您可能需要发布您在此处编写的petaPoco版本、SQL Server版本和方法,让人们看看。您是否尝试过调试它?它应该会向您显示最后一个execute语句是什么。我正在运行SQL CE 4和petaPoco 4.0.2您的意思是方法类似于
数据库。ExecuteScalar(“SELECT COUNT(*)FROM TBLTESTBIT WHERE BITCOLUMN@0”,“3”);
?它不起作用,你必须先将它转换为int。因为最后的sql是
SELECT*FROM TBLTESTBIT WHERE BITCOLUMN'3';
你在运行什么版本的PetaPoco?将你的sql变量更改为string sql=“SELECT COUNT(*)来自TBLTESTBIT,其中BITCOLUMN“+3;我正在使用SQL Server 2008运行nuget的最新版本。它仍然适用于我。您可能需要发布您在此处编写的petaPoco版本、SQL Server版本和方法,让大家看看。您是否尝试过调试它?它应该会向您显示最后一个execute语句。我正在针对SQL CE 4和petaPoco 4.0.2运行执行此SQL的完整代码。当您使用@0,3时,您期望得到什么?我实际得到了1的结果。我已经在SQL Server和SQLite上测试了此结果,它返回了预期值。您必须显示您实际调用此命令的代码,以便我们查看是否有任何内容。我正在运行一个gainst SQL CE 4和PetaPoco 4.0.2请显示执行此SQL的完整代码。当您使用@0,3时,您期望得到什么以及实际得到什么?我实际得到了1的结果。我已经在SQL Server和SQLite上对此进行了测试,它返回了预期值。您必须显示您实际调用它的代码,以便我们能够查看是否存在任何问题。我运行的是SQL CE 4和PetaPoco 4.0.2,我不明白如果它是int,为什么会出现问题。我假设直接查询数据库也会通过将其转换为int来实现这一点,这取决于SQL Server在接收到参数值为int的带参数化查询时所做的操作,该查询的参数值为int,并且正在进行比较表中没有一点。它的行为应该与我直接查询数据库时的行为相同。如果是int,我不明白为什么会出现问题。我假设直接查询数据库也会这样做,将其转换为int,这取决于SQL Server在接收到参数值为int的带参数查询时所做的操作,该参数值为c与表中的一位相比,它的行为应该与我直接查询数据库时的行为相同