在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
1、当SqlDataReader没有关闭之前,数据库连接会一直保持open状态,所以在使用SqlDataReader时,使用完毕应该马上调用SqlDataReader.Close()关闭它。 2、一个连接只能被一个SqlDataReader使用,这也是为什么要尽早关闭SqlDataReader的原因。
这部分来自其他网上资料,但是自己测试却发现真实情况不是这样。 本人这样测试,数据库操作类做长连接,也就是整个客户端程序只用一个数据库连接保持打开不关闭。客户端开启三个不同线程通过该打开的数据库连接获取数据,使用dataRead,用后不关闭dataRead和数据连接,未见异常,程序内存没有变大,数据库会话也只有一个。 数据库操作类 /// <summary> /// 数据库操作类 /// </summary> class DBHelper { //长连接是否打开 bool connet = false; public string connstr = "Data Source=ORCL;uid=admin;pwd=jxdflp"; //数据库链接对象 private OracleConnection Conn = null; public DBHelper() { InitConnection(); Thread tr=new Thread(testConncet); tr.IsBackground=true; tr.Start(); } //初始化数据库链接 private void InitConnection() { try { //如果连接对象不存在,创建连接 if (Conn == null) Conn = new OracleConnection(connstr); //如果连接对象关闭,打开连接 if (Conn.State == ConnectionState.Closed) Conn.Open(); //如果连接中断,重启连接 if (Conn.State == ConnectionState.Broken) { Conn.Close(); Conn.Open(); } connet = true; } catch (Exception ex) { ClassVar.WriteErrorLog(ex.ToString()); } } //测试长连接线程 private void testConncet() { while (true) { try { string sql = "select 1 from dual"; OracleDataReader read = GetDataReader(sql); if (read.Read()) { connet = true; } else { connet = false; InitConnection(); } } catch (Exception ex) { ClassVar.WriteErrorLog(ex.ToString()); } Thread.Sleep(100); } } //查询,获取DataReader public OracleDataReader GetDataReader(string sqlStr) { OracleDataReader read=null; try { OracleCommand cmd = new OracleCommand(sqlStr, Conn); read= cmd.ExecuteReader(); } catch (Exception ex) { ClassVar.WriteErrorLog(ex.ToString()); } return read; } } 界面类 1 public partial class Form1 : Form 2 { 3 4 DBHelper db; 5 public Form1() 6 { 7 InitializeComponent(); 8 9 db = new DBHelper(); 10 Thread tr = new Thread(test); 11 tr.IsBackground = true; 12 tr.Start(); 13 14 Thread tr1 = new Thread(test2); 15 tr1.IsBackground = true; 16 tr1.Start(); 17 18 Thread tr2 = new Thread(test3); 19 tr2.IsBackground = true; 20 tr2.Start(); 21 } 22 23 24 private void test() 25 { 26 while (true) 27 { 28 string sql = "select * from JZFWXX t"; 29 OracleDataReader read= db.GetDataReader(sql); 30 Thread.Sleep(5); 31 } 32 } 33 34 private void test2() 35 { 36 while (true) 37 { 38 string sql = "select * from JZRXX t"; 39 OracleDataReader read = db.GetDataReader(sql); 40 Thread.Sleep(5); 41 } 42 } 43 44 private void test3() 45 { 46 while (true) 47 { 48 string sql = "select * from MJSBXX t"; 49 OracleDataReader read = db.GetDataReader(sql); 50 Thread.Sleep(5); 51 } 52 } 53 }
|
请发表评论