当前位置:编程学习 > C#/ASP.NET >>

“WCF服务”的数据库连接问题?

发布出去的WCF服务,有一个执行存储过程向数据库中写数据的方法。

用“DBHelp”类:

       
public  class DBaseHelper
    {
        private string connectiostring = System.Configuration.ConfigurationManager.AppSettings["MyConnString"].ToString();

        private SqlConnection connection = null;

        public SqlConnection Connection
        {
            get
            {
                if (connection == null)
                {
                    connection = new SqlConnection(connectiostring);
                    connection.Open();
                }
                else if (connection.State == ConnectionState.Closed)
                {
                    connection.Open();
                }
                else if (connection.State == ConnectionState.Broken)
                {
                    connection.Close();
                    connection.Dispose();
                    connection.Open();
                }
                return connection;
            }
        }

           
public int ExecuteNonQuery(string strSql, params SqlParameter[] paramter)
        {
            SqlCommand cmd = new SqlCommand(strSql, Connection);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddRange(paramter);
            int count = Convert.ToInt32(cmd.ExecuteNonQuery());
connection.Close();
            //connection.Dispose();
            return count;
        }

}

问题:

运行存储过程,

if (new DAL.DBaseHelper().ExecuteNonQuery("Usp_AddCollectDatas", parameters) > 0)
               return true;
           else
               return false;

因为服务是被持续调用的,一秒钟被调用“50”次,也就是一秒钟写入50条数据。这样反复的“打开连接”、“关闭连接”,一秒钟开关50次岂不是非常浪费资源,增大资源开销。

问题一: 有别的方法,让连接一直开着吗???   比如说“10分钟”内没有数据写入了那么就关掉。

问题二:WCF服务是可以并发的对吧,多个客户端可以同时写入数据。但是,它们用的对数据库的“Session”是不一样的吧??? --------------------编程问答-------------------- Web上访问完必须要关闭,但是这种状况吗?   关闭不等于销毁。 --------------------编程问答-------------------- vs有连接池,如果你的连接字符串完全一样的话,它不会创建新连接的,会取出已经存在的连接使用,如果连接字符串变化了,哪怕是个空格,连接池中也找不到,就要重新创建一个 --------------------编程问答-------------------- 请Google Ado.net连接池。

connection close后并不是真的关闭,而是放回连接池。下次在new一个connection,会从连接池里找,条件是connectionstring完全一致。这个应该完全解决了你你的问题一。 --------------------编程问答-------------------- 你可以把wcf接收到的数据先放在队列中缓存起来,再自己可以控制的多线程的插入数据库 --------------------编程问答-------------------- 二楼和三楼的很强大,学习了! --------------------编程问答--------------------
引用 3 楼 findcaiyzh 的回复:
请Google Ado.net连接池。

connection close后并不是真的关闭,而是放回连接池。下次在new一个connection,会从连接池里找,条件是connectionstring完全一致。这个应该完全解决了你你的问题一。


所以说现在是可以的了,对吧??? --------------------编程问答-------------------- 大师,您怎么看???
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,