【发布时间】:2011-06-25 18:49:39
【问题描述】:
我有以下情况:
string SelectDeb = @"select debid,naam,adres,huisnr,plaats
from debiteuren";
using (SqlConnection con = new SqlConnection(connection))
{
using (SqlDataAdapter sqlAdapt = new SqlDataAdapter(SelectDeb, con))
{
sqlAdapt.Fill(ds, TableName);
}
}
上面的代码运行良好,没有问题,它给了我需要的行。
这只是整个代码的一部分,但为了保持主题,我在这里只写了这些行。 有什么问题?
问题是当我把sql改成
string SelectDeb = @"select debid,naam,adres,huisnr,plaats,actief
from debiteuren
where actief = @actief";
sqlAdapt.SelectCommand.Parameters.AddWithValue("@actief", true)
或在
string SelectDeb = @"select debid,naam,adres,huisnr,plaats,actief
from debiteuren
where actief = 'True'";
我一无所获!!!
如果我使用参数并不重要,如果我在没有参数的情况下填写 where 子句但在任何 where 子句中填写数据,我不会得到任何行
如果我直接在数据库中使用相同的 sql,我会得到预期的行。
那么,出了什么问题?
我使用带有 SP1 和 SQL Server 2008 R2 Express Edition 的 VS2010 专业版
我在VS2005中用SQL Server 2005 Express Edition写了一个类似的应用程序,没有问题,可以使用参数。
编辑:
谢谢大家的回答。
TableName 是一个字符串,表示填充后数据集中的结果集。 它作为方法的参数给出(未显示) 唯一的问题是在使用 where 子句之后我根本没有得到任何行。 我使用哪种过滤器并不重要。 我也尝试过使用字符串字段(数据库中的 NVarChar),然后在结果集中也没有行。 因此,一切正常,但是在一行代码之后,只有“where 子句”并且它不起作用。 我有很多经验(在数据库和 Delphi 中,但对 C# 很陌生),从未见过这样的东西。
'actief' 列的类型是布尔型(在数据库中是一个位)
在数据库中运行良好的sql是
选择 debid,naam,adres,huisnr,huisnr_toev,postbus,postcode,postc_bus,tav,plaats,tel,actief 来自债务人 其中 actief = 'True'
所以 where actief = 'True' 这行在 VS2010 的代码中不起作用 也 其中 actief = 1 不起作用 而且 naam = 'Test' 也不起作用(数据库中确实存在测试)
【问题讨论】:
-
您已经写道,如果您使用
same sql directly in database,您将获得预期的行。什么查询会返回预期的行? -
什么是列激活的类型?如果是 char 或 varchar 类型,则 actief = 'True' 有意义,但使用布尔参数没有意义。如果这是一个位列,那么 where 子句应该是 actief = 1。
标签: c# visual-studio-2010