reader 关闭时 Dapper 调用 Read 的尝试无效
Dapper Invalid attempt to call Read when reader is closed
首先我感谢所有的
我有调用 (Read Date) return with( Sql Data Reader "dr") 的方法
但是在数据 return 之后我尝试使用 if dr.read()
并且我得到错误
Invalid attempt to call Read when reader is closed
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
{
}
}
SqlDataReader
需要主动 db connection
才能浏览记录。在您的情况下,您正在关闭活动连接并 returning readar
对象,然后尝试检索记录。
这就是你出错的原因。 reader 已关闭。
我建议两种方法来解决您的问题。
1 .当 data readar
像
一样活跃时从 data readar
读取数据
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。使用适配器填充数据集和return dataset/data table 到调用程序或网页。您可以找到如何使用 dataapter 填充数据集的示例数量。
希望这对您有所帮助。如果您需要进一步的帮助,请告诉我。乐于助人!!
首先我感谢所有的
我有调用 (Read Date) return with( Sql Data Reader "dr") 的方法
但是在数据 return 之后我尝试使用 if dr.read()
并且我得到错误
Invalid attempt to call Read when reader is closed
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
{
}
}
SqlDataReader
需要主动 db connection
才能浏览记录。在您的情况下,您正在关闭活动连接并 returning readar
对象,然后尝试检索记录。
这就是你出错的原因。 reader 已关闭。
我建议两种方法来解决您的问题。
1 .当 data readar
像
data readar
读取数据
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。使用适配器填充数据集和return dataset/data table 到调用程序或网页。您可以找到如何使用 dataapter 填充数据集的示例数量。
希望这对您有所帮助。如果您需要进一步的帮助,请告诉我。乐于助人!!