码迷,mamicode.com
首页 > 数据库 > 详细

数据库访问层

时间:2016-03-07 08:59:36      阅读:247      评论:0      收藏:0      [点我收藏+]

标签:

简易型:

C# DBHelper Code 
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

namespace ADODoNETDemo
{
    /// <summary>
    /// 针对SQL Server数据库操作的通用类
    /// 作者:周公
    /// 日期:2009-01-08
    /// Version:1.0
    /// </summary>
    public class SqlDbHelper
    {
        private string connectionString;
        /// <summary>
        /// 设置数据库连接字符串
        /// </summary>
        public string ConnectionString
        {
            set { connectionString = value; }
        }
        /// <summary>
        /// 构造函数
        /// </summary>
        public SqlDbHelper()
            : this(ConfigurationManager.ConnectionStrings["Conn"].ConnectionString)
        {

        }
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="connectionString">数据库连接字符串</param>
        public SqlDbHelper(string connectionString)
        {
            this.connectionString = connectionString;
        }
        /// <summary>
        /// 执行一个查询,并返回结果集
        /// </summary>
        /// <param name="sql">要执行的查询SQL文本命令</param>
        /// <returns>返回查询结果集</returns>
        public DataTable ExecuteDataTable(string sql)
        {
            return ExecuteDataTable(sql, CommandType.Text, null);
        }
        /// <summary>
        /// 执行一个查询,并返回查询结果
        /// </summary>
        /// <param name="sql">要执行的SQL语句</param>
        /// <param name="commandType">要执行的查询语句的类型,如存储过程或者SQL文本命令</param>
        /// <returns>返回查询结果集</returns>
        public DataTable ExecuteDataTable(string sql, CommandType commandType)
        {
            return ExecuteDataTable(sql, commandType, null);
        }
        /// <summary>
        /// 执行一个查询,并返回查询结果
        /// </summary>
        /// <param name="sql">要执行的SQL语句</param>
        /// <param name="commandType">要执行的查询语句的类型,如存储过程或者SQL文本命令</param>
        /// <param name="parameters">Transact-SQL 语句或存储过程的参数数组</param>
        /// <returns></returns>
        public DataTable ExecuteDataTable(string sql, CommandType commandType, SqlParameter[] parameters)
        {
            DataTable data = new DataTable();//实例化DataTable,用于装载查询结果集
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                using (SqlCommand command = new SqlCommand(sql, connection))
                {
                    command.CommandType = commandType;//设置command的CommandType为指定的CommandType
                    //如果同时传入了参数,则添加这些参数
                    if (parameters != null)
                    {
                        foreach (SqlParameter parameter in parameters)
                        {
                            command.Parameters.Add(parameter);
                        }
                    }
                    //通过包含查询SQL的SqlCommand实例来实例化SqlDataAdapter
                    SqlDataAdapter adapter = new SqlDataAdapter(command);

                    adapter.Fill(data);//填充DataTable
                }
            }
            return data;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sql">要执行的查询SQL文本命令</param>
        /// <returns></returns>
        public SqlDataReader ExecuteReader(string sql)
        {
            return ExecuteReader(sql, CommandType.Text, null);
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sql">要执行的SQL语句</param>
        /// <param name="commandType">要执行的查询语句的类型,如存储过程或者SQL文本命令</param>
        /// <returns></returns>
        public SqlDataReader ExecuteReader(string sql, CommandType commandType)
        {
            return ExecuteReader(sql, commandType, null);
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sql">要执行的SQL语句</param>
        /// <param name="commandType">要执行的查询语句的类型,如存储过程或者SQL文本命令</param>
        /// <param name="parameters">Transact-SQL 语句或存储过程的参数数组</param>
        /// <returns></returns>
        public SqlDataReader ExecuteReader(string sql, CommandType commandType, SqlParameter[] parameters)
        {
            SqlConnection connection = new SqlConnection(connectionString);
            SqlCommand command = new SqlCommand(sql, connection);
            //如果同时传入了参数,则添加这些参数
            if (parameters != null)
            {
                foreach (SqlParameter parameter in parameters)
                {
                    command.Parameters.Add(parameter);
                }
            }
            connection.Open();
            //CommandBehavior.CloseConnection参数指示关闭Reader对象时关闭与其关联的Connection对象
            return command.ExecuteReader(CommandBehavior.CloseConnection);
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sql">要执行的查询SQL文本命令</param>
        /// <returns></returns>
        public Object ExecuteScalar(string sql)
        {
            return ExecuteScalar(sql, CommandType.Text, null);
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sql">要执行的SQL语句</param>
        /// <param name="commandType">要执行的查询语句的类型,如存储过程或者SQL文本命令</param>
        /// <returns></returns>
        public Object ExecuteScalar(string sql, CommandType commandType)
        {
            return ExecuteScalar(sql, commandType, null);
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sql">要执行的SQL语句</param>
        /// <param name="commandType">要执行的查询语句的类型,如存储过程或者SQL文本命令</param>
        /// <param name="parameters">Transact-SQL 语句或存储过程的参数数组</param>
        /// <returns></returns>
        public Object ExecuteScalar(string sql, CommandType commandType, SqlParameter[] parameters)
        {
            object result = null;
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                using (SqlCommand command = new SqlCommand(sql, connection))
                {
                    command.CommandType = commandType;//设置command的CommandType为指定的CommandType
                    //如果同时传入了参数,则添加这些参数
                    if (parameters != null)
                    {
                        foreach (SqlParameter parameter in parameters)
                        {
                            command.Parameters.Add(parameter);
                        }
                    }
                    connection.Open();//打开数据库连接
                    result = command.ExecuteScalar();
                }
            }
            return result;//返回查询结果的第一行第一列,忽略其它行和列
        }
        /// <summary>
        /// 对数据库执行增删改操作
        /// </summary>
        /// <param name="sql">要执行的查询SQL文本命令</param>
        /// <returns></returns>
        public int ExecuteNonQuery(string sql)
        {
            return ExecuteNonQuery(sql, CommandType.Text, null);
        }
        /// <summary>
        /// 对数据库执行增删改操作
        /// </summary>
        /// <param name="sql">要执行的SQL语句</param>
        /// <param name="commandType">要执行的查询语句的类型,如存储过程或者SQL文本命令</param>
        /// <returns></returns>
        public int ExecuteNonQuery(string sql, CommandType commandType)
        {
            return ExecuteNonQuery(sql, commandType, null);
        }
        /// <summary>
        /// 对数据库执行增删改操作
        /// </summary>
        /// <param name="sql">要执行的SQL语句</param>
        /// <param name="commandType">要执行的查询语句的类型,如存储过程或者SQL文本命令</param>
        /// <param name="parameters">Transact-SQL 语句或存储过程的参数数组</param>
        /// <returns></returns>
        public int ExecuteNonQuery(string sql, CommandType commandType, SqlParameter[] parameters)
        {
            int count = 0;
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                using (SqlCommand command = new SqlCommand(sql, connection))
                {
                    command.CommandType = commandType;//设置command的CommandType为指定的CommandType
                    //如果同时传入了参数,则添加这些参数
                    if (parameters != null)
                    {
                        foreach (SqlParameter parameter in parameters)
                        {
                            command.Parameters.Add(parameter);
                        }
                    }
                    connection.Open();//打开数据库连接
                    count = command.ExecuteNonQuery();
                }
            }
            return count;//返回执行增删改操作之后,数据库中受影响的行数
        }
        /// <summary>
        /// 返回当前连接的数据库中所有由用户创建的数据库
        /// </summary>
        /// <returns></returns>
        public DataTable GetTables()
        {
            DataTable data = null;
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                connection.Open();//打开数据库连接
                data = connection.GetSchema("Tables");
            }
            return data;
        }

    }
}

