首页 新闻 会员 周边 捐助

哪位大大帮我看看这样写的数据库连接代码是否有问题?

0
悬赏园豆:200 [已解决问题] 解决于 2012-06-02 18:06
static private SqlCommand cmd;
        private static SqlConnection conn;
        static private readonly string connString = ConfigurationManager.ConnectionStrings["ConString"].ConnectionString;   //从web.config获取数据库连接字符串

        public static SqlConnection Conn
        {
            get
            {
                if (conn == null)
                {
                    conn = new SqlConnection(connString);
                    conn.Open();
                }
                else if (conn.State == ConnectionState.Broken)
                {
                    conn.Close();
                    conn.Open();
                }
                else if (conn.State == ConnectionState.Closed)
                {
                    conn.Open();
                }
                return conn;
            }
        }

        static SqlHelpers()
        {
            cmd = new SqlCommand();
            cmd.Connection = Conn;
            cmd.CommandType = CommandType.StoredProcedure;
        }

        /// <summary>通过存储过程,返回DataTable结果集
        /// </summary>
        /// <param name="parName">存储过程名</param>
        /// <param name="pars">存储过程参数</param>
        /// <returns></returns>
        public DataTable GetDataTable(string parName, SqlParameter[] pars)
        {
            try
            {
                cmd.CommandText = parName;
                if (pars != null && pars.Length > 0)
                {
                    foreach (SqlParameter item in pars)
                    {
                        cmd.Parameters.Add(item);
                    }
                }
                DataTable dt = new DataTable();
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(dt);

                cmd.Parameters.Clear();
                return dt;
            }
            catch (Exception)
            {
                cmd.Parameters.Clear();
                return null;
            }
        }

我自己弄的网站,数据库连接是这么写的,但是我测试的时候,同时并发人数达到200人的时候,就会出现找不到数据库中的某个字段,但是重新上传一下dll文件就能找到了!我怀疑是数据库连接语句的问题,菜鸟求教……

Death_Hacker;的主页 Death_Hacker; | 初学一级 | 园豆:59
提问于:2012-06-02 14:19
< >
分享
最佳答案
0

SqlConnection是稀缺资源,用完立即要关闭,定义为static会带来问题。

通常的做法是放在using中,比如:

using(SqlConnection conn = new SqlConnection(connString))
{
    conn.Open();
}
收获园豆:100
dudu | 高人七级 |园豆:29570 | 2012-06-02 14:35

恩,这种写法我也知道,真心求教,我那种写法,不会自动关闭吗?

Death_Hacker; | 园豆:59 (初学一级) | 2012-06-02 14:37

@Death_Hacker;: 不会自动关闭

dudu | 园豆:29570 (高人七级) | 2012-06-02 17:09

@dudu: 恩,我刚问过我老师,他说多个线程调用一个对象就会报错,谢谢你们啊

Death_Hacker; | 园豆:59 (初学一级) | 2012-06-02 18:06
其他回答(2)
0

你用什么测试软件的?

hamigua | 园豆:4 (初学一级) | 2012-06-02 14:27

用的VS上自带的

支持(0) 反对(0) Death_Hacker; | 园豆:59 (初学一级) | 2012-06-02 14:28
0

应该是static引起的,建议如2楼那样去做!如果返回SqlDataReder就不要用using了

收获园豆:100
xu_happy_you | 园豆:222 (菜鸟二级) | 2012-06-02 15:53

@dudu: 恩,我刚问过我老师,他说多个线程调用一个对象就会报错,谢谢你们啊

支持(0) 反对(0) Death_Hacker; | 园豆:59 (初学一级) | 2012-06-02 18:06
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册