System.InvalidOperationException:“已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭。”

8 篇文章 0 订阅

解决方法如下:
1、不同的reader对象不要共用一个Connection对象。
2、不要在while代码段内执行reader.Close();语句。否则继续执行while代码段内语句会报“阅读器关闭时尝试调用 Read 无效。”错误提示。

”数据库 一般是 一个 Connection 只允许 有一个 活动的(打开的) SqlDataReader要想 一个 Connection 允许 有多个 活动的(打开的) SqlDataReader 就需要设置 Connection 的 MultipleActiveResultSets=True“
1、主要原因是 DataReader 在打开使用时,一个 SqlConnection 只允许打开一个 DataReader,在开启另一个 DataReader 时,必须将前面一个先 Close 掉。

2、 在使用数据库更新或插入语句时,大家通常使用 SqlCommand 的 ExecuteNonQuery() 方法,并且前提是定义了一个公共的数据库连接(如果每次查询时都生成新连接的话不会存在这个问题,但那样数据库占用的资源相对会高很多),在ExecuteNonQuery() 后,内部会生成一个空的 DataReader 对象,并当当前的数据库连接关闭掉后,该 DataReader 才会释放。因此在大家使用更新方法时,推荐使用 using 关键字,它作为语句,可以将它所定义范围内的对象都释放掉。

private static string strConn = ConfigurationManager.ConnectionStrings[“SQLLSB2008”].ConnectionString;
private static SqlConnection myConn = null;

private static SqlDataAdapter myAdapter = new SqlDataAdapter();
private static SqlCommand myCmd = new SqlCommand();
private static DataTable myTable = new DataTable();

public static DataTable returnDataTable(string mySql, SqlParameter[] parameters)
{
myConn = new SqlConnection(strConn);
using (myCmd = new SqlCommand(mySql, myConn))
{
try
{
myCmd.Parameters.AddRange(parameters);
myAdapter = new SqlDataAdapter(myCmd);
myTable.Clear();
myAdapter.Fill(myTable);
}
catch
{
connClose();
}
finally
{
connClose();
}
}
return myTable;
}

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这段异常详细信息显示了一个 System.InvalidOperationException,它指示了一个错误操作,错误是由于一个 URL 意外地以“/”结束导致的。URL 是统一资源定位符的缩写,用于标识互联网上的资源。在这种情况下,URL 似乎不符合预期的格式要求,因为它以“/”结束。 当编写代码时,我们通常会使用 URL 来访问网络上的资源,如网站、图像或文件。为了确保正确的访问方式,URL 需要满足特定的格式要求。其中一个要求是 URL 不能以斜杠“/”结束。 如果我们在程序中遇到以上的异常信息,意味着我们在某个地方使用了一个异常的 URL。要解决这个问题,我们需要检查并修复导致问题的代码。 首先,我们需要找到引发异常的代码行。通常,异常信息会提供引发异常的具体位置,我们可以根据提供的堆栈跟踪信息来定位问题所在。 然后,我们需要检查使用 URL 的代码行。查看错误的 URL,确保它不是以斜杠“/”结尾。如果是以斜杠“/”结尾,我们需要修改代码,移除或更改结尾的斜杠,使 URL 符合格式要求。 最后,我们重新运行程序,确保不再出现该异常。 总之,system.invalidoperationexception 异常详细信息指示了出现错误操作,即 URL 意外地以斜杠“/”结尾。为了解决这个问题,我们需要定位并修复导致异常的代码行,确保 URL 符合预期的格式要求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值