  复杂型:

C# DBUtility Code 
 using System;  
 using System.Collections;  
 using System.Collections.Specialized;  
 using System.Data;  
 using System.Data.SqlClient;  
 using System.Configuration;  
 using System.Data.Common;  
 using System.Collections.Generic;

using TL.DataAccess;

namespace TL.Business
{
     public enum EffentNextType  
     {  
         /// <summary>  
         /// 对其他语句无任何影响   
         /// </summary>  
         None,  
         /// <summary>  
         /// 当前语句必须为"SELECT COUNT(1) FROM .."格式,如果存在则继续执行,不存在回滚事务  
         /// </summary>  
         WhenHaveContine,  
         /// <summary>  
         /// 当前语句必须为"SELECT COUNT(1) FROM .."格式,如果不存在则继续执行,存在回滚事务  
         /// </summary>  
         WhenNoHaveContine,  
         /// <summary>  
         /// 当前语句影响到的行数必须大于0,否则回滚事务  
         /// </summary>  
         ExcuteEffectRows,  
         /// <summary>  
         /// 引发事件-当前语句必须为"SELECT COUNT(1) FROM .."格式,如果不存在则继续执行,存在回滚事务  
         /// </summary>  
         SolicitationEvent  
     }  
     public class DBUtility  
     {  
         public object ShareObject = null;  
         public object OriginalData = null;  
         event EventHandler _solicitationEvent;  
         public event EventHandler SolicitationEvent  
         {  
             add  
             {  
                 _solicitationEvent += value;  
             }  
             remove  
             {  
                 _solicitationEvent -= value;  
             }  
         }  
         public void OnSolicitationEvent()  
         {  
             if (_solicitationEvent != null)  
             {  
                 _solicitationEvent(this,new EventArgs());  
             }  
         }  
         public string CommandText;  
         public System.Data.Common.DbParameter[] Parameters;  
         public EffentNextType EffentNextType = EffentNextType.None;  
         public DBUtility()  
         {  
         }
         public DBUtility(SqlParameter[] para)
         {
             this.Parameters = para;
         }
         public DBUtility(string sqlText, SqlParameter[] para)  
         {  
             this.CommandText = sqlText;  
             this.Parameters = para;  
         }  
         public DBUtility(string sqlText, SqlParameter[] para, EffentNextType type)  
         {  
             this.CommandText = sqlText;  
             this.Parameters = para;  
             this.EffentNextType = type;  
         }  
     }
     /// <summary>  
     /// 数据访问抽象基础类  
     /// Copyright (C) 2004-2008 By LiTianPing   
     /// </summary>  
     public class SQLHelper
     {  
         //数据库连接字符串(web.config来配置),可以动态更改connectionString支持多数据库.       
         public string connectionString = "";
         public SQLHelper()
         {
             connectionString = @"DATA SOURCE=192.168.0.103,2433;UID=cdteam;PWD=cd-team2011_;DATABASE=TongLing";
         }  
         #region 公用方法  
         /// <summary>  
         /// 读取指定图片的二进制信息  
         /// </summary>  
         /// <param name="id"></param>  
         /// <returns></returns>  
         public object LoadImage(int id)  
         {  
             SqlConnection myConnection = new SqlConnection(connectionString);  
             SqlCommand myCommand = new SqlCommand("SELECT [bImage] FROM [tblCAIPIAO_NEWS_IMG] WHERE id=@id", myConnection);  
             myCommand.CommandType = CommandType.Text;  
             myCommand.Parameters.Add(new SqlParameter("@id", id));  
             myConnection.Open();  
             object result = myCommand.ExecuteScalar();  
             try  
             {  
                 return new System.IO.MemoryStream((byte[])result);  
             }  
             catch (ArgumentNullException e)  
             {  
                 return null;  
             }  
             finally  
             {  
                 myConnection.Close();  
             }  
         }  
         /// <summary>  
         /// 判断是否存在某表的某个字段  
         /// </summary>  
         /// <param name="tableName">表名称</param>  
         /// <param name="columnName">列名称</param>  
         /// <returns>是否存在</returns>  
         public bool ColumnExists(string tableName, string columnName)  
         {  
             string sql = "select count(1) from syscolumns where id=object_id(" + tableName + ") and name=" + columnName + "";  
             object res = GetSingle(sql);  
             if (res == null)  
             {  
                 return false;  
             }  
             return Convert.ToInt32(res) > 0;  
         }  
         public int GetMaxID(string FieldName, string TableName)  
         {  
             string strsql = "select max(" + FieldName + ")+1 from " + TableName;
             object obj = this.GetSingle(strsql);  
             if (obj == null)  
             {  
                 return 1;  
             }  
             else  
             {  
                 return int.Parse(obj.ToString());  
             }  
         }  
         public bool Exists(string strSql)  
         {
             object obj = this.GetSingle(strSql);  
             int cmdresult;  
             if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))  
             {  
                 cmdresult = 0;  
             }  
             else  
             {  
                 cmdresult = int.Parse(obj.ToString());  
             }  
             if (cmdresult == 0)  
             {  
                 return false;  
             }  
             else  
             {  
                 return true;  
             }  
         }  
         /// <summary>  
         /// 表是否存在  
         /// </summary>  
         /// <param name="TableName"></param>  
         /// <returns></returns>  
         public bool TabExists(string TableName)  
         {  
             string strsql = "select count(*) from sysobjects where id = object_id(N[" + TableName + "]) and OBJECTPROPERTY(id, N[IsUserTable]) = 1";  
             //string strsql = "SELECT count(*) FROM sys.objects WHERE object_id = OBJECT_ID(N"[dbo].[" + TableName + "]") AND type in (N"U")";  
             object obj = this.GetSingle(strsql);  
             int cmdresult;  
             if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))  
             {  
                 cmdresult = 0;  
             }  
             else  
             {  
                 cmdresult = int.Parse(obj.ToString());  
             }  
             if (cmdresult == 0)  
             {  
                 return false;  
             }  
             else  
             {  
                 return true;  
             }  
         }  
         public bool Exists(string strSql, params SqlParameter[] cmdParms)  
         {
             object obj = this.GetSingle(strSql, cmdParms);  
             int cmdresult;  
             if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))  
             {  
                 cmdresult = 0;  
             }  
             else  
             {  
                 cmdresult = int.Parse(obj.ToString());  
             }  
             if (cmdresult == 0)  
             {  
                 return false;  
             }  
             else  
             {  
                 return true;  
             }  
         }  
         #endregion  
         #region  执行简单SQL语句  
         /// <summary>  
         /// 执行SQL语句,返回影响的记录数  
         /// </summary>  
         /// <param name="SQLString">SQL语句</param>  
         /// <returns>影响的记录数</returns>  
         public int ExecuteSql(string SQLString)  
         {  
             using (SqlConnection connection = new SqlConnection(connectionString))  
             {  
                 using (SqlCommand cmd = new SqlCommand(SQLString, connection))  
                 {  
                     try  
                     {  
                         connection.Open();  
                         int rows = cmd.ExecuteNonQuery();  
                         return rows;  
                     }  
                     catch (System.Data.SqlClient.SqlException e)  
                     {  
                         connection.Close();  
                         throw e;  
                     }  
                 }  
             }  
         }  
         public int ExecuteSqlByTime(string SQLString, int Times)  
         {  
             using (SqlConnection connection = new SqlConnection(connectionString))  
             {  
                 using (SqlCommand cmd = new SqlCommand(SQLString, connection))  
                 {  
                     try  
                     {  
                         connection.Open();  
                         cmd.CommandTimeout = Times;  
                         int rows = cmd.ExecuteNonQuery();  
                         return rows;  
                     }  
                     catch (System.Data.SqlClient.SqlException e)  
                     {  
                         connection.Close();  
                         throw e;  
                     }  
                 }  
             }  
         }  
         /// <summary>  
         /// 执行Sql和Oracle滴混合事务  
         /// </summary>  
         /// <param name="list">SQL命令行列表</param>  
         /// <param name="oracleCmdSqlList">Oracle命令行列表</param>  
         /// <returns>执行结果 0-由于SQL造成事务失败 -1 由于Oracle造成事务失败 1-整体事务执行成功</returns>  
         public int ExecuteSqlTran(List<DBUtility> list, List<DBUtility> oracleCmdSqlList)  
         {  
             using (SqlConnection conn = new SqlConnection(connectionString))  
             {  
                 conn.Open();  
                 SqlCommand cmd = new SqlCommand();  
                 cmd.Connection = conn;  
                 SqlTransaction tx = conn.BeginTransaction();  
                 cmd.Transaction = tx;  
                 try  
                 {  
                     foreach (DBUtility myDE in list)  
                     {  
                         string cmdText = myDE.CommandText;  
                         SqlParameter[] cmdParms = (SqlParameter[])myDE.Parameters;  
                         PrepareCommand(cmd, conn, tx, cmdText, cmdParms);  
                         if (myDE.EffentNextType == EffentNextType.SolicitationEvent)  
                         {  
                             if (myDE.CommandText.ToLower().IndexOf("count(") == -1)  
                             {  
                                 tx.Rollback();  
                                 throw new Exception("违背要求" + myDE.CommandText + "必须符合select count(..的格式");  
                                 //return 0;  
                             }  
                             object obj = cmd.ExecuteScalar();  
                             bool isHave = false;  
                             if (obj == null && obj == DBNull.Value)  
                             {  
                                 isHave = false;  
                             }  
                             isHave = Convert.ToInt32(obj) > 0;  
                             if (isHave)  
                             {  
                                 //引发事件  
                                 myDE.OnSolicitationEvent();  
                             }  
                         }  
                         if (myDE.EffentNextType == EffentNextType.WhenHaveContine || myDE.EffentNextType == EffentNextType.WhenNoHaveContine)  
                         {  
                             if (myDE.CommandText.ToLower().IndexOf("count(") == -1)  
                             {  
                                 tx.Rollback();  
                                 throw new Exception("SQL:违背要求" + myDE.CommandText + "必须符合select count(..的格式");  
                                 //return 0;  
                             }  
                             object obj = cmd.ExecuteScalar();  
                             bool isHave = false;  
                             if (obj == null && obj == DBNull.Value)  
                             {  
                                 isHave = false;  
                             }  
                             isHave = Convert.ToInt32(obj) > 0;  
                             if (myDE.EffentNextType == EffentNextType.WhenHaveContine && !isHave)  
                             {  
                                 tx.Rollback();  
                                 throw new Exception("SQL:违背要求" + myDE.CommandText + "返回值必须大于0");  
                                 //return 0;  
                             }  
                             if (myDE.EffentNextType == EffentNextType.WhenNoHaveContine && isHave)  
                             {  
                                 tx.Rollback();  
                                 throw new Exception("SQL:违背要求" + myDE.CommandText + "返回值必须等于0");  
                                 //return 0;  
                             }  
                             continue;  
                         }  
                         int val = cmd.ExecuteNonQuery();  
                         if (myDE.EffentNextType == EffentNextType.ExcuteEffectRows && val == 0)  
                         {  
                             tx.Rollback();  
                             throw new Exception("SQL:违背要求" + myDE.CommandText + "必须有影响行");  
                             //return 0;  
                         }  
                         cmd.Parameters.Clear();  
                     }  
                     //string oraConnectionString = PubConstant.GetConnectionString("ConnectionStringPPC");  
                     //bool res = OracleHelper.ExecuteSqlTran(oraConnectionString, oracleCmdSqlList);  
                     //if (!res)  
                     //{  
                     //    tx.Rollback();  
                     //    throw new Exception("Oracle执行失败");  
                         // return -1;  
                     //}  
                     tx.Commit();  
                     return 1;  
                 }  
                 catch (System.Data.SqlClient.SqlException e)  
                 {  
                     tx.Rollback();  
                     throw e;  
                 }  
                 catch (Exception e)  
                 {  
                     tx.Rollback();  
                     throw e;  
                 }  
             }  
         }  
         /// <summary>  
         /// 执行多条SQL语句,实现数据库事务。  
         /// </summary>  
         /// <param name="SQLStringList">多条SQL语句</param>       
         public int ExecuteSqlTran(List<String> SQLStringList)  
         {  
             using (SqlConnection conn = new SqlConnection(connectionString))  
             {  
                 conn.Open();  
                 SqlCommand cmd = new SqlCommand();  
                 cmd.Connection = conn;  
                 SqlTransaction tx = conn.BeginTransaction();  
                 cmd.Transaction = tx;  
                 try  
                 {  
                     int count = 0;  
                     for (int n = 0; n < SQLStringList.Count; n++)  
                     {  
                         string strsql = SQLStringList[n];  
                         if (strsql.Trim().Length > 1)  
                         {  
                             cmd.CommandText = strsql;  
                             count += cmd.ExecuteNonQuery();  
                         }  
                     }  
                     tx.Commit();  
                     return count;  
                 }  
                 catch  
                 {  
                     tx.Rollback();  
                     return 0;  
                 }  
             }  
         }  
         /// <summary>  
         /// 执行带一个存储过程参数的的SQL语句。  
         /// </summary>  
         /// <param name="SQLString">SQL语句</param>  
         /// <param name="content">参数内容,比如一个字段是格式复杂的文章,有特殊符号,可以通过这个方式添加</param>  
         /// <returns>影响的记录数</returns>  
         public int ExecuteSql(string SQLString, string content)  
         {  
             using (SqlConnection connection = new SqlConnection(connectionString))  
             {  
                 SqlCommand cmd = new SqlCommand(SQLString, connection);  
                 System.Data.SqlClient.SqlParameter myParameter = new System.Data.SqlClient.SqlParameter("@content", SqlDbType.NText);  
                 myParameter.Value = content;  
                 cmd.Parameters.Add(myParameter);  
                 try  
                 {  
                     connection.Open();  
                     int rows = cmd.ExecuteNonQuery();  
                     return rows;  
                 }  
                 catch (System.Data.SqlClient.SqlException e)  
                 {  
                     throw e;  
                 }  
                 finally  
                 {  
                     cmd.Dispose();  
                     connection.Close();  
                 }  
             }  
         }  
         /// <summary>  
         /// 执行带一个存储过程参数的的SQL语句。  
         /// </summary>  
         /// <param name="SQLString">SQL语句</param>  
         /// <param name="content">参数内容,比如一个字段是格式复杂的文章,有特殊符号,可以通过这个方式添加</param>  
         /// <returns>影响的记录数</returns>  
         public object ExecuteSqlGet(string SQLString, string content)  
         {  
             using (SqlConnection connection = new SqlConnection(connectionString))  
             {  
                 SqlCommand cmd = new SqlCommand(SQLString, connection);  
                 System.Data.SqlClient.SqlParameter myParameter = new System.Data.SqlClient.SqlParameter("@content", SqlDbType.NText);  
                 myParameter.Value = content;  
                 cmd.Parameters.Add(myParameter);  
                 try  
                 {  
                     connection.Open();  
                     object obj = cmd.ExecuteScalar();  
                     if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))  
                     {  
                         return null;  
                     }  
                     else  
                     {  
                         return obj;  
                     }  
                 }  
                 catch (System.Data.SqlClient.SqlException e)  
                 {  
                     throw e;  
                 }  
                 finally  
                 {  
                     cmd.Dispose();  
                     connection.Close();  
                 }  
             }  
         }  
         /// <summary>  
         /// 向数据库里插入图像格式的字段(和上面情况类似的另一种实例)  
         /// </summary>  
         /// <param name="strSQL">SQL语句</param>  
         /// <param name="fs">图像字节,数据库的字段类型为image的情况</param>  
         /// <returns>影响的记录数</returns>  
         public int ExecuteSqlInsertImg(string strSQL, byte[] fs)  
         {  
             using (SqlConnection connection = new SqlConnection(connectionString))  
             {  
                 SqlCommand cmd = new SqlCommand(strSQL, connection);  
                 System.Data.SqlClient.SqlParameter myParameter = new System.Data.SqlClient.SqlParameter("@fs", SqlDbType.Image);  
                 myParameter.Value = fs;  
                 cmd.Parameters.Add(myParameter);  
                 try  
                 {  
                     connection.Open();  
                     int rows = cmd.ExecuteNonQuery();  
                     return rows;  
                 }  
                 catch (System.Data.SqlClient.SqlException e)  
                 {  
                     throw e;  
                 }  
                 finally  
                 {  
                     cmd.Dispose();  
                     connection.Close();  
                 }  
             }  
         }  
         /// <summary>  
         /// 执行一条计算查询结果语句,返回查询结果(object)。  
         /// </summary>  
         /// <param name="SQLString">计算查询结果语句</param>  
         /// <returns>查询结果(object)</returns>  
         public object GetSingle(string SQLString)  
         {  
             using (SqlConnection connection = new SqlConnection(connectionString))  
             {  
                 using (SqlCommand cmd = new SqlCommand(SQLString, connection))  
                 {  
                     try  
                     {  
                         connection.Open();  
                         object obj = cmd.ExecuteScalar();  
                         if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))  
                         {  
                             return null;  
                         }  
                         else  
                         {  
                             return obj;  
                         }  
                     }  
                     catch (System.Data.SqlClient.SqlException e)  
                     {  
                         connection.Close();  
                         throw e;  
                     }  
                 }  
             }  
         }  
         public object GetSingle(string SQLString, int Times)  
         {  
             using (SqlConnection connection = new SqlConnection(connectionString))  
             {  
                 using (SqlCommand cmd = new SqlCommand(SQLString, connection))  
                 {  
                     try  
                     {  
                         connection.Open();  
                         cmd.CommandTimeout = Times;  
                         object obj = cmd.ExecuteScalar();  
                         if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))  
                         {  
                             return null;  
                         }  
                         else  
                         {  
                             return obj;  
                         }  
                     }  
                     catch (System.Data.SqlClient.SqlException e)  
                     {  
                         connection.Close();  
                         throw e;  
                     }  
                 }  
             }  
         }  
         /// <summary>  
         /// 执行查询语句,返回SqlDataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Close )  
         /// </summary>  
         /// <param name="strSQL">查询语句</param>  
         /// <returns>SqlDataReader</returns>  
         public SqlDataReader ExecuteReader(string strSQL)  
         {  
             SqlConnection connection = new SqlConnection(connectionString);  
             SqlCommand cmd = new SqlCommand(strSQL, connection);  
             try  
             {  
                 connection.Open();  
                 SqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);  
                 return myReader;  
             }  
             catch (System.Data.SqlClient.SqlException e)  
             {  
                 throw e;  
             }  
         }  
         /// <summary>  
         /// 执行查询语句,返回DataSet  
         /// </summary>  
         /// <param name="SQLString">查询语句</param>  
         /// <returns>DataSet</returns>  
         public DataSet Query(string SQLString)  
         {  
             using (SqlConnection connection = new SqlConnection(connectionString))  
             {  
                 DataSet ds = new DataSet();  
                 try  
                 {  
                     connection.Open();  
                     SqlDataAdapter command = new SqlDataAdapter(SQLString, connection);  
                     command.Fill(ds, "ds");  
                 }  
                 catch (System.Data.SqlClient.SqlException ex)  
                 {  
                     throw new Exception(ex.Message);  
                 }  
                 return ds;  
             }  
         }  
         /// <summary>  
         /// 查询并得到数据集DataSet  
         /// </summary>  
         /// <param name="SQLString"></param>  
         /// <param name="Times"></param>  
         /// <returns></returns>  
         public DataSet Query(string SQLString, int Times)  
         {  
             using (SqlConnection connection = new SqlConnection(connectionString))  
             {  
                 DataSet ds = new DataSet();  
                 try  
                 {  
                     connection.Open();  
                     SqlDataAdapter command = new SqlDataAdapter(SQLString, connection);  
                     command.SelectCommand.CommandTimeout = Times;  
                     command.Fill(ds, "ds");  
                 }  
                 catch (System.Data.SqlClient.SqlException ex)  
                 {  
                     throw new Exception(ex.Message);  
                 }  
                 return ds;  
             }  
         }  
         #endregion  
         #region 执行带参数的SQL语句  
         /// <summary>  
         /// 执行SQL语句,返回影响的记录数  
         /// </summary>  
         /// <param name="SQLString">SQL语句</param>  
         /// <returns>影响的记录数</returns>  
         public int ExecuteSql(string SQLString, params SqlParameter[] cmdParms)  
         {  
             using (SqlConnection connection = new SqlConnection(connectionString))  
             {  
                 using (SqlCommand cmd = new SqlCommand())  
                 {  
                     try  
                     {  
                         PrepareCommand(cmd, connection, null, SQLString, cmdParms);  
                         int rows = cmd.ExecuteNonQuery();  
                         cmd.Parameters.Clear();  
                         return rows;  
                     }  
                     catch (System.Data.SqlClient.SqlException e)  
                     {  
                         throw e;  
                     }  
                 }  
             }  
         }  
         /// <summary>  
         /// 执行多条SQL语句,实现数据库事务。  
         /// </summary>  
         /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param>  
         public void ExecuteSqlTran(Hashtable SQLStringList)  
         {  
             using (SqlConnection conn = new SqlConnection(connectionString))  
             {  
                 conn.Open();  
                 using (SqlTransaction trans = conn.BeginTransaction())  
                 {  
                     SqlCommand cmd = new SqlCommand();  
                     try  
                     {  
                         //循环  
                         foreach (DictionaryEntry myDE in SQLStringList)  
                         {  
                             string cmdText = myDE.Key.ToString();  
                             SqlParameter[] cmdParms = (SqlParameter[])myDE.Value;  
                             PrepareCommand(cmd, conn, trans, cmdText, cmdParms);  
                             int val = cmd.ExecuteNonQuery();  
                             cmd.Parameters.Clear();  
                         }  
                         trans.Commit();  
                     }  
                     catch  
                     {  
                         trans.Rollback();  
                         throw;  
                     }  
                 }  
             }  
         }  
         /// <summary>  
         /// 执行多条SQL语句,实现数据库事务。  
         /// </summary>  
         /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param>  
         public int ExecuteSqlTran(System.Collections.Generic.List<DBUtility> cmdList)  
         {  
             using (SqlConnection conn = new SqlConnection(connectionString))  
             {  
                 conn.Open();  
                 using (SqlTransaction trans = conn.BeginTransaction())  
                 {  
                     SqlCommand cmd = new SqlCommand();  
                     try  
                     {  
                         int count = 0;  
                         //循环  
                         foreach (DBUtility myDE in cmdList)  
                         {  
                             string cmdText = myDE.CommandText;  
                             SqlParameter[] cmdParms = (SqlParameter[])myDE.Parameters;  
                             PrepareCommand(cmd, conn, trans, cmdText, cmdParms);  
                             if (myDE.EffentNextType == EffentNextType.WhenHaveContine || myDE.EffentNextType == EffentNextType.WhenNoHaveContine)  
                             {  
                                 if (myDE.CommandText.ToLower().IndexOf("count(") == -1)  
                                 {  
                                     trans.Rollback();  
                                     return 0;  
                                 }  
                                 object obj = cmd.ExecuteScalar();  
                                 bool isHave = false;  
                                 if (obj == null && obj == DBNull.Value)  
                                 {  
                                     isHave = false;  
                                 }  
                                 isHave = Convert.ToInt32(obj) > 0;  
                                 if (myDE.EffentNextType == EffentNextType.WhenHaveContine && !isHave)  
                                 {  
                                     trans.Rollback();  
                                     return 0;  
                                 }  
                                 if (myDE.EffentNextType == EffentNextType.WhenNoHaveContine && isHave)  
                                 {  
                                     trans.Rollback();  
                                     return 0;  
                                 }  
                                 continue;  
                             }  
                             int val = cmd.ExecuteNonQuery();  
                             count += val;  
                             if (myDE.EffentNextType == EffentNextType.ExcuteEffectRows && val == 0)  
                             {  
                                 trans.Rollback();  
                                 return 0;  
                             }  
                             cmd.Parameters.Clear();  
                         }  
                         trans.Commit();  
                         return count;  
                     }  
                     catch  
                     {  
                         trans.Rollback();  
                         throw;  
                     }  
                 }  
             }  
         }  
         /// <summary>  
         /// 执行多条SQL语句,实现数据库事务。  
         /// </summary>  
         /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param>  
         public void ExecuteSqlTranWithIndentity(System.Collections.Generic.List<DBUtility> SQLStringList)  
         {  
             using (SqlConnection conn = new SqlConnection(connectionString))  
             {  
                 conn.Open();  
                 using (SqlTransaction trans = conn.BeginTransaction())  
                 {  
                     SqlCommand cmd = new SqlCommand();  
                     try  
                     {  
                         int indentity = 0;  
                         //循环  
                         foreach (DBUtility myDE in SQLStringList)  
                         {  
                             string cmdText = myDE.CommandText;  
                             SqlParameter[] cmdParms = (SqlParameter[])myDE.Parameters;  
                             foreach (SqlParameter q in cmdParms)  
                             {  
                                 if (q.Direction == ParameterDirection.InputOutput)  
                                 {  
                                     q.Value = indentity;  
                                 }  
                             }  
                             PrepareCommand(cmd, conn, trans, cmdText, cmdParms);  
                             int val = cmd.ExecuteNonQuery();  
                             foreach (SqlParameter q in cmdParms)  
                             {  
                                 if (q.Direction == ParameterDirection.Output)  
                                 {  
                                     indentity = Convert.ToInt32(q.Value);  
                                 }  
                             }  
                             cmd.Parameters.Clear();  
                         }  
                         trans.Commit();  
                     }  
                     catch  
                     {  
                         trans.Rollback();  
                         throw;  
                     }  
                 }  
             }  
         }  
         /// <summary>  
         /// 执行多条SQL语句,实现数据库事务。  
         /// </summary>  
         /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param>  
         public void ExecuteSqlTranWithIndentity(Hashtable SQLStringList)  
         {  
             using (SqlConnection conn = new SqlConnection(connectionString))  
             {  
                 conn.Open();  
                 using (SqlTransaction trans = conn.BeginTransaction())  
                 {  
                     SqlCommand cmd = new SqlCommand();  
                     try  
                     {  
                         int indentity = 0;  
                         //循环  
                         foreach (DictionaryEntry myDE in SQLStringList)  
                         {  
                             string cmdText = myDE.Key.ToString();  
                             SqlParameter[] cmdParms = (SqlParameter[])myDE.Value;  
                             foreach (SqlParameter q in cmdParms)  
                             {  
                                 if (q.Direction == ParameterDirection.InputOutput)  
                                 {  
                                     q.Value = indentity;  
                                 }  
                             }  
                             PrepareCommand(cmd, conn, trans, cmdText, cmdParms);  
                             int val = cmd.ExecuteNonQuery();  
                             foreach (SqlParameter q in cmdParms)  
                             {  
                                 if (q.Direction == ParameterDirection.Output)  
                                 {  
                                     indentity = Convert.ToInt32(q.Value);  
                                 }  
                             }  
                             cmd.Parameters.Clear();  
                         }  
                         trans.Commit();  
                     }  
                     catch  
                     {  
                         trans.Rollback();  
                         throw;  
                     }  
                 }  
             }  
         }  
         /// <summary>  
         /// 执行一条计算查询结果语句,返回查询结果(object)。  
         /// </summary>  
         /// <param name="SQLString">计算查询结果语句</param>  
         /// <returns>查询结果(object)</returns>  
         public object GetSingle(string SQLString, params SqlParameter[] cmdParms)  
         {  
             using (SqlConnection connection = new SqlConnection(connectionString))  
             {  
                 using (SqlCommand cmd = new SqlCommand())  
                 {  
                     try  
                     {  
                         PrepareCommand(cmd, connection, null, SQLString, cmdParms);  
                         object obj = cmd.ExecuteScalar();  
                         cmd.Parameters.Clear();  
                         if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))  
                         {  
                             return null;  
                         }  
                         else  
                         {  
                             return obj;  
                         }  
                     }  
                     catch (System.Data.SqlClient.SqlException e)  
                     {  
                         throw e;  
                     }  
                 }  
             }  
         }  
         /// <summary>  
         /// 执行查询语句,返回SqlDataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Close )  
         /// </summary>  
         /// <param name="strSQL">查询语句</param>  
         /// <returns>SqlDataReader</returns>  
         public SqlDataReader ExecuteReader(string SQLString, params SqlParameter[] cmdParms)  
         {  
             SqlConnection connection = new SqlConnection(connectionString);  
             SqlCommand cmd = new SqlCommand();  
             try  
             {  
                 PrepareCommand(cmd, connection, null, SQLString, cmdParms);  
                 SqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);  
                 cmd.Parameters.Clear();  
                 return myReader;  
             }  
             catch (System.Data.SqlClient.SqlException e)  
             {  
                 throw e;  
             }  
             //          finally  
             //          {  
             //              cmd.Dispose();  
             //              connection.Close();  
             //          }     
         }  
         /// <summary>  
         /// 执行查询语句,返回DataSet  
         /// </summary>  
         /// <param name="SQLString">查询语句</param>  
         /// <returns>DataSet</returns>  
         public DataSet Query(string SQLString, params SqlParameter[] cmdParms)  
         {  
             using (SqlConnection connection = new SqlConnection(connectionString))  
             {  
                 SqlCommand cmd = new SqlCommand();  
                 PrepareCommand(cmd, connection, null, SQLString, cmdParms);  
                 using (SqlDataAdapter da = new SqlDataAdapter(cmd))  
                 {  
                     DataSet ds = new DataSet();  
                     try  
                     {  
                         da.Fill(ds, "ds");  
                         cmd.Parameters.Clear();  
                     }  
                     catch (System.Data.SqlClient.SqlException ex)  
                     {  
                         throw new Exception(ex.Message);  
                     }  
                     return ds;  
                 }  
             }  
         }  
         private void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, string cmdText, SqlParameter[] cmdParms)  
         {  
             if (conn.State != ConnectionState.Open)  
                 conn.Open();  
             cmd.Connection = conn;  
             cmd.CommandText = cmdText;  
             if (trans != null)  
                 cmd.Transaction = trans;  
             cmd.CommandType = CommandType.Text;//cmdType;  
             if (cmdParms != null)  
             {  
                 foreach (SqlParameter parameter in cmdParms)  
                 {  
                     if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&  
                         (parameter.Value == null))  
                     {  
                         parameter.Value = DBNull.Value;  
                     }  
                     cmd.Parameters.Add(parameter);  
                 }  
             }  
         }  
         #endregion  
         #region 存储过程操作  
         /// <summary>  
         /// 执行存储过程,返回SqlDataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Close )  
         /// </summary>  
         /// <param name="storedProcName">存储过程名</param>  
         /// <param name="parameters">存储过程参数</param>  
         /// <returns>SqlDataReader</returns>  
         public SqlDataReader RunProcedure(string storedProcName, IDataParameter[] parameters)  
         {  
             SqlConnection connection = new SqlConnection(connectionString);  
             SqlDataReader returnReader;  
             connection.Open();  
             SqlCommand command = BuildQueryCommand(connection, storedProcName, parameters);  
             command.CommandType = CommandType.StoredProcedure;  
             returnReader = command.ExecuteReader(CommandBehavior.CloseConnection);  
             return returnReader;  
         }  
         /// <summary>  
         /// 执行存储过程  
         /// </summary>  
         /// <param name="storedProcName">存储过程名</param>  
         /// <param name="parameters">存储过程参数</param>  
         /// <param name="tableName">DataSet结果中的表名</param>  
         /// <returns>DataSet</returns>  
         public DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName)  
         {  
             using (SqlConnection connection = new SqlConnection(connectionString))  
             {  
                 DataSet dataSet = new DataSet();  
                 connection.Open();  
                 SqlDataAdapter sqlDA = new SqlDataAdapter();  
                 sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);  
                 sqlDA.Fill(dataSet, tableName);  
                 connection.Close();  
                 return dataSet;  
             }  
         }

         public DataSet RunProcedure2(string storedProcName, string tableName)
         {
             using (SqlConnection connection = new SqlConnection(connectionString))
             {
                 DataSet dataSet = new DataSet();
                 connection.Open();
                 SqlDataAdapter sqlDA = new SqlDataAdapter();
                 sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName);
                 sqlDA.Fill(dataSet, tableName);
                 connection.Close();
                 return dataSet;
             }
         }
         public DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName, int Times)  
         {  
             using (SqlConnection connection = new SqlConnection(connectionString))  
             {  
                 DataSet dataSet = new DataSet();  
                 connection.Open();  
                 SqlDataAdapter sqlDA = new SqlDataAdapter();  
                 sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);  
                 sqlDA.SelectCommand.CommandTimeout = Times;  
                 sqlDA.Fill(dataSet, tableName);  
                 connection.Close();  
                 return dataSet;  
             }  
         }  
         /// <summary>  
         /// 构建 SqlCommand 对象(用来返回一个结果集,而不是一个整数值)  
         /// </summary>  
         /// <param name="connection">数据库连接</param>  
         /// <param name="storedProcName">存储过程名</param>  
         /// <param name="parameters">存储过程参数</param>  
         /// <returns>SqlCommand</returns>  
         private SqlCommand BuildQueryCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters)  
         {  
             SqlCommand command = new SqlCommand(storedProcName, connection);  
             command.CommandType = CommandType.StoredProcedure;  
             foreach (SqlParameter parameter in parameters)  
             {  
                 if (parameter != null)  
                 {  
                     // 检查未分配值的输出参数,将其分配以DBNull.Value.  
                     if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&  
                         (parameter.Value == null))  
                     {  
                         parameter.Value = DBNull.Value;  
                     }  
                     command.Parameters.Add(parameter);  
                 }  
             }  
             return command;  
         }
         private SqlCommand BuildQueryCommand(SqlConnection connection, string storedProcName)
         {
             SqlCommand command = new SqlCommand(storedProcName, connection);
             command.CommandType = CommandType.StoredProcedure; 
             return command;
         }
         /// <summary>  
         /// 执行存储过程,返回影响的行数        
         /// </summary>  
         /// <param name="storedProcName">存储过程名</param>  
         /// <param name="parameters">存储过程参数</param>  
         /// <param name="rowsAffected">影响的行数</param>  
         /// <returns></returns>  
         public int RunProcedure(string storedProcName, IDataParameter[] parameters, out int rowsAffected)  
         {  
             using (SqlConnection connection = new SqlConnection(connectionString))  
             {  
                 int result;  
                 connection.Open();  
                 SqlCommand command = BuildIntCommand(connection, storedProcName, parameters);  
                 rowsAffected = command.ExecuteNonQuery();  
                 result = (int)command.Parameters["ReturnValue"].Value;  
                 //Connection.Close();  
                 return result;  
             }  
         }
         public int RunProcedure1(string storedProcName, IDataParameter[] parameters)
         {
             //connectionString = @"DATA SOURCE=192.168.0.103,2433;UID=cdteam;PWD=cd-team2011_;DATABASE=ShiNianCMS";
             using (SqlConnection connection = new SqlConnection(connectionString))
             {
                 int result;
                 connection.Open();
                 SqlCommand command = BuildIntCommand(connection, storedProcName, parameters);
                 command.ExecuteNonQuery();
                 result = (int)command.Parameters["ReturnValue"].Value;
                 //Connection.Close();  
                 return result;
             }
         }
         public int RunProcedure3(string storedProcName)
         {
             //connectionString = @"DATA SOURCE=192.168.0.103,2433;UID=cdteam;PWD=cd-team2011_;DATABASE=ShiNianCMS";
             using (SqlConnection connection = new SqlConnection(connectionString))
             {
                 int result;
                 connection.Open();
                 SqlCommand command = BuildQueryCommand(connection, storedProcName);
                 command.ExecuteNonQuery();
                 result = (int)command.Parameters["ReturnValue"].Value;
                 //Connection.Close();  
                 return result;
             }
         }
         /// <summary>  
         /// 创建 SqlCommand 对象实例(用来返回一个整数值)     
         /// </summary>  
         /// <param name="storedProcName">存储过程名</param>  
         /// <param name="parameters">存储过程参数</param>  
         /// <returns>SqlCommand 对象实例</returns>  
         private SqlCommand BuildIntCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters)  
         {  
             SqlCommand command = BuildQueryCommand(connection, storedProcName, parameters);  
             command.Parameters.Add(new SqlParameter("ReturnValue",  
                 SqlDbType.Int, 4, ParameterDirection.ReturnValue,  
                 false, 0, 0, string.Empty, DataRowVersion.Default, null));  
             return command;  
         }  
         #endregion  
     }  
}

  

数据库访问层

标签:

原文地址:http://www.cnblogs.com/shouce/p/5249331.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!