rea*_*ath 9 c# sql ado.net wcf sql-server-express
我正在用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;
}
Tim*_*ter 19
您正尝试在循环中加载DataTablevia DataTable.Load>.你只需要一次.你也在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-injection.
| 归档时间: | 
 | 
| 查看次数: | 52256 次 | 
| 最近记录: |