gpt4 book ai didi

c# - SqlDataReader 读入 List

转载 作者:太空狗 更新时间:2023-10-29 17:33:14 27 4
gpt4 key购买 nike

我正在用 C# 编写一个方法来从 WCF 服务查询 SQL Server Express 数据库。我必须使用 ADO.NET 来执行此操作(然后稍后使用 LINQ 重写它)。

该方法采用两个字符串 (fname, lname),然后从匹配记录中返回一个“Health Insurance 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;
}

最佳答案

您正在尝试通过 DataTable.Load >循环<加载DataTable。你只需要一次。您还在循环中使用了 reader.Read()SqlDataReader.Read()使读者前进到下一条记录而不使用它。如果您要使用 DataTable.Load,则无需先阅读阅读器。因此,您只需完全删除循环即可加载表格。

但是因为你想返回一个列表你根本不需要DataTable,只需要循环阅读器:

List<string> result = new List<string>();
using (conn)
{
conn.Open();
using (SqlDataReader reader = command.ExecuteReader())
{
while(reader.Read())
{
result.Add(Convert.ToString(reader["Health Insurance NO"]));
}
}
}

除此之外,您可以在没有 sql 参数的情况下进行 sql 注入(inject)。

关于c# - SqlDataReader 读入 List<string>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19299935/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com