猿问

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

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文件就能找到了!我怀疑是数据库连接语句的问题,菜鸟求教……

凤凰求蛊
浏览 328回答 5
5回答

holdtom

SqlConnection是稀缺资源,用完立即要关闭,定义为static会带来问题。 通常的做法是放在using中,比如: using(SqlConnection conn = new SqlConnection(connString)) { conn.Open(); }

翻阅古今

你用什么测试软件的?

心有法竹

用的VS上自带的

长风秋雁

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

海绵宝宝撒

@dudu: 恩,我刚问过我老师,他说多个线程调用一个对象就会报错,谢谢你们啊
随时随地看视频慕课网APP
我要回答