不想反复连接数据库,如何避免,得到正解立即结贴 我要每秒向数据库中插入一条新的语句,但又不想每秒都重新连接数据库,应该怎么做呢就是把conn.open放在其他位置,避免影响效率如果把连接定义在窗体里,那么timer_ticker里的语句就无法执行,例:SqlCommand cmd = new SqlCommand(sql_S.ToString(), conn);//在conn上报错,找不到 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 conn是不是没有连接上,,要知道每次一个函数执行完,资源(包括接连)都会自动被释放的 把连接对象设成窗体类的域成员,在类的构造函数中初始化并open,在关闭事件中close就可以了 如果数据库中数据的时时性对其他应用影响不大的话 可以考虑每秒将数据先插入DataSet中 然后每隔一段时间去更新一次数据库 private SqlConnection myConnection=new SqlConnection("server=server1;database=db;uid=sa;pwd=;");然后在第一次使用之前myConnection.open(); jiatong1981(末日之痕) 说的很有道理,如果你的数据不是要立即投入运算或者别的什么操作的话,最好还是这么做.另外,即使每秒链接一次数据库,因为连接池的链接还存在,重新链接一次也花不了多少时间 lovejxl(CapTsubasa):我这样还是相当于每次调用都去重连了数据库啊,我就是想在每秒执行时不重新连接jiatong1981(末日之痕):我也想那么做,但数据对时时性要求很大 5楼正解!你频繁的增加数据到数据库中,每秒更新一次,这样的话对安全性考虑不周到,如果出现致命异常则无法rollback,利用dataset可以解决。 设置static的连接对象,开始运行的时候就连接数据库,程序结束的时候在关闭, 支持lovejxl(CapTsubasa) to::ylzsx1234564() ---lovejxl(CapTsubasa):我这样还是相当于每次调用都去重连了数据库啊========这样的情况下,除非你主动在应用中关闭了连接,否则窗体类实例只要没有关闭都将持有连接,不会去重连数据库 还是就使用ado.net的连接池为好,IDbConnection.Open不会每次都建立连接,而是使用连接池中的空闲连接,同理Close不会示范,而是保存到连接池中,连接池的生命周期在你第一次连数据库到进程结束,可以在初始化的时候建立连接,并把它保存到池中。 设置static的连接对象,开始运行的时候就连接数据库,程序结束的时候在关闭,//绝对不要这么做关闭链接后链接并没释放,是保存在连接池里的,再次链接不需要重建(重建花的时间长,连接不是)除非你连接池的链接太多了(一般就是设计的问题了 呵呵)即使1秒链接添加关闭一次,对数据库来说也不算是快的 在 配置文件里面 连接试下兄弟<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变量声明的作用域的问题.连接是会入池的,并不是没次调用都要新建连接. 一秒一次?有点多吧,而且上边所说的连接池的问题,好像不是所有数据库都这样处理吧,感觉DB2好像Close之后再Open就比较慢,也许是设置问题。不过我觉得不如每次将这条要执行的sql文缓存一下,等一个预定时间执行一次或许会好些。 1、要首先在Web.config里面设置连接的字符串.2、添加一个类。在类里面初始化函数中打开数据链接3、在WEB窗体中调用类就可以了。而且比较方便 高分求解释winform datagridview中的一个问题 请问:如何获得axWindowsMediaPlayer当前播放歌曲的url? 谁介绍下下面2中代码写法的特点 或者说什么区别 c#连接oracle 对象名无效 在Winfrom中怎样用Axadodbc连接数据库问题 请教cmd.ExecuteScalar()是空值的情况下执行速度很慢的问题! 有个不大不小的问题 希望大家帮帮忙 散分50 求助《C#web应用程序入门经典》的源代码 c# 调用c++ dll 求教,分页问题。 利用程序创建EXchange邮箱问题 为什么我的dataset数据列一定要用索引值才能提取出来呢
然后在第一次使用之前
myConnection.open();
jiatong1981(末日之痕):我也想那么做,但数据对时时性要求很大
to::ylzsx1234564()
---
lovejxl(CapTsubasa):我这样还是相当于每次调用都去重连了数据库啊========
这样的情况下,除非你主动在应用中关闭了连接,否则窗体类实例只要没有关闭
都将持有连接,不会去重连数据库
除非你连接池的链接太多了(一般就是设计的问题了 呵呵)
即使1秒链接添加关闭一次,对数据库来说也不算是快的
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);
不过我觉得不如每次将这条要执行的sql文缓存一下,等一个预定时间执行一次或许会好些。
2、添加一个类。在类里面初始化函数中打开数据链接
3、在WEB窗体中调用类就可以了。而且比较方便