日期:2014-05-19  浏览次数:20851 次

不想反复连接数据库,如何避免,得到正解立即结贴

我要每秒向数据库中插入一条新的语句,但又不想每秒都重新连接数据库,应该怎么做呢
就是把conn.open放在其他位置,避免影响效率

如果把连接定义在窗体里,那么timer_ticker里的语句就无法执行,例:
SqlCommand   cmd   =   new   SqlCommand(sql_S.ToString(),   conn);//在conn上报错,找不到

------解决方案--------------------
conn是不是没有连接上,,

要知道每次一个函数执行完,资源(包括接连)都会自动被释放的
------解决方案--------------------
DataAdapter
------解决方案--------------------
把连接对象设成窗体类的域成员,在类的构造函数中初始化并open,在关闭事件中close就可以了
------解决方案--------------------
用一个线程吧,在线程结束之前数据库都是连接的。
------解决方案--------------------
如果数据库中数据的时时性对其他应用影响不大的话 可以考虑每秒将数据先插入DataSet中 然后每隔一段时间去更新一次数据库



------解决方案--------------------
private SqlConnection myConnection=new SqlConnection( "server=server1;database=db;uid=sa;pwd=; ");
然后在第一次使用之前
myConnection.open();

------解决方案--------------------
jiatong1981(末日之痕) 说的很有道理,如果你的数据不是要立即投入运算或者别的什么操作的话,最好还是这么做.

另外,即使每秒链接一次数据库,因为连接池的链接还存在,重新链接一次也花不了多少时间
------解决方案--------------------
那就使用长连接
------解决方案--------------------
5楼正解!你频繁的增加数据到数据库中,每秒更新一次,这样的话对安全性考虑不周到,如果出现致命异常则无法rollback,利用dataset可以解决。
------解决方案--------------------
设置static的连接对象,开始运行的时候就连接数据库,程序结束的时候在关闭,
------解决方案--------------------
支持lovejxl(CapTsubasa)
to::ylzsx1234564()
---
lovejxl(CapTsubasa):我这样还是相当于每次调用都去重连了数据库啊

========
这样的情况下,除非你主动在应用中关闭了连接,否则窗体类实例只要没有关闭
都将持有连接,不会去重连数据库
------解决方案--------------------

“每秒连接然后关闭”比一直连着效率高多了。
------解决方案--------------------
还是就使用ado.net的连接池为好,IDbConnection.Open不会每次都建立连接,而是使用连接池中的空闲连接,同理Close不会示范,而是保存到连接池中,连接池的生命周期在你第一次连数据库到进程结束,可以在初始化的时候建立连接,并把它保存到池中。
------解决方案--------------------
设置static的连接对象,开始运行的时候就连接数据库,程序结束的时候在关闭,

//绝对不要这么做

关闭链接后链接并没释放,是保存在连接池里的,再次链接不需要重建(重建花的时间长,连接不是)
除非你连接池的链接太多了(一般就是设计的问题了 呵呵)
即使1秒链接添加关闭一次,对数据库来说也不算是快的
------解决方案--------------------
静态链接,使用前验证连接状态,可以达到你的要求

但不一定最快,你这样会一直占用连接,可能会大量浪费资源
------解决方案--------------------
时时更新好么?为什么要时时更新?不能以分钟为单位么?不能以10分钟为单位么?
时时更新有什么好处?每秒连接数据库好么?
------解决方案--------------------
在 配置文件里面 连接试下兄弟 <appSettings> </appsettings>
------解决方案--------------------
批量插入數據,可用SqlBulkCopy
SqlBulkCopy bulkCopy = null;
Database database = DatabaseFactory.CreateDatabase();
using (SqlConnection destConn = (database.CreateConnection() as SqlConnection))
{
destConn.Open();
bulkCopy = new SqlBulkCopy(destConn);
bulkCopy.BulkCopyTimeout = 360;
bulkCopy.DestinationTableName = "destTableName ";

// 創建相同的表結構(與數據庫中相同),並且添加數據至該變量
DataTable dataTable = new DataTable();