我要每秒向数据库中插入一条新的语句,但又不想每秒都重新连接数据库,应该怎么做呢
就是把conn.open放在其他位置,避免影响效率如果把连接定义在窗体里,那么timer_ticker里的语句就无法执行,例:
SqlCommand cmd = new SqlCommand(sql_S.ToString(), conn);//在conn上报错,找不到

解决方案 »

  1.   

    conn是不是没有连接上,,要知道每次一个函数执行完,资源(包括接连)都会自动被释放的
      

  2.   

    把连接对象设成窗体类的域成员,在类的构造函数中初始化并open,在关闭事件中close就可以了
      

  3.   

    如果数据库中数据的时时性对其他应用影响不大的话 可以考虑每秒将数据先插入DataSet中 然后每隔一段时间去更新一次数据库
      

  4.   

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

  5.   

    jiatong1981(末日之痕) 说的很有道理,如果你的数据不是要立即投入运算或者别的什么操作的话,最好还是这么做.另外,即使每秒链接一次数据库,因为连接池的链接还存在,重新链接一次也花不了多少时间
      

  6.   

    lovejxl(CapTsubasa):我这样还是相当于每次调用都去重连了数据库啊,我就是想在每秒执行时不重新连接
    jiatong1981(末日之痕):我也想那么做,但数据对时时性要求很大
      

  7.   

    5楼正解!你频繁的增加数据到数据库中,每秒更新一次,这样的话对安全性考虑不周到,如果出现致命异常则无法rollback,利用dataset可以解决。
      

  8.   

    设置static的连接对象,开始运行的时候就连接数据库,程序结束的时候在关闭,
      

  9.   

    支持lovejxl(CapTsubasa) 
    to::ylzsx1234564() 
    ---
    lovejxl(CapTsubasa):我这样还是相当于每次调用都去重连了数据库啊========
    这样的情况下,除非你主动在应用中关闭了连接,否则窗体类实例只要没有关闭
    都将持有连接,不会去重连数据库
      

  10.   

    还是就使用ado.net的连接池为好,IDbConnection.Open不会每次都建立连接,而是使用连接池中的空闲连接,同理Close不会示范,而是保存到连接池中,连接池的生命周期在你第一次连数据库到进程结束,可以在初始化的时候建立连接,并把它保存到池中。
      

  11.   

    设置static的连接对象,开始运行的时候就连接数据库,程序结束的时候在关闭,//绝对不要这么做关闭链接后链接并没释放,是保存在连接池里的,再次链接不需要重建(重建花的时间长,连接不是)
    除非你连接池的链接太多了(一般就是设计的问题了 呵呵)
    即使1秒链接添加关闭一次,对数据库来说也不算是快的
      

  12.   

    在 配置文件里面 连接试下兄弟<appSettings> </appsettings>
      

  13.   

    批量插入數據,可用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);
         
      

  14.   

    找不到CONN应该是CONN变量声明的作用域的问题.连接是会入池的,并不是没次调用都要新建连接.
      

  15.   

    一秒一次?有点多吧,而且上边所说的连接池的问题,好像不是所有数据库都这样处理吧,感觉DB2好像Close之后再Open就比较慢,也许是设置问题。
    不过我觉得不如每次将这条要执行的sql文缓存一下,等一个预定时间执行一次或许会好些。
      

  16.   

    1、要首先在Web.config里面设置连接的字符串.
    2、添加一个类。在类里面初始化函数中打开数据链接
    3、在WEB窗体中调用类就可以了。而且比较方便