首先,我感谢所有人
我有调用(读取日期)返回的方法(Sql Data Reader" dr")
但在数据返回后我试图使用if dr.read()
并且我得到错误
读取器关闭时调用Read的尝试无效
public Calss DB{
public SqlDataReader ReadQuery( string query)
{
SqlDataReader dr;
var ConnecRepository = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString.ToString();
using (var connection = new SqlConnection(ConnecRepository))
{
connection.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = connection;
cmd.CommandType = CommandType.Text;
cmd.CommandText = query;
return dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
}
// Page
namespace HomePage
DB db = New DB();
protected void Page_Load(object sender, EventArgs e)
{
string query = query;
SqlDataReader dr = db.ReadQuery(string.Format(query, Email, Password));
}
if (dr.Read())>>>> here the problem is Invalid attempt to call Read when reader is closed
{
}
}
答案 0 :(得分:2)
SqlDataReader
需要有效db connection
才能查看记录。在您的情况下,您将关闭活动连接并返回readar
对象,然后尝试检索记录。
这就是你得到错误的原因。读者已关闭。
我建议两种方法来解决你的问题。
1.当data readar
处于活动状态时,从<{p}}中读取数据
SqlDataReader dr;
var ConnecRepository = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString.ToString();
using (var connection = new SqlConnection(ConnecRepository))
{
connection.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = connection;
cmd.CommandType = CommandType.Text;
cmd.CommandText = query;
dr = cmd.ExecuteReader();
if (dr.Read()){
\\your logic here}
}
2。使用适配器填充数据集并将数据集/数据表返回到调用程序或网页。你可以找到如何使用dataapter来填充数据集的样本数量。
希望这会有所帮助。如果您需要进一步的帮助,请告诉我。很乐意帮忙!!