写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. on-tap和on-click

    简单的说,当你点击移动设备屏幕上的一个点之后,on-tap会立刻触发,而on-click(可能)需要等待300ms才触发——这是移动设备浏览器为了检测是否存在双击的一个检测周期长度. 在移动设备上,应 ...

  2. JS模拟窗口

    摘自于网络:http://www.cnblogs.com/joinger/articles/1297228.html <!DOCTYPE html PUBLIC "-//W3C//DT ...

  3. Hibernate主键生成方式之hilo

    当利用Hibernate的getHibernateTemplate().save(obj);插入的对象的主键ID为null的时候自动生成5位数的主键ID进行插入. 此笔记的由来: 老夫在此处上传材料后 ...

  4. 【java图形计算器】 java awt swing组件应用

    package package1; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swi ...

  5. linux的学习系列 10---vi

    Linux下的文本编辑器有很多种,vi 是最常用的,也是各版本Linux的标配.注意,vi 仅仅是一个文本编辑器,可以给字符着色,可以自动补全,但是不像 Windows 下的 word 有排版功能. ...

  6. 几个SQL语句笔试题

    1.表A和表B具有完全相同的结构,查出表A中有但表B中没有的数据: create table A( id int , name ), password ) ); create table B( id ...

  7. NSUserDefault -- synchronize 浅析

    NSUserDefault的使用比较简单:NSUserDefaults *mySettingData = [NSUserDefaults standardUserDefaults];  创建NSUse ...

  8. java 内存分配全面解析

    JVM是什么? 首先要知道的是Java程序运行在JVM(Java Virtual Machine,Java虚拟机)上;可以把JVM理解成Java程序和操作系统之间的桥梁,JVM实现了 Java的平台无 ...

  9. 利用php函数mkdir递归创建层级目录

    项目开发中免不了要在服务器上创建文件夹,比如上传图片时的目录,模板解析时的目录等.这不当前手下的项目就用到了这个,于是总结了几个循环创建层级目录的方法. php默认的mkdir一次只能创建一层目录,而 ...

  10. jquery 事件注册 与重复事件处理

    <!doctype html><html lang="us"><head><meta charset="utf-8"& ...