【发布时间】:2013-10-10 15:24:42
【问题描述】:
我正在用 C# 编写一个方法来从 WCF 服务查询 SQL Server Express 数据库。我必须使用 ADO.NET 来执行此操作(然后稍后使用 LINQ 重写它)。
该方法接受两个字符串 (fname, lname),然后从匹配记录中返回“健康保险 NO”属性。我想把它读入一个列表(还有一些其他的属性要检索)。
当前代码返回一个空列表。我哪里错了?
public List<string> GetPatientInfo(string fname, string lname)
{
string connString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\Users\\xxxx\\Documents\\Visual Studio 2010\\Projects\\ADOWebApp\\ADOWebApp\\App_Data\\ADODatabase.mdf;Integrated Security=True;User Instance=True";
SqlConnection conn = new SqlConnection(connString);
string sqlquery = "SELECT Patient.* FROM Patient WHERE ([First Name] = '"+fname+"') AND ([Last Name] = '"+lname+"')";
SqlCommand command = new SqlCommand(sqlquery, conn);
DataTable dt = new DataTable();
List<string> result = new List<string>();
using (conn)
{
conn.Open();
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader != null && reader.Read())
{
dt.Load(reader);
result.Add(Convert.ToString(reader["Health Insurance NO"]));
}
}
}
return result;
}
【问题讨论】:
-
好吧调试它。它是否进入
while块?它真的执行result.Add行吗?也可以自己对数据库执行相同的操作:取sqlquery的值并手动在数据库上运行它。 -
你确定你真的在取回数据吗?
-
@Arran,你是对的......它根本没有执行该行。我确实手动运行了查询以确保它是正确的,它返回正确的记录。抱歉,我已经插入断点并尝试调试了近 3 天......!
-
现在知道了,我怀疑连接字符串可能是罪魁祸首。我会看看并报告。
-
@reallybadatmath:你有提到的错误。因此,使用
Load在循环中加载DataTable是没有意义的,不使用sql 参数是危险的,使用SqldataReader.Read和DataTable.Load是不必要的,在需要列表时使用DataTable是多余的.
标签: c# sql wcf ado.net sql-server-express