首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C#操作数据库的模式那种好一点【DBHelper相关】

2012-08-10 
C#操作数据库的方式那种好一点【DBHelper相关】C# code//////////////////////////////////////////////////

C#操作数据库的方式那种好一点【DBHelper相关】

C# code
//////////////////////////////////////////////////第一种using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data;using System.Data.SqlClient;using Microsoft.Practices.EnterpriseLibrary.Data.Sql;namespace  DAL{    public class DBHelper    {        string strCon =  Model.ConnectionModel.ConnectionString1;          private SqlConnection connection;        public SqlConnection Connection        {            get            {                string connectionString = strCon;                if (connection == null)                {                    connection = new SqlConnection(connectionString);                    connection.Open();                }                else if (connection.State == System.Data.ConnectionState.Closed)                {                    connection.Open();                }                else if (connection.State == System.Data.ConnectionState.Broken)                {                    connection.Close();                    connection.Open();                }                return connection;            }        }               public int ExecuteCommand(string safeSql)        {            using (SqlCommand cmd = new SqlCommand(safeSql, Connection))            {                int result = cmd.ExecuteNonQuery();                return result;                           }        }        public int ExecuteCommand(string sql, params SqlParameter[] values)        {            using (SqlCommand cmd = new SqlCommand(sql, Connection))            {                cmd.CommandType = CommandType.StoredProcedure;                cmd.Parameters.AddRange(values);                return cmd.ExecuteNonQuery();            }        }               public int ExecuteCommand2(string sql, params SqlParameter[] values)        {            using (SqlCommand cmd = new SqlCommand(sql, Connection))            {                cmd.Parameters.AddRange(values);                return cmd.ExecuteNonQuery();            }        }        public string GetScalar(string safeSql)        {            using (SqlCommand cmd = new SqlCommand(safeSql, Connection))            {                string result = cmd.ExecuteScalar().ToString();                return result;            }        }        public string GetScalar(string sql, params SqlParameter[] values)        {            using (SqlCommand cmd = new SqlCommand(sql, Connection))            {                cmd.CommandType = CommandType.StoredProcedure;                cmd.Parameters.AddRange(values);                string result = cmd.ExecuteScalar().ToString();                return result;            }        }        public SqlDataReader GetReader(string safeSql)        {            using (SqlCommand cmd = new SqlCommand(safeSql, Connection))            {                SqlDataReader reader = cmd.ExecuteReader();                return reader;            }        }        public SqlDataReader GetReader(string sql, params SqlParameter[] values)        {            using (SqlCommand cmd = new SqlCommand(sql, Connection))            {                cmd.CommandType = CommandType.StoredProcedure;                cmd.Parameters.AddRange(values);                SqlDataReader reader = cmd.ExecuteReader();                return reader;            }        }        public DataTable GetDataSet(string safeSql)        {            using (SqlCommand cmd = new SqlCommand(safeSql, Connection))            {                DataSet ds = new DataSet();                SqlDataAdapter da = new SqlDataAdapter(cmd);                da.Fill(ds);                return ds.Tables[0];            }        }        public DataTable GetDataSet(string sql, params SqlParameter[] values)        {            using (SqlCommand cmd = new SqlCommand(sql, Connection))            {                DataSet ds = new DataSet();                cmd.CommandType = CommandType.StoredProcedure;                cmd.Parameters.AddRange(values);                SqlDataAdapter da = new SqlDataAdapter(cmd);                da.Fill(ds);                return ds.Tables[0];            }        }           }}//调用的方法:  public DataTable GetHours(string Dep, string BeginDate, string EndDate)        {            string strSql = "usp_GetHours";            SqlParameter[] sp = new SqlParameter[]             {                new SqlParameter("@Dep",Dep),                new SqlParameter("@BeginDate",BeginDate),                new SqlParameter("@EndDate",EndDate),            };            return base.GetDataSet(strSql, sp);        } 




C# code
//////////////////////////////////////////////////第二种 public SqlDatabase GetDB(){    SqlDatabase db = new SqlDatabase(strCon);    return db;}using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data;using System.Data.SqlClient;using System.Data.Common;using Microsoft.Practices.EnterpriseLibrary.Data.Sql;namespace DAL{    public class sys_UserGroupServices : DBHelper    {        /// <summary>        /// 创建一个系统用户组。        /// </summary>        /// <param name="GroupName">用户组名称</param>        /// <param name="MenuGroupID">菜单组别ID,暂时设置为空</param>        /// <param name="Remark">描述</param>        /// <returns></returns>        public bool CreateUserGroup(string GroupName, string MenuGroupID,string Remark)        {            SqlDatabase db = base.GetDB();            string strSql = "DBO.usp_sys_UserGroupADD ";                         db.AddInParameter(cmd, "GroupName", DbType.String, GroupName);            db.AddInParameter(cmd, "MenuGroupID", DbType.String, MenuGroupID);            db.AddInParameter(cmd, "Remark", DbType.String, Remark);            return db.ExecuteNonQuery(cmd) > 0 ? true : false;                    }           }}


这哪种方式好一点?主要考虑以下几个方面:

1.对服务器的资源消耗,这个是主要的。

2.每次连接服务器之后会有一个连接一直存在(除非应用程序关闭),到底是该连上之后立刻关闭,需要操作的时候再进行连

接,还是连上之后就一直存在一个连接,等到应用程序关闭的时候再断开。

[解决办法]
具体要看的做的是什么结构和具体的需求了。如果是b/s,那么通常情况下都是要连接完成,操作完数据后,马上释放数据库连接,而c/s结构却不一定,有时候为了重复的创建连接对象可能会把一个连接对象一直使用,知道程序推出为止
[解决办法]
如果只是简单应用 这样就可以了

如果事务或者其它复杂的应用 用using的确会好一些
[解决办法]
第一种好,第二种对服务器资源消耗比第一种大多了。(复杂的过程你看不到而已)

每次连接后应立刻关闭连接,千万别开着不关,那样不但浪费资源,还容易出现各种意想不到的问题。
虽然连接关闭,但是.NET有缓存处理的,你关闭连接不代表后台也会关闭,它会自动缓存连接并重利用,及时关闭连接有助于连接的重利用,同时可以将SQL的执行错误状态及时的清除(包括事务上的错误)。

热点排行