首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

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

2012-03-18 
不想反复连接数据库,如何避免,得到正解立即结贴 我要每秒向数据库中插入一条新的语句,但又不想每秒都重新

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

我要每秒向数据库中插入一条新的语句,但又不想每秒都重新连接数据库,应该怎么做呢
就是把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窗体中调用类就可以了。而且比较方便

热点排行