写Secondlife智能体的知识系统小插件的时候遇到的这个问题。

在把某个NPC的全部知识复制给另一个NPC的时候,对数据库操作,为了提升一点效率希望与数据库建立一次连接,全部添加进表以后再断开连接。

于是这样写的:

MySqlCommand mycmd = new MySqlCommand();
MySqlConnection mycon = new MySqlConnection(MysqlDao.constr);//创建连接
mycmd.Connection = mycon;
MySqlDataReader myreader;
mycon.Open();
foreach(Knowledge tk in KnowledgeList)
{
  insertSql = "INSERT INTO ...);";
  mycmd.CommandText = insertSql;
  res = mycmd.ExecuteNonQuery();   mycmd.CommandText = "select ... from ...";
  myreader = mycmd.ExecuteReader();
  myreader.Read();
int kid = int.Parse(myreader.GetString("..."));
//...
}
mycon.Close();

用到DataReader的原因:因为mysql的自增序号会将插入修改等操作全部计数在内,所以每次插入以后需要立即反查刚才这个序号,在拿到程序里使用。

结果发现报错:There is already an open DataReader associated with this Connection which must be closed first.

但是如果不用DataReader,只插入删除修改的话是没事的,上CSDN看到大牛回答DataReader这货是独占Connection的。。可以在把它的属性加一个MultipleActiveResultSets=True,看到这里的小白我兴高采烈的跑去改:


MysqlDao.constr = "server=localhost;User Id=root;password=****;Database=...;MutipleActiveResultSets=True";

然后欢快的跑起来,跪了。

于是才知道,SqlServer里才有这个属性,Mysql里没有。。。

所以很遗憾,看来DataReader每次用完了必须关掉。。。

最后代码就不展示了,仅仅把open()和close()都放进循环就好了。。为了功能,抛弃了效率T^T。

啊!刚才问了crccw和Araleii,表示可以只把DataReader给dispose就可以:

MySqlCommand mycmd = new MySqlCommand();
MySqlConnection mycon = new MySqlConnection(MysqlDao.constr);//创建连接
mycmd.Connection = mycon;
MySqlDataReader myreader;
mycon.Open();
foreach(Knowledge tk in KnowledgeList)
{
  insertSql = "INSERT INTO ...);";
  mycmd.CommandText = insertSql;
  res = mycmd.ExecuteNonQuery();   mycmd.CommandText = "select ... from ...";
  myreader = mycmd.ExecuteReader();
  myreader.Read();
int kid = int.Parse(myreader.GetString("..."));
  myreader.dispose();//只要加这句就可以了
}
mycon.Close();

