日期:2014-05-18  浏览次数:20914 次

C#如何连接数据库
我写的连接数据库的方法是这样的:
C# code

using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

namespace DAL
{
    public class CommonConn
    {
        private SqlConnection con;
        public CommonConn()
        {
            // 
            // TODO: 在此处添加构造函数逻辑 
            // 
        }

        #region 建立数据库连接
        public void OpenConn(string conn)
        {
            if (con == null)
            {
                con = new SqlConnection(conn);
                con.Open();
            }
        }
        #endregion

        #region 关闭连接
        public void CloseConn(string conn)
        {
            if (con != null)
            {
                con.Close();
            }
        }
        #endregion

        #region 释放连接
        public void DisposeConn()
        {
            if (con != null)
            {
                con.Dispose();
                con = null;
            }
        }
        #endregion

        #region 返回一个数据集
        public DataSet SqlDataSet(string conn, string Sql, string tableName)
        {
            OpenConn(conn);
            SqlDataAdapter da;
            DataSet ds = new DataSet();
            da = new SqlDataAdapter(Sql, con);
            da.Fill(ds, tableName);
            CloseConn(conn);
            return ds;
        }
        #endregion

        #region 执行一个SQL操作:添加、删除、更新操作
        public void SqlExcute(string conn, string sql)
        {
            OpenConn(conn);
            SqlCommand cmd;
            cmd = new SqlCommand(sql, con);
            cmd.ExecuteNonQuery();
            cmd.Dispose();
            CloseConn(conn);
        }
        #endregion

        #region 执行一个SQL操作:添加、删除、更新操作,返回受影响的行
        public int SqlExecuteNonQuery(string conn, string sql)
        {
            OpenConn(conn);
            SqlCommand cmd;
            cmd = new SqlCommand(sql, con);
            int flag = cmd.ExecuteNonQuery();
            CloseConn(conn);
            return flag;
        }
        #endregion

        #region 返回一个对象
        public object SqlExecuteScalar(string conn, string sql)
        {
            OpenConn(conn);
            SqlCommand cmd;
            cmd = new SqlCommand(sql, con);
            object obj = cmd.ExecuteScalar();
            cmd.Dispose();
            CloseConn(conn);
            return obj;
        }
        #endregion

        #region 返回DataTable
        public DataTable SqlDataTable(string conn, string sql)
        {
            OpenConn(conn);
            DataSet ds = new DataSet();
            SqlDataAdapter da = new SqlDataAdapter(sql, con);
            da.Fill(ds, "table");
            CloseConn(conn);
            return ds.Tables["table"];
        }
        #endregion

        #region 返回一个数据集的记录数
        public int SqlRecordCount(string conn, string sql)
        {
            //注:Sql 语句必须是一个统计查询 
            OpenConn(conn);
            SqlCommand cmd = new SqlCommand();
            cmd.CommandText = sql;
            cmd.Connection = con;
            SqlDataReader dr;
            dr = cmd.ExecuteReader();
            int RecordCount = -1;
            while (dr.Read())
            {
                RecordCount = int.Parse(dr[0].ToString());
            }
            CloseConn(conn);
            return RecordCount;
        }
        #endregion
    }
}



在数据库连接查询非常频繁的情况下(高访问量),这样写有什么问题吗,需不需要加上static,加上会有什么问题?
请给一些优化建议,谢谢



------解决方案--------------------
你的代码没有考虑异常的情况,数据库连接可能没有及时关闭。
还有每个操作的开头都是OpenConn(conn);
那么就多次打开连接了,这是不对的,至少应该在OpenConn方法内判断一下SqlConnection的状态吧,如果是Closed才打开连接。
------解决方案--------------------
用linq吧
------解决方案--------------------
探讨

用linq吧