У меня есть эта проблема: Неправильная попытка вызвать HasRows, когда читатель закрыт. Я пробовал много; удаление соединения закрывает линию, закрывая соединение в конце. но с той же проблемой. Я не могу понять, что не так с моим кодом.Неправильная попытка вызова HasRows, когда читатель закрыт
try
{
con = new SqlConnection(ConfigurationManager.ConnectionStrings["TextItConnectionString"].ConnectionString);
using (con)
{
con.Open();
Library.writeErrorLog("connection build and open");
SqlCommand cmd = con.CreateCommand();
using (cmd)
{
cmd.CommandText = "Select [name] From [dbo].[Users]";
SqlDataReader reader = cmd.ExecuteReader();
using (reader)
{
user.dt.Load(reader);
if (reader.HasRows)
{
while (reader.Read())
{
Library.writeErrorLog(reader.GetString(0));
}
}
else
Library.writeErrorLog("no rows");
reader.Close();
con.Close();
}
}
}
//SqlDataAdapter adap = new SqlDataAdapter("Select [name] From [dbo].[Users]", con);
//adap.Fill(user.dt);
}
catch (Exception ex)
{
Library.writeErrorLog(ex);
}
Спасибо за помощь!
Не могли бы вы показать метод user.dt.Load()? –
Я предполагаю, что 'user.dt' возвращает' DataTable'. Вы знаете, что 'DataTable.Load (reader)' будет содержать всю запись из набора результатов и продвигает читателя к следующему набору? Я спрашиваю, потому что вы используете 'HasRows' ** после ** вы уже использовали' DataTable.Load'. Замечание: вам не нужно использовать 'reader.Close' или' con.Close', если вы используете 'use'-statement. –
Если вы посмотрите на исходный источник [DataTable.Load] (http://referencesource.microsoft.com/#System.Data/System/Data/DataTable.cs,a907a83034e99786), вы можете ясно видеть, что DataReader закрыт до выхода из метод. – Steve