Mysql的MySqlDataReader对于MysqlConnection是独占式的更多相关文章

  1. SVN 使用锁实现独占式签出

      SVN默认并行工作,但是自动合并又做得很渣.团队工作中,如果确实有一些文件希望独占式签出可以使用SVN的特别属性.       Subversion针对此问题的解决方案是提供一种机制,提醒用户在开 ...

  2. TFS2008解除独占式锁定文件命令(转载)

    使用场景:如果项目团队成员A对项目某个文件以独占式方式签出,恰好那天该成员A没有来上班而成员需要对此文件进入修改并check in,这时需要先把A对该文件的锁定解除.没有IDE可以使用,只能使用下面的 ...

  3. C# 制作Java +Mysql+Tomcat 环境安装程序,一键式安装

    原文:C# 制作Java +Mysql+Tomcat 环境安装程序,一键式安装 要求: JDK.Mysql.Tomcat三者制作成一个安装包, 不能单独安装,安装过程不显示三者的界面, 安装完成要配置 ...

  4. Java并发包源码学习系列:AQS共享式与独占式获取与释放资源的区别

    目录 Java并发包源码学习系列:AQS共享模式获取与释放资源 独占式获取资源 void acquire(int arg) boolean acquireQueued(Node, int) 独占式释放 ...

  5. MySQL SQL优化之字符串索引隐式转换

    之前有用户很不解:SQL语句非常简单,就是select * from test_1 where user_id=1 这种类型,而且user_id上已经建立索引了,怎么还是查询很慢? test_1的表结 ...

  6. MySQL中间件之ProxySQL(11):链式规则( flagIN 和 flagOUT )

    返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.html 1.理解链式规则 在mysql_query_rules表中,有两个特殊 ...

  7. AQS独占式同步队列入队与出队

    入队 Node AQS同步队列和等待队列共用同一种节点结构Node,与同步队列相关的属性如下. prev 前驱结点 next 后继节点 thread 入队的线程 入队节点的状态 INITIAl 0 初 ...

  8. MySQL解惑——GROUP BY隐式排序

    MySQL中GROUP BY隐式排序是什么概念呢? 主要是其它RDBMS没有这样的概念,如果没有认真了解过概念,对这个概念会感觉有点困惑,我们先来看看官方文档的介绍: 官方文档MySQL 5.7 Re ...

  9. MySQL解惑——GROUP BY隐式排序

    原文:MySQL解惑--GROUP BY隐式排序 MySQL中GROUP BY隐式排序是什么概念呢? 主要是其它RDBMS没有这样的概念,如果没有认真了解过概念,对这个概念会感觉有点困惑,我们先来看看 ...

随机推荐

  1. 网站网址前的小logo

    认识网页前小图标 1.能在浏览器标签.地址栏左边和收藏夹栏显示小图标的网站,其网站都是使用了其名称为"favicon.ico"图标文件,格式为ico格式,图标大小一般为16*16, ...

  2. navicat连接oracle时发现 ORA-12737 set CHS16GBK

    oracle安装目录下找到目录:\product\11.2.0\dbhome_1\BIN, 将箭头标注的三个文件(截图中为navicat中的目录,已经测试成功,亲们可以参考)从目录中拷贝纸navica ...

  3. display:table表格合并单元格

    直接上代码: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEn ...

  4. opencv----人脸美白算法,祛斑,祛痘,磨皮等

    现在各种手机camera软件都自带图像美颜处理,但是成熟的算法在网上很难搜到,博主也是自己摸索了自己做出来了,跟美图秀秀的处理效果相比,还不错,感觉很好,所以PO上来,与各位博友分享之. 首先是根据网 ...

  5. Oulipo HDU 1686 KMP模板

    题目大意:求模式串在主串中的出现次数. 题目思路:KMP模板题 #include<iostream> #include<algorithm> #include<cstri ...

  6. LightOJ 1282 Leading and Trailing 数论

    题目大意:求n^k的前三位数 和 后三位数. 题目思路:后三位数直接用快速幂取模就行了,前三位则有些小技巧: 对任意正数都有n=10^T(T可为小数),设T=x+y,则n=10^(x+y)=10^x* ...

  7. 大学二三事——那些人(1)

    校歌墙的对面是一座历史比较悠久的建筑,以前叫做12号楼,后来改成了"诚"字楼. 在诚字楼一楼昏暗的走廊上,你总是能看见一位大概四五十岁的大叔,有时他会指着挂在墙上的学校简介,一个人 ...

  8. 实验用rootkit

    进程对比实验用得到rootkit: 1.FU rootkit 简单的来说,FU是一个隐藏进程的工具.,FU_Rootkit是开源的,用C语言编写.FU_Rootkit主程序包括2个部分:Fu.exe和 ...

  9. UUID 浅析

    在2013年3月21日苹果已经通知开发者,从2013年5月1日起,访问UIDID的应用将不再能通过审核,替代的方案是开发者应该使用“在iOS 6中介绍的Vendor或Advertising标示符”. ...

  10. js框架——angular.js(5)

    1. 3种过滤方式 <html> <head> <meta charset='utf-8'> <script src="js/angular.js& ...