首页 > 代码库 > C#连接层的数据访问类(简单版)

C#连接层的数据访问类(简单版)

目前只写了与SqlServer的数据处理。

首先是静态工厂类。

using System;using System.Configuration;namespace XPSoft.BaseLibrary.DataAccess{    /// <summary>    /// 数据访问对象的静态工厂类,用于创建不同类型的数据访问对象。    /// </summary>    public static class DataAccessFactory    {        /// <summary>        /// 通过数据访问类型去实例化一个数据访问对象。        /// </summary>        /// <param name="dataAccessType">数据访问类型枚举。</param>        /// <returns>数据访问对象。</returns>        public static IDataAccess InstanceDataAccess(DataAccessType dataAccessType)        {            //  声明一个数据访问对象,根据枚举参数选择实例化哪种类型。            IDataAccess dataAccess = null;            string provideName = ConfigurationManager.ConnectionStrings["SqlServer"].ProviderName;            string connectionString = ConfigurationManager.ConnectionStrings["SqlServer"].ConnectionString;            switch (dataAccessType)            {                 //  创建SqlServer数据访问类。                case DataAccessType.SqlServer:                    dataAccess = new SqlServerDataAccess(ConfigurationManager.ConnectionStrings["SqlServer"].ToString());                    break;            }            if (dataAccess == null) { throw new ArgumentNullException("通过传入的枚举值,未能找到合适的数据访问类。"); }            return dataAccess;        }    }}

接下来定义了一个数据类型枚举。

using System;namespace XPSoft.BaseLibrary.DataAccess{    /// <summary>    /// 数据访问类型枚举。    /// </summary>    public enum DataAccessType : byte    {        Oracle = 0,     //  Oracle数据库。        SqlServer = 1,  //  SqlServer数据库。        MySql = 2,      //  MySql数据库。        Oledb = 3       //  其他数据库。    }}

接着是数据访问对象的接口。

using System;using System.Collections.Generic;using System.Data;using System.Data.Common;using System.Xml;namespace XPSoft.BaseLibrary.DataAccess{    public interface IDataAccess    {        /// <summary>        /// 执行不返回数据集的Sql操作。        /// </summary>        /// <param name="commandText">要执行的Sql语句。</param>        /// <returns>受影响的行数。</returns>        int ExecuteNonQuery(string commandText);        /// <summary>        /// 执行不返回数据集的Sql操作。        /// </summary>        /// <param name="command">要执行的数据库命令对象。</param>        /// <returns>受影响的行数。</returns>        int ExecuteNonQuery(DbCommand command);        /// <summary>        /// 执行不返回数据集的Sql操作。        /// </summary>        /// <param name="commandTexts">要执行的Sql语句集合。</param>        /// <returns>受影响的行数。</returns>        int ExecuteNonQuery(IList<string> commandTexts);        /// <summary>        /// 执行不返回数据集的Sql操作。        /// </summary>        /// <param name="commands">要执行的DbCommand接口集合。</param>        /// <returns>受影响的行数。</returns>        int ExecuteNonQuery(IList<DbCommand> commands);        /// <summary>        /// 执行不返回数据集的存储过程。        /// </summary>        /// <param name="storedProcedureName">要执行的存储过程名称。</param>        /// <returns>受影响的行数。</returns>        int ExecuteNonQueryByStoredProcedure(string storedProcedureName);        /// <summary>        /// 执行不返回数据集的存储过程。        /// </summary>        /// <param name="storedProcedureName">要执行的存储过程名称。</param>        /// <param name="parameters">存储过程的参数。</param>        /// <returns>受影响的行数。</returns>        int ExecuteNonQueryByStoredProcedure(string storedProcedureName, params DbParameter[] parameters);        /// <summary>        /// 执行Sql操作,返回数据集的第一行第一列。        /// </summary>        /// <param name="commandText">要执行的Sql语句。</param>        /// <returns>数据集的第一行第一列。</returns>        object ExecuteScalar(string commandText);        /// <summary>        /// 执行Sql操作,返回数据集的第一行第一列。        /// </summary>        /// <param name="command">要执行的数据库命令对象。</param>        /// <returns>数据集的第一行第一列。</returns>        object ExecuteScalar(DbCommand command);        /// <summary>        /// 执行存储过程,返回数据集的第一行第一列。        /// </summary>        /// <param name="storedProcedureName">要执行的存储过程名称。</param>        /// <returns>数据集的第一行第一列。</returns>        object ExecuteScalarByStoredProcedure(string storedProcedureName);        /// <summary>        /// 执行存储过程,返回数据集的第一行第一列。        /// </summary>        /// <param name="storedProcedureName">要执行的存储过程名称。</param>        /// <param name="parameters">存储过程的参数。</param>        /// <returns>数据集的第一行第一列。</returns>        object ExecuteScalarByStoredProcedure(string storedProcedureName, params DbParameter[] parameters);        /// <summary>        /// 执行Sql操作,返回DataSet数据集。        /// </summary>        /// <param name="commandText">要执行的Sql语句。</param>        /// <returns>DataSet数据集。</returns>        DataSet ExecuteDataSet(string commandText);        /// <summary>        /// 执行Sql语句,返回DataSet数据集。        /// </summary>        /// <param name="command">要执行的数据库命令对象。</param>        /// <returns>DataSet数据集。</returns>        DataSet ExecuteDataSet(DbCommand command);        /// <summary>        /// 执行Sql语句,返回DataSet数据集。        /// </summary>        /// <param name="commandTexts">要执行的Sql语句集合。</param>        /// <param name="tableNames">DataSet数据集中Table的名称集合。</param>        /// <returns>DataSet数据集。</returns>        DataSet ExecuteDataSet(IList<string> commandTexts, IList<string> tableNames);        /// <summary>        /// 执行Sql语句,返回DataSet数据集。        /// </summary>        /// <param name="commandTexts">要执行的DbCommand接口集合。</param>        /// <param name="tableNames">DataSet数据集中Table的名称集合。</param>        /// <returns>DataSet数据集。</returns>        DataSet ExecuteDataSet(IList<DbCommand> commands, IList<string> tableNames);        /// <summary>        /// 执行存储过程,返回DataSet数据集。        /// </summary>        /// <param name="storedProcedureName">要执行的存储过程名称。</param>        /// <returns>DataSet数据集。</returns>        DataSet ExecuteDataSetByStoredProcedure(string storedProcedureName);        /// <summary>        /// 执行存储过程,返回DataSet数据集。        /// </summary>        /// <param name="storedProcedureName">要执行的存储过程名称。</param>        /// <param name="parameters">存储过程的参数。</param>        /// <returns>DataSet数据集。</returns>        DataSet ExecuteDataSetByStoredProcedure(string storedProcedureName, params DbParameter[] parameters);        /// <summary>        /// 执行Sql语句,返回XmlDocument对象。        /// </summary>        /// <param name="commandText">要执行的Sql语句。</param>        /// <returns>XmlDocument对象。</returns>        XmlDocument ExecuteDataXml(string commandText);        /// <summary>        /// 执行Sql操作,返回XmlDocument对象。        /// </summary>        /// <param name="command">要执行的数据库命令对象。</param>        /// <returns>XmlDocument对象。</returns>        XmlDocument ExecuteDataXml(DbCommand command);        /// <summary>        /// 执行Sql操作,返回XmlDocument对象。        /// </summary>        /// <param name="commandTexts">要执行的Sql语句集合。</param>        /// <param name="tableNames">XmlDocument对象中Element属性的名称集合。</param>        /// <returns>XmlDocument对象。</returns>        XmlDocument ExecuteDataXml(IList<string> commandTexts, IList<string> tableNames);        /// <summary>        /// 执行存储过程,返回XmlDocument对象。        /// </summary>        /// <param name="storedProcedureName">要执行的存储过程名称。</param>        /// <returns>XmlDocument对象。</returns>        XmlDocument ExecuteDataXmlByStoredProcedure(string storedProcedureName);        /// <summary>        /// 执行存储过程,返回XmlDocument对象。        /// </summary>        /// <param name="storedProcedureName">要执行的存储过程名称。</param>        /// <param name="parameters">存储过程的参数。</param>        /// <returns>XmlDocument对象。</returns>        XmlDocument ExecuteDataXmlByStoredProcedure(string storedProcedureName, params DbParameter[] parameters);    }}

最后就是实现类,目前只做了SqlServer的。

using System;using System.Collections.Generic;using System.Data;using System.Data.Common;using System.Data.SqlClient;using System.Xml;namespace XPSoft.BaseLibrary.DataAccess{    public class SqlServerDataAccess : IDataAccess    {        //  数据库连接对象。        private static SqlConnection connection = null;        /// <summary>        /// 构造函数。        /// </summary>        public SqlServerDataAccess() { }        /// <summary>        /// 构造函数。        /// </summary>        /// <param name="connectionString">数据库连接字符串。</param>        public SqlServerDataAccess(string connectionString)         {            if (connection == null) {                 //  通过字符串实例化SqlConnection对象。                connection = new SqlConnection(connectionString);            }        }        #region 私有方法        /// <summary>        /// 打开数据库连接对象。        /// </summary>        /// <exception cref="SqlException、InvalidOperationException"></exception>        private void OpenConnection()        {            //  如果数据连接为关闭状态,那么将打开连接。            //  否则将抛出异常。            if (connection.State == ConnectionState.Closed)            {                try { connection.Open(); }                catch (SqlException sqlEx) { throw sqlEx; }                catch (InvalidOperationException iopEx) { throw iopEx; }            }        }        /// <summary>        /// 关闭数据库连接对象。        /// </summary>        /// <exception cref="SqlException"></exception>        private void CloseConnection()        {            //  如果数据连接不为关闭状态,那么将关闭连接。            //  否则将抛出异常。            if (connection.State != ConnectionState.Closed)            {                try { connection.Close(); }                catch (SqlException sqlEx) { throw sqlEx; }            }        }        /// <summary>        /// 将DataSet中的列映射成XML特性。        /// </summary>        /// <param name="ds">DataSet对象。</param>        private XmlDocument ConvertDataSetToXmlDocument(DataSet ds)        {            foreach (DataTable dt in ds.Tables)            {                foreach (DataColumn dc in dt.Columns)                {                    dc.ColumnMapping = MappingType.Attribute;                }            }            XmlDocument xmlDom = new XmlDocument();            xmlDom.LoadXml(ds.GetXml());            return xmlDom;        }        #endregion        /// <summary>        /// 执行不返回数据集的Sql操作。        /// </summary>        /// <param name="commandText">要执行的Sql语句。</param>        /// <exception cref="ArgumentException、SqlException、InvalidOperationException"></exception>        /// <returns>受影响的行数。</returns>        public int ExecuteNonQuery(string commandText)         {            //  如果要执行的Sql语句为空,将抛出ArgumentException异常。            if (string.IsNullOrWhiteSpace(commandText))             { throw new ArgumentException("要执行的Sql语句不能为空。"); }            try            {                //  实例化一个SqlCommand对象,并指定要执行的Sql语句。                using (DbCommand command = new SqlCommand(commandText, connection))                {                    //  打开数据库连接对象。                    this.OpenConnection();                    //  执行操作并返回受影响的行数。                    int count = command.ExecuteNonQuery();                    return count;                }            }            catch (SqlException sqlEx) { throw sqlEx; }            catch (InvalidOperationException iopEx) { throw iopEx; }            finally { this.CloseConnection(); }        }        /// <summary>        /// 执行不返回数据集的Sql操作。        /// </summary>        /// <param name="command">要执行的数据库命令对象。</param>        /// <exception cref="SqlException、InvalidOperationException"></exception>        /// <returns>受影响的行数。</returns>        public int ExecuteNonQuery(DbCommand command)        {            try            {                //  打开数据库连接对象。                command.Connection = connection;                this.OpenConnection();                //  执行操作并返回受影响的行数。                int count = command.ExecuteNonQuery();                return count;            }            catch (SqlException sqlEx) { throw sqlEx; }            catch (InvalidOperationException iopEx) { throw iopEx; }            finally             {                command.Dispose();                this.CloseConnection();             }        }        /// <summary>        /// 执行不返回数据集的Sql操作。        /// </summary>        /// <param name="commandTexts">要执行的Sql语句集合。</param>        /// <exception cref="ArgumentNullException、SqlException、InvalidOperationException"></exception>        /// <returns>受影响的行数。</returns>        public int ExecuteNonQuery(IList<string> commandTexts)        {            if (commandTexts.Count <= 0)            { throw new ArgumentNullException("要执行的Sql语句不能为空。"); }            //  Sql事务。            SqlTransaction transaction = null;            try            {                //  实例化一个SqlCommand对象,并指定要执行的Sql语句。                using (DbCommand command = new SqlCommand())                {                    int count = 0;                    //  打开数据库连接对象。                    this.OpenConnection();                    command.Connection = connection;                    //  开始事务。                    transaction = connection.BeginTransaction();                    command.Transaction = transaction;                    foreach (string commandText in commandTexts)                    {                        //  执行操作。                        command.CommandText = commandText;                        count += command.ExecuteNonQuery();                    }                    //  提交事务。                    transaction.Commit();                    //  返回受影响的行数。                    return count;                }            }            catch (SqlException sqlEx) { throw sqlEx; }            catch (InvalidOperationException iopEx)             {                //  回滚事务。                transaction.Rollback();                throw iopEx;             }            finally             {                transaction.Dispose();                this.CloseConnection();             }        }        /// <summary>        /// 执行不返回数据集的Sql操作。        /// </summary>        /// <param name="commands">要执行的DbCommand接口集合。</param>        /// <exception cref="SqlException、InvalidOperationException"></exception>        /// <returns>受影响的行数。</returns>        public int ExecuteNonQuery(IList<DbCommand> commands)        {            //  受影响的行数。            int count = 0;            //  数据库事务对象。            SqlTransaction transaction = null;            try            {                //  打开数据库连接对象。                this.OpenConnection();                //  设置数据库事务对象。                transaction = connection.BeginTransaction();                foreach (DbCommand command in commands)                {                    //  执行操作并返回受影响的行数。                    command.Connection = connection;                    command.Transaction = transaction;                    count += command.ExecuteNonQuery();                    command.Dispose();                }                //  提交事务。                transaction.Commit();                //  返回影响的行数。                return count;            }            catch (SqlException sqlEx) { throw sqlEx; }            catch (InvalidOperationException iopEx)            {                //  回滚事务。                transaction.Rollback();                throw iopEx;            }            finally            {                transaction.Dispose();                this.CloseConnection();            }        }        /// <summary>        /// 执行不返回数据集的存储过程。        /// </summary>        /// <param name="storedProcedureName">要执行的存储过程名称。</param>        /// <exception cref="ArgumentException、SqlException、InvalidOperationException"></exception>        /// <returns>受影响的行数。</returns>        public int ExecuteNonQueryByStoredProcedure(string storedProcedureName)        {            if (string.IsNullOrWhiteSpace(storedProcedureName))             { throw new ArgumentNullException("要执行的存储过程名称不能为空。"); }            try            {                //  打开数据库连接。                OpenConnection();                //  创建数据库命令对象。                using (DbCommand command = new SqlCommand())                {                    command.Connection = connection;                    command.CommandText = storedProcedureName;                    command.CommandType = CommandType.StoredProcedure;                    //  执行操作。                    int count = command.ExecuteNonQuery();                    //  返回受影响的行数。                    return count;                }            }            catch (SqlException sqlEx) { throw sqlEx; }            catch (InvalidOperationException ivoEx) { throw ivoEx; }            finally { this.CloseConnection(); }        }        /// <summary>        /// 执行不返回数据集的存储过程。        /// </summary>        /// <param name="storedProcedureName">要执行的存储过程名称。</param>        /// <param name="parameters">存储过程的参数。</param>        /// <exception cref="ArgumentException、SqlException、InvalidOperationException"></exception>        /// <returns>受影响的行数。</returns>        public int ExecuteNonQueryByStoredProcedure(string storedProcedureName, params DbParameter[] parameters)        {            if (string.IsNullOrWhiteSpace(storedProcedureName))            { throw new ArgumentNullException("要执行的存储过程名称不能为空。"); }            try            {                //  打开数据库连接。                OpenConnection();                //  创建数据库命令对象。                using (DbCommand command = new SqlCommand())                {                    command.Connection = connection;                    command.CommandText = storedProcedureName;                    command.CommandType = CommandType.StoredProcedure;                    //  添加存储过程参数。                    foreach (DbParameter parameter in parameters)                    {                        command.Parameters.Add(parameter);                    }                    //  执行操作。                    int count = command.ExecuteNonQuery();                    //  返回受影响的行数。                    return count;                }            }            catch (SqlException sqlEx) { throw sqlEx; }            catch (InvalidOperationException ivoEx) { throw ivoEx; }            finally { this.CloseConnection(); }        }        /// <summary>        /// 执行Sql操作,返回数据集的第一行第一列。        /// </summary>        /// <param name="commandText">要执行的Sql语句。</param>        /// <exception cref="ArgumentException、SqlException、InvalidOperationException"></exception>        /// <returns>数据集的第一行第一列。</returns>        public object ExecuteScalar(string commandText)        {            //  如果要执行的Sql语句为空,将抛出ArgumentException异常。            if (string.IsNullOrWhiteSpace(commandText))             { throw new ArgumentException("要执行的Sql语句不能为空。"); }            try            {                //  实例化一个SqlCommand对象,并指定要执行的Sql语句。                using (DbCommand command = new SqlCommand(commandText, connection))                {                    //  打开数据库连接对象。                    this.OpenConnection();                    //  返回数据集的第一行第一列。                    object result = command.ExecuteScalar();                    return result;                }            }            catch (SqlException sqlEx) { throw sqlEx; }            catch (InvalidOperationException iopEx) { throw iopEx; }            finally { this.CloseConnection(); }        }        /// <summary>        /// 执行Sql操作,返回数据集的第一行第一列。        /// </summary>        /// <param name="command">要执行的数据库命令对象。</param>        /// <exception cref="SqlException、InvalidOperationException"></exception>        /// <returns>数据集的第一行第一列。</returns>        public object ExecuteScalar(DbCommand command)        {            try            {                //  打开数据库连接对象。                command.Connection = connection;                this.OpenConnection();                //  返回数据集的第一行第一列。                object result = command.ExecuteScalar();                return result;            }            catch (SqlException sqlEx) { throw sqlEx; }            catch (InvalidOperationException iopEx) { throw iopEx; }            finally            {                command.Dispose();                this.CloseConnection();            }        }        /// <summary>        /// 执行存储过程,返回数据集的第一行第一列。        /// </summary>        /// <param name="storedProcedureName">要执行的存储过程名称。</param>        /// <exception cref="ArgumentException、SqlException、InvalidOperationException"></exception>        /// <returns>数据集的第一行第一列。</returns>        public object ExecuteScalarByStoredProcedure(string storedProcedureName)         {            if (string.IsNullOrWhiteSpace(storedProcedureName))            { throw new ArgumentNullException("要执行的存储过程名称不能为空。"); }            try            {                //  打开数据库连接对象。                OpenConnection();                //  创建数据库命令对象。                using (DbCommand command = new SqlCommand())                {                    command.Connection = connection;                    command.CommandText = storedProcedureName;                    command.CommandType = CommandType.StoredProcedure;                    //  返回数据集的第一行第一列。                    object result = command.ExecuteScalar();                    return result;                }            }            catch (SqlException sqlEx) { throw sqlEx; }            catch (InvalidOperationException ivoEx) { throw ivoEx; }            finally { this.CloseConnection(); }        }        /// <summary>        /// 执行存储过程,返回数据集的第一行第一列。        /// </summary>        /// <param name="storedProcedureName">要执行的存储过程名称。</param>        /// <param name="parameters">存储过程的参数。</param>        /// <exception cref="ArgumentException、SqlException、InvalidOperationException"></exception>        /// <returns>数据集的第一行第一列。</returns>        public object ExecuteScalarByStoredProcedure(string storedProcedureName, params DbParameter[] parameters)         {            if (string.IsNullOrWhiteSpace(storedProcedureName))            { throw new ArgumentNullException("要执行的存储过程名称不能为空。"); }            try            {                //  打开数据库连接对象。                OpenConnection();                //  创建数据库命令对象。                using (DbCommand command = new SqlCommand())                {                    command.Connection = connection;                    command.CommandText = storedProcedureName;                    command.CommandType = CommandType.StoredProcedure;                    //  添加存储过程参数。                    foreach (DbParameter parameter in parameters)                    {                        command.Parameters.Add(parameter);                    }                    //  返回数据集的第一行第一列。                    object result = command.ExecuteScalar();                    return result;                }            }            catch (SqlException sqlEx) { throw sqlEx; }            catch (InvalidOperationException ivoEx) { throw ivoEx; }            finally { this.CloseConnection(); }        }        /// <summary>        /// 执行Sql操作,返回DataSet数据集。        /// </summary>        /// <param name="commandText">要执行的Sql语句。</param>        /// <exception cref="ArgumentException、SqlException、InvalidOperationException"></exception>        /// <returns>DataSet数据集。</returns>        public DataSet ExecuteDataSet(string commandText)        {            if (string.IsNullOrWhiteSpace(commandText))            { throw new ArgumentNullException("commandText", "要执行的Sql语句不能为空。"); }            try            {                //  创建数据库命令对象。                using (DbCommand command = new SqlCommand(commandText))                {                    //  创建数据库适配器。                    using (DbDataAdapter adapter = new SqlDataAdapter())                    {                                     adapter.SelectCommand = command;                        //  打开数据库连接对象。                        command.Connection = connection;                        OpenConnection();                        //  创建数据集。                        DataSet dataSet = new DataSet();                        //  填充数据集。                        adapter.Fill(dataSet);                        //  返回数据集。                        return dataSet;                    }                }            }            catch (SqlException sqlEx) { throw sqlEx; }            catch (InvalidOperationException ivoEx) { throw ivoEx; }            finally { this.CloseConnection(); }        }        /// <summary>        /// 执行Sql语句,返回DataSet数据集。        /// </summary>        /// <param name="command">要执行的数据库命令对象。</param>        /// <exception cref="SqlException、InvalidOperationException"></exception>        /// <returns>DataSet数据集。</returns>        public DataSet ExecuteDataSet(DbCommand command)        {            try            {                //  创建数据库适配器。                using (DbDataAdapter adapter = new SqlDataAdapter())                {                    adapter.SelectCommand = command;                    //  打开数据库连接对象。                    command.Connection = connection;                    OpenConnection();                    //  创建数据集。                    DataSet dataSet = new DataSet();                    //  填充数据集。                    adapter.Fill(dataSet);                    //  返回数据集。                    return dataSet;                }            }            catch (SqlException sqlEx) { throw sqlEx; }            catch (InvalidOperationException ivoEx) { throw ivoEx; }            finally { this.CloseConnection(); }        }        /// <summary>        /// 执行Sql语句,返回DataSet数据集。        /// </summary>        /// <param name="commandTexts">要执行的Sql语句集合。</param>        /// <param name="tableNames">DataSet数据集中Table的名称集合。</param>        /// <exception cref="ArgumentNullException、SqlException、InvalidOperationException"></exception>        /// <returns>DataSet数据集。</returns>        public DataSet ExecuteDataSet(IList<string> commandTexts, IList<string> tableNames)        {             try            {                if (commandTexts.Count <= 0)                { throw new ArgumentNullException("要执行的Sql语句不能为空。"); }                if (commandTexts.Count != tableNames.Count)                { throw new ArgumentException("tableNames集合中的名称的数量不够。"); }                //  打开数据库连接。                OpenConnection();                //  创建数据集。                DataSet dataSet = new DataSet();                for (int i = 0; i < commandTexts.Count; i++)                {                    //  创建数据库命令对象。                    using (DbCommand command = new SqlCommand(commandTexts[i]))                    {                        command.Connection = connection;                        //  创建数据库适配器。                        using (DbDataAdapter adapter = new SqlDataAdapter())                        {                            //  创建数据表。                            DataTable dataTable = new DataTable();                            //  设置数据表的名称。                            dataTable.TableName = tableNames[i];                            //  填充数据表。                            adapter.SelectCommand = command;                            adapter.Fill(dataTable);                            //  将数据表添加到数据集。                            dataSet.Tables.Add(dataTable);                            //  释放数据适配器。                            adapter.Dispose();                        }                    }                }                return dataSet;            }            catch (SqlException sqlEx) { throw sqlEx; }            catch (InvalidOperationException ivoEx) { throw ivoEx; }            finally { this.CloseConnection(); }        }        /// <summary>        /// 执行Sql语句,返回DataSet数据集。        /// </summary>        /// <param name="commandTexts">要执行的DbCommand接口集合。</param>        /// <param name="tableNames">DataSet数据集中Table的名称集合。</param>        /// <exception cref="ArgumentException、SqlException、InvalidOperationException"></exception>        /// <returns>DataSet数据集。</returns>        public DataSet ExecuteDataSet(IList<DbCommand> commands, IList<string> tableNames)        {            try            {                if (commands.Count != tableNames.Count)                { throw new ArgumentException("tableNames集合中的名称的数量不够。"); }                //  打开数据库连接。                OpenConnection();                //  创建数据集。                DataSet dataSet = new DataSet();                for (int i = 0; i < commands.Count; i++)                {                    commands[i].Connection = connection;                    //  创建数据库适配器。                    using (DbDataAdapter adapter = new SqlDataAdapter())                    {                        //  创建数据表。                        DataTable dataTable = new DataTable();                        //  设置数据表的名称。                        dataTable.TableName = tableNames[i];                        //  填充数据表。                        adapter.SelectCommand = commands[i];                        adapter.Fill(dataTable);                        //  将数据表添加到数据集。                        dataSet.Tables.Add(dataTable);                        //  释放数据适配器。                        adapter.Dispose();                    }                    commands[i].Dispose();                }                return dataSet;            }            catch (SqlException sqlEx) { throw sqlEx; }            catch (InvalidOperationException ivoEx) { throw ivoEx; }            finally { this.CloseConnection(); }        }        /// <summary>        /// 执行存储过程,返回DataSet数据集。        /// </summary>        /// <param name="storedProcedureName">要执行的存储过程名称。</param>        /// <exception cref="ArgumentException、SqlException、InvalidOperationException"></exception>        /// <returns>DataSet数据集。</returns>        public DataSet ExecuteDataSetByStoredProcedure(string storedProcedureName)        {            if (string.IsNullOrWhiteSpace(storedProcedureName))            { throw new ArgumentNullException("要执行的存储过程名称不能为空。"); }            try            {                //  打开数据库连接对象。                OpenConnection();                //  创建数据库命令对象。                using (DbCommand command = new SqlCommand())                {                    command.Connection = connection;                    command.CommandText = storedProcedureName;                    command.CommandType = CommandType.StoredProcedure;                    using (DbDataAdapter adapter = new SqlDataAdapter())                    {                        //  创建数据集。                        DataSet dataSet = new DataSet();                        //  填充数据集。                        adapter.SelectCommand = command;                        adapter.Fill(dataSet);                        //  释放数据适配器。                        adapter.Dispose();                        //  释放数据库命令对象。                        command.Dispose();                        //  返回数据集。                        return dataSet;                    }                }            }            catch (SqlException sqlEx) { throw sqlEx; }            catch (InvalidOperationException ivoEx) { throw ivoEx; }            finally { this.CloseConnection(); }        }        /// <summary>        /// 执行存储过程,返回DataSet数据集。        /// </summary>        /// <param name="storedProcedureName">要执行的存储过程名称。</param>        /// <param name="parameters">存储过程的参数。</param>        /// <exception cref="ArgumentException、SqlException、InvalidOperationException"></exception>        /// <returns>DataSet数据集。</returns>        public DataSet ExecuteDataSetByStoredProcedure(string storedProcedureName, params DbParameter[] parameters)        {            if (string.IsNullOrWhiteSpace(storedProcedureName))            { throw new ArgumentNullException("要执行的存储过程名称不能为空。"); }            try            {                //  打开数据库连接对象。                OpenConnection();                //  创建数据库命令对象。                using (DbCommand command = new SqlCommand())                {                    command.Connection = connection;                    command.CommandText = storedProcedureName;                    command.CommandType = CommandType.StoredProcedure;                    foreach (SqlParameter parameter in parameters)                    {                        command.Parameters.Add(parameter);                    }                    using (DbDataAdapter adapter = new SqlDataAdapter())                    {                        //  创建数据集。                        DataSet dataSet = new DataSet();                        //  填充数据集。                        adapter.SelectCommand = command;                        adapter.Fill(dataSet);                        //  释放数据适配器。                        adapter.Dispose();                        //  释放数据库命令对象。                        command.Dispose();                        //  返回数据集。                        return dataSet;                    }                }            }            catch (SqlException sqlEx) { throw sqlEx; }            catch (InvalidOperationException ivoEx) { throw ivoEx; }            finally { this.CloseConnection(); }        }        /// <summary>        /// 执行Sql语句,返回XmlDocument对象。        /// </summary>        /// <param name="commandText">要执行的Sql语句。</param>        /// <exception cref="ArgumentException、SqlException、InvalidOperationException"></exception>        /// <returns>XmlDocument对象。</returns>        public XmlDocument ExecuteDataXml(string commandText)         {            if (string.IsNullOrWhiteSpace(commandText))            { throw new ArgumentNullException("要执行的Sql语句不能为空。"); }            try            {                //  格式化DataSet对象。                DataSet ds = this.ExecuteDataSet(commandText);                //  返回XmlDocument对象。                return ConvertDataSetToXmlDocument(ds);            }            catch (SqlException sqlEx) { throw sqlEx; }            catch (InvalidOperationException ivoEx) { throw ivoEx; }        }        /// <summary>        /// 执行Sql操作,返回XmlDocument对象。        /// </summary>        /// <param name="command">要执行的数据库命令对象。</param>        /// <exception cref="SqlException、InvalidOperationException"></exception>        /// <returns>XmlDocument对象。</returns>        public XmlDocument ExecuteDataXml(DbCommand command)        {            try            {                //  格式化DataSet对象。                DataSet ds = this.ExecuteDataSet(command);                //  返回XmlDocument对象。                return ConvertDataSetToXmlDocument(ds);            }            catch (SqlException sqlEx) { throw sqlEx; }            catch (InvalidOperationException ivoEx) { throw ivoEx; }        }        /// <summary>        /// 执行Sql操作,返回XmlDocument对象。        /// </summary>        /// <param name="commandTexts">要执行的Sql语句集合。</param>        /// <param name="tableNames">XmlDocument对象中Element属性的名称集合。</param>        /// <exception cref="ArgumentException、SqlException、InvalidOperationException"></exception>        /// <returns>XmlDocument对象。</returns>        public XmlDocument ExecuteDataXml(IList<string> commandTexts, IList<string> tableNames)        {            if (commandTexts.Count <= 0)            { throw new ArgumentNullException("要执行的Sql语句不能为空。"); }            if (commandTexts.Count != tableNames.Count)            { throw new ArgumentException("tableNames集合中的名称的数量不够。"); }            try            {                //  格式化DataSet对象。                DataSet ds = this.ExecuteDataSet(commandTexts, tableNames);                //  返回XmlDocument对象。                return ConvertDataSetToXmlDocument(ds);            }            catch (SqlException sqlEx) { throw sqlEx; }            catch (InvalidOperationException ivoEx) { throw ivoEx; }        }        /// <summary>        /// 执行存储过程,返回XmlDocument对象。        /// </summary>        /// <param name="storedProcedureName">要执行的存储过程名称。</param>        /// <exception cref="ArgumentException、SqlException、InvalidOperationException"></exception>        /// <returns>XmlDocument对象。</returns>        public XmlDocument ExecuteDataXmlByStoredProcedure(string storedProcedureName)        {            if (string.IsNullOrWhiteSpace(storedProcedureName))            { throw new ArgumentNullException("要执行的存储过程名称不能为空。"); }            try            {                //  格式化DataSet对象。                DataSet ds = this.ExecuteDataSetByStoredProcedure(storedProcedureName);                //  返回XmlDocument对象。                return ConvertDataSetToXmlDocument(ds);            }            catch (SqlException sqlEx) { throw sqlEx; }            catch (InvalidOperationException ivoEx) { throw ivoEx; }        }        /// <summary>        /// 执行存储过程,返回XmlDocument对象。        /// </summary>        /// <param name="storedProcedureName">要执行的存储过程名称。</param>        /// <param name="parameters">存储过程的参数。</param>        /// <exception cref="ArgumentException、SqlException、InvalidOperationException"></exception>        /// <returns>XmlDocument对象。</returns>        public XmlDocument ExecuteDataXmlByStoredProcedure(string storedProcedureName, params DbParameter[] parameters)        {            if (string.IsNullOrWhiteSpace(storedProcedureName))            { throw new ArgumentNullException("要执行的存储过程名称不能为空。"); }            try            {                //  格式化DataSet对象。                DataSet ds = this.ExecuteDataSetByStoredProcedure(storedProcedureName, parameters);                //  返回XmlDocument对象。                return ConvertDataSetToXmlDocument(ds);            }            catch (SqlException sqlEx) { throw sqlEx; }            catch (InvalidOperationException ivoEx) { throw ivoEx; }        }    }}

 

在经过一段时间学习,会把反射加入到工厂,数据访问类中加入DataSetToJson。

先做个记录。

C#连接层的数据访问类(简单版)