在 windows 表单应用程序的 WCF 服务上关闭 reader 时调用 Read 的尝试无效

Invalid attempt to call Read when reader is closed on WCF service with windows froms application

我有这样的代码:

public DataTable GetScriptDetails()
{
    DataTable dtScriptDetails = new DataTable();

    SqlConnection con = new SqlConnection("Data Source=sample;Initial Catalog=ScriptManagement;User ID=sa;Password=abcde");
    con.Open();
    SqlCommand cmd = new SqlCommand("select ScriptName,UploadDate from ScriptDetails", con);

    using (SqlDataReader dataReader = cmd.ExecuteReader())
    {
        while (dataReader.Read())
        {
            dtScriptDetails.Load(dataReader);
        }
        dataReader.Close();
    }
    con.Close();
    return dtScriptDetails;
}

但是我得到了这个错误:

关闭 reader 时尝试调用 Read 无效。

我找了很多都无法解决这个问题。 任何帮助将不胜感激。

我不确定这是否解决了问题,但使用 if+HasRows 而不是循环 + Read:

using (SqlDataReader dataReader = cmd.ExecuteReader())
{
    if (dataReader.HasRows)
    {
        dtScriptDetails.Load(dataReader);
    } // no need to close it if you use using
}

不过,我会用SqlDataAdapter来填充table:

SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dtScriptDetails);

DataTable.Load 方法从 reader 加载所有数据。您不需要遍历 reader 中的任何行。所以,在你的代码中,你可以删除循环并有这样的东西:

using (SqlDataReader dataReader = cmd.ExecuteReader())
    {
            dtScriptDetails.Load(dataReader);
     }