当前位置:Gxlcms >
数据库问题 >
Mysql的MySqlDataReader对于MysqlConnection是独占式
Mysql的MySqlDataReader对于MysqlConnection是独占式
时间:2021-07-01 10:21:17
帮助过:3人阅读
MySqlCommand();
MySqlConnection mycon =
new MySqlConnection(MysqlDao.constr);
//创建连接
MySqlDataReader myreader;
mycon.Open();
foreach(Knowledge tk
in KnowledgeList)
{
insertSql =
"INSERT INTO `opensimmap_users`.`knowledge` (`userid`, `patternid`, `actionid`, `patternparas`, `actionparas`) VALUES (‘"+ uid +
"‘, ‘"+ pid +
"‘, ‘" + bid +
"‘, ‘" + pp +
"‘, ‘" + bp +
"‘);";
mycmd.CommandText =
insertSql;
res =
mycmd.ExecuteNonQuery();
mycmd.CommandText =
"select max(knowledgeid) from opensimmap_users.knowledge";
myreader =
mycmd.ExecuteReader();
myreader.Read();
int kid =
int.Parse(myreader.GetString(
"max(knowledgeid)"));
//...
}
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=opensimmap_users;MutipleActiveResultSets=True";
然后欢快的跑起来,跪了。
于是才知道,SqlServer里才有这个属性,Mysql里没有。。。
所以很遗憾,看来DataReader每次用完了必须关掉。。。
最后代码就不展示了,仅仅把open()和close()都放进循环就好了。。为了功能,抛弃了效率T^T。
Mysql的MySqlDataReader对于MysqlConnection是独占式
标签: