解决方法如下:
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;
}
解决方法如下:1、不同的reader对象不要共用一个Connection对象。2、不要在while代码段内执行reader.Close();语句。否则继续执行while代码段内语句会报“阅读器关闭时尝试调用 Read 无效。”错误提示。”数据库 一般是 一个 Connection 只允许 有一个 活动的(打开的) SqlDataReader要想 一个 Connection 允许 有多个 活动的(打开的) SqlDataReader 就需要设置 Connection 的 MultipleActiveRe
ql
Command
在每次执行ExecuteNonQuery()方法之后,内部会生成一个空的
DataReader
对象,该对象只有在
数据库
连接
关闭
之后,才会被释放掉,加上上边提到的,在DBHelper类中
数据库
连接对象是一个静态的全局变量。因为在同时调用API进行数据查询时,在第一个查询还未结束,
数据库
连接对象还未
关闭
,第二个查询却已经开始查询,所以才会出现
DataReader
没有
关闭
的情况
方法有...
1、主要原因是
DataReader
在
打开
使用时,一个 SqlConnection 只允许
打开
一个
DataReader
,在开启另一个
DataReader
时,
必须
将前面一个先 Close 掉。
2、在语句中并未使用
DataReader
,也提示同样的错误。目前已知问题为:
使用 Sql
Command
的 ExecuteNonQuery()
原因:
DataReader
在
打开
使用时,一个 SqlConnection 只允许
打开
一个
DataReader
,在开启另一个
DataReader
时,
必须
将前面一个先 Close 掉。
使用
数据库
更新或插入语句时,通常用 Sql
Command
的 ExecuteNonQuery() 方法,并且定义了一个公共的
数据库
连接,每次查询时都生成新连接不会有这个问题,但会占用高的
数据库
资源。这种情况下,内部会生成一个空的
DataReader
对象,当前的
数据库
连接
关闭
掉后,该
DataReader
才会释放。.
错误信息:
System.NotSupported
Exception
:“The specified LINQ expression contains references to queries that are associated with different contexts.”
不支持的异常:指定的Linq语句包含了来自不同上下文的查询。
原因分析:
不支持跨DbContext查询,例如join两个不同的DbContext。
解决办法:
将其中一个查询结果先转换为本地查询,例如List集合。
很久没遇到这个问题,都忘记是什么引起的了,记个笔记。
首先foreach遍历是根据列表下标遍历的,foreach遍历前,会根据列表生成对标数组,如列表[1,2,3,4],生成的下标分别是(0,1,2,3),遍历的过程中删除元素,会导致列表变动,后面的元素前移。
如遍历中要删除列表中的元素“1”,删除元素“1”后,列表依次前移,变为[2,3,4],而下一个下标是1,根据下标访问现在的列表,就访问...