我正在使用SQL Server CE 3.5数据库应用程序,并且我使用DataSet / TableAdapter / Query从表中检索记录。当我创建使用表(和int列)的主键的查询时,它可以很好地使用参数。那个SQL是SELECT ID,Name,Birthdate FROM People WHERE ID=@ID
。这会在表适配器上生成一个带有单个int参数的方法,并且效果很好。现在,我在Name字段上设置了一个唯一的索引,我希望在TableAdapter上有一个名为GetByName的类似方法,它以类似的方式SELECT ID,Name,Birthdate FROM People WHERE Name=@Name
通过Name字段检索记录,所以我尝试在TableAdapter和我遇到的第一个问题是当我尝试使用此SQL创建Query时生成的错误。它告诉我“从DbType对象到SQL Server Compact数据类型不存在映射”。所以我将参数属性中的DbType从Object更改为String。现在,当我调用该方法时,我得不到任何数据。我试过传递直接字符串值,如:
string sName = "Bob";
myAdapter.GetByName(sName);
。
我尝试用单引号传递值:
string sName = "'Bob'";
myAdapter.GetByName(sName);
。
在任何一种情况下都不会返回任何数据。不会抛出任何错误,但不会返回任何数据。
我尝试将Query中的SQL修改为:
SELECT ID,Name,Birthdate FROM People WHERE Name='@Name'
仍然没有数据。
我尝试将所有字段名称包装在方括号中,并完全限定WHERE子句中的Name列
SELECT [ID],[Name],[Birthdate] FROM [People] WHERE [People].[Name]=@Name
仍然没有数据。
不确定如何使这项工作。我确信它必须能够完成,但对于我的生活,我无法弄清楚如何。