C#代码,MySql数据库,老报Datareader没关闭There is already an open DataReader associated with C# 数据库MySql多线程 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 m_conn = m_connpool.getConnection();不要用共用一个connection,用完就释放using(var conn= new MySqlConnection(connectionstring)){string sql = "select loc from table_ipaddr where id = '" + i + "'";....} *****************************************************************************签名档: http://feiyun0112.cnblogs.com/ 很明显,cmd没有销毁,然后又new了一个,原先的cmd还连接着,果断报错 但是我有个问题,cmd我没有销毁,但是如果我只启动一个线程的话一直循环的做数据库操作是没有问题的。但是超过一个线程就不行。 不行啊,我加了一句cmd.dispose()还是同样报错! 不行啊,我加了一句cmd.dispose()还是同样报错!用完close()再dispose()试下 不行啊,我加了一句cmd.dispose()还是同样报错!用完close()再dispose()试下sqlcommand没有close方法啊! 不行啊,我加了一句cmd.dispose()还是同样报错!用完close()再dispose()试下sqlcommand没有close方法啊!你是多线程,在你close之前,另一条线程已经在执行cmd了,所以报错。用lock锁一下代码,要么就不要共用一个conn。 但是我有个问题,cmd我没有销毁,但是如果我只启动一个线程的话一直循环的做数据库操作是没有问题的。但是超过一个线程就不行。单线程,是没有问题的。多线程就像我上面说的那样,冲突了。 不行啊,我加了一句cmd.dispose()还是同样报错!用完close()再dispose()试下sqlcommand没有close方法啊!你是多线程,在你close之前,另一条线程已经在执行cmd了,所以报错。用lock锁一下代码,要么就不要共用一个conn。我不是用的一个connection,因为是连接池,所以我得到的不同的connection,连接池的代码您看一下吧public class DataBasePool { private Stack<MySqlConnection> pool; private const int POOL_MAX_SIZE = 20; private int current_Size = 0; private string ConnString = "";//连接字符串 private const string SYS_PROPERTY = "config\\SysProperty.xml"; private static DataBasePool connPool; private DataBasePool() { if (pool == null) { pool = new Stack<MySqlConnection>(); } } [MethodImpl(MethodImplOptions.Synchronized)] public static DataBasePool getInstance() { if (connPool == null) { connPool = new DataBasePool(); } return connPool; } public MySqlConnection getConnection() { MySqlConnection conn; lock (this) { if (pool.Count == 0) { if (current_Size < POOL_MAX_SIZE) { conn = createConnection(); current_Size++; //把conn加入到pool 中 pool.Push(conn); } else { try { Monitor.Wait(this); } catch (Exception e) { Console.WriteLine(e.Message); } } } conn = (MySqlConnection)pool.Pop(); } return conn; } private string GetConnString() { if (ConnString == "") { ConnString = "Data Source=127.0.0.1;" + "Port=3308;" + "User ID=root;" + "Password=123456;" + "Initial Catalog=testdb;" + "Pooling=true;" + "CharSet=utf8;"; } return ConnString; } public void releaseConnection(MySqlConnection conn) { lock (this) { pool.Push(conn); Monitor.Pulse(this); } } private MySqlConnection createConnection() { lock (this) { MySqlConnection newConn = new MySqlConnection(GetConnString()); newConn.Open(); return newConn; } } } c#中静态方法给静态变量附值 c# 操作带命名控件的xml文件 能反射现成的DLL,用EMIT创建新的DLL吗? 数据库日期如何改为空 devexpress gauge控件 C#中关于DateTime.Now的问题! 高人请进,关于DataGrid动态生成列的状态保持!!! 100分求一个特速的排序算法,代码 sb 问题: Hyperlink2 的下滑线怎么去掉阿? 在线等了?不行明天要加班了。谢谢!! winform按比例压缩图片 类似这样的视频播放器,如何实现? 调用WCF报请求被终止错误
不要用共用一个connection,用完就释放using(var conn= new MySqlConnection(connectionstring))
{
string sql = "select loc from table_ipaddr where id = '" + i + "'";
....
}
*****************************************************************************
签名档: http://feiyun0112.cnblogs.com/
用完close()再dispose()试下
用完close()再dispose()试下
sqlcommand没有close方法啊!
用完close()再dispose()试下
sqlcommand没有close方法啊!
你是多线程,在你close之前,另一条线程已经在执行cmd了,所以报错。
用lock锁一下代码,要么就不要共用一个conn。
单线程,是没有问题的。多线程就像我上面说的那样,冲突了。
用完close()再dispose()试下
sqlcommand没有close方法啊!
你是多线程,在你close之前,另一条线程已经在执行cmd了,所以报错。
用lock锁一下代码,要么就不要共用一个conn。
我不是用的一个connection,因为是连接池,所以我得到的不同的connection,连接池的代码您看一下吧
public class DataBasePool
{
private Stack<MySqlConnection> pool;
private const int POOL_MAX_SIZE = 20;
private int current_Size = 0;
private string ConnString = "";//连接字符串
private const string SYS_PROPERTY = "config\\SysProperty.xml"; private static DataBasePool connPool; private DataBasePool()
{
if (pool == null)
{
pool = new Stack<MySqlConnection>();
}
} [MethodImpl(MethodImplOptions.Synchronized)]
public static DataBasePool getInstance()
{
if (connPool == null)
{
connPool = new DataBasePool();
}
return connPool;
} public MySqlConnection getConnection()
{
MySqlConnection conn;
lock (this)
{
if (pool.Count == 0)
{
if (current_Size < POOL_MAX_SIZE)
{
conn = createConnection();
current_Size++;
//把conn加入到pool 中 pool.Push(conn);
}
else
{
try
{
Monitor.Wait(this);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
conn = (MySqlConnection)pool.Pop();
}
return conn;
} private string GetConnString()
{
if (ConnString == "")
{
ConnString = "Data Source=127.0.0.1;"
+ "Port=3308;"
+ "User ID=root;"
+ "Password=123456;"
+ "Initial Catalog=testdb;"
+ "Pooling=true;"
+ "CharSet=utf8;";
}
return ConnString;
} public void releaseConnection(MySqlConnection conn)
{
lock (this)
{
pool.Push(conn);
Monitor.Pulse(this);
}
} private MySqlConnection createConnection()
{
lock (this)
{
MySqlConnection newConn = new MySqlConnection(GetConnString());
newConn.Open();
return newConn;
}
}
}