SqlDataReader to read into List<string>

本文关键字:lt string gt List to read into SqlDataReader | 更新日期: 2023-09-27 18:34:51

我正在用 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;
}

SqlDataReader to read into List<string>

您正在尝试通过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注入。

我会这样做:

 conn.Open();
 using (SqlDataReader reader = command.ExecuteReader())
 {
     dt.Load(reader);                  
 }
 foreach (var row in dt.AsEnumerable())
 {
     result.Add(row["Health Insurance NO"].ToString());
 }