У меня такой код:
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;
}
но я получил эту ошибку:
Неверная попытка вызова Чтение, когда читатель закрыт.
Я много искал, но не смог решить эту проблему. Любая помощь будет оценена.
Метод DataTable.Load загружает все данные из считывателя. Вам не нужно прокручивать ни одну из строк в вашем читателе. Таким образом, в вашем коде вы можете удалить цикл и иметь что-то вроде этого:
using (SqlDataReader dataReader = cmd.ExecuteReader())
{
dtScriptDetails.Load(dataReader);
}
Я не уверен, исправляет ли это проблему, но использует if+ HasRows
вместо цикла + Read
:
using (SqlDataReader dataReader = cmd.ExecuteReader())
{
if (dataReader.HasRows)
{
dtScriptDetails.Load(dataReader);
} // no need to close it if you use using
}
Однако я бы использовал SqlDataAdapter
для заполнения таблицы:
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dtScriptDetails);
SqlConnection
дляSqlConnection
?