不想反复连接数据库,如何避免,得到正解立即结贴
我要每秒向数据库中插入一条新的语句,但又不想每秒都重新连接数据库,应该怎么做呢
就是把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();
DataColumn col0 = dataTable.Columns.Add( "DetailId ", typeof(System.Guid));
col0.AllowDBNull = false;
...
// 定影射
bulkCopy.ColumnMappings.Add( "DetailId ", "DetailId ");
...
// 添加至量
for()
{
...
dataTable.Rows.Add(row);
}
// send the data to the server
bulkCopy.WriteToServer(dataTable);
[解决办法]
找不到CONN应该是CONN变量声明的作用域的问题.连接是会入池的,并不是没次调用都要新建连接.
[解决办法]
把Connection设置为静态的
[解决办法]
大数据量频繁访问数据库程序 一般都又个缓冲平台,程序的查询和修改都是最数据缓冲器操作。
然后定时更新到数据库中。
不过这就有个问题,你其他的需要使用该数据库的程序也必须要从这个平台得数据(不要及时数据可以不走)
还有就是加锁,并发这些情况需要你特殊处理。
根据你所说的一秒一个,只要每次写的数据量不是很大,每次连一下也没什么不可。
[解决办法]
一秒一次?有点多吧,而且上边所说的连接池的问题,好像不是所有数据库都这样处理吧,感觉DB2好像Close之后再Open就比较慢,也许是设置问题。
不过我觉得不如每次将这条要执行的sql文缓存一下,等一个预定时间执行一次或许会好些。
[解决办法]
1、要首先在Web.config里面设置连接的字符串.
2、添加一个类。在类里面初始化函数中打开数据链接
3、在WEB窗体中调用类就可以了。而且比较方便