本屌觉得你这思路不对吧   如果一个链接操作数据库open  其它链接还能操作吗
可以做个缓存池 批量更新 如果是实时的那就一个线程往池中插入 插入就返回成功    一个线程往数据库插入

解决方案 »

  1.   

    可以先把sql语句放List里,攒够一定数量一起执行开长连接有个弊端,就是万一连接断开了,程序如何判断自动重连的问题.
      

  2.   


    但是,批量执行,会遇着不 实时 的问题。。用户都是要 实时 的返回数据 这就纠结了海总贱 你没看到我说的吗   实时的就开个线程就行了 这个线程可以让数据库一直open
      

  3.   

    比如你手机修改了联系人 同步到了云端 你是马上就能看到的 而不是有延迟
    你的意思 2个人不能同时连接数据库操作了?长连接那是socket 本身或者是下位机的问题. 现在问题是 频繁访问数据库这块要不要一直开着 不关闭
      

  4.   

    如果让我做我可能会用一个static list<model> 保存要插入的值   然后判断list.count>100或1000登 在做一次批量插入  list.count<100或1000 list.add(...)  这只是我想到的一个方案 不知道是不是可行
      

  5.   

    那你到底指不关闭什么?
    线程?
    如果你的数据库连接没有关闭,底层的socket其实就是在保持长连接啊.
    问题就是会遇到网络不稳定时,连接被迫关闭(你没关,数据库给关了)
      

  6.   

    winfrom的有缓存吗?  我是做bs的  cs没做过  求教下  好像是没有的吧  dataset太占系统内存了 应该不算吧
      

  7.   

    有道理,个人也感觉思路不对。这么频繁的与数据库交互 着实不能频繁的open ,close。
      

  8.   


    当然很多人都会怎样想..但是 如果不能得到及时的数据库操作.用户在别的地方查询数据库 会看不到刚刚的信息..
    现在的问题 跟socket没什么关系...就是一个方法 1分钟可能调用1000次.而1000次都要访问数据库是执行1000次的open close还是在执行操作之前 就一直open不close...
      

  9.   


    现在跟查询没任何关系....不要考虑查询 只考虑insert以及update...
      

  10.   

    有道理,个人也感觉思路不对。这么频繁的与数据库交互 着实不能频繁的open ,close。
    赞这两位,个人觉得是正解
      

  11.   


    现在跟查询没任何关系....不要考虑查询 只考虑insert以及update...
    业务逻辑是根据需求而定的,抛开查询不谈,根本没法讨论如何插入更好.
    如果用户一天才去查询一次,你是1秒更新一次还是1分钟更新一次,对用户来说根本没有区别
      

  12.   

    就算用户1天一查询 但是我要求数据库是最新的数据..你不能因为用户不查询就不保证数据库的数据不是最新的吧所以 我们现在讨论的是 频繁的执行insert 以及update ....
      

  13.   


    当然很多人都会怎样想..但是 如果不能得到及时的数据库操作.用户在别的地方查询数据库 会看不到刚刚的信息..
    现在的问题 跟socket没什么关系...就是一个方法 1分钟可能调用1000次.而1000次都要访问数据库是执行1000次的open close还是在执行操作之前 就一直open不close...你不能这样吗? 当他提交后反馈给客户数数据正在处理中,可能会有延迟,这样不行吗?
     
      

  14.   

    using(sqlcon con=new sqlcon(""))
    {
       con.open();
       using(sqlcmd cmd=new sqlcmd(con))
       {
         //执行sql insert 1
       //执行sql insert 2
       //执行sql insert 3
       //执行sql insert 4
       //执行sql insert 5   }
       con.close()
    }
    写个执行 sql语句数组的方法。减少con开关次数。
      

  15.   

    完全可以sqlcon con=new sqlcon(""); //定义全局变量private void OpenConnection()
    {
         con.Open(); //初始化的时候就打开连接
    }
            
            //判断connection的连接状态
            private void CheckConnection()
            {
                if (con.State != System.Data.ConnectionState.Open)
                {
                    con.Close();
                    con.Open();
                }
            }
    执行ddl,每次执行都判断connection的连接状态            SqlCommand cmd = new SqlCommand("", con);
                CheckConnection(); 
                cmd.ExecuteNonQuery();
      

  16.   

    你这样没看懂楼主问的呢而且你这插入是效率最低的方法  自测10W数据要3分多   试试这个方法吧http://blog.csdn.net/u012394290/article/details/38090047 
      

  17.   


    哥哥我那只有一个sql...是不同者调用方法参数不同执行不同的sql ....
      

  18.   


    哥哥我那只有一个sql...是不同者调用方法参数不同执行不同的sql ....我知道  所以我说他没理解你说的啊
      

  19.   

    如果连接数够用,那就不关,上面提到的网络问题什么的都可以捕获异常后做补偿
    如果连接不够用,那就每执行完条后看有没有待执行的,如果没有了就关掉。这个场景用Semaphore正合适,要插入的东西放Queue
      

  20.   

    先拼sql语句啊,然后一起执行
      

  21.   

    我很少回答问题, 但我觉得上面兄弟们的回答有点片面性, 1. 数据库的连接, 可以open, 就一定可以close。
    2. 所谓用的时候open, 不用的时候close, 这估计是教程看多了, 或是没写过大型的程序
    3. 楼主的问题,有一点没说清楚, 你的这个插入, 要不要返回状态(就是是否插入成功的标志), 要不要返回状态,是一个十分重要的问题, 会影响系统的设计。4. 假定就是个插入语句,无所谓而且也不关心是否是成功的时候, 我给你说个比较典型的应用设计场景没错,就是消息队列:
    1. 一个服务, 对外提供一个接口, 接收数据
    2. 接收数据后放入一个队列
    3. 这个服务本身会不停的从队列中取数据,然后操作数据很多人一看,觉得你这不是废话么, 谁都知道,  但真正理解并且能用好的人,确实不多, 而且这个模型扩展性极强