博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
步步为营 .NET三层架构解析 三、SQLHelper设计
阅读量:5859 次
发布时间:2019-06-19

本文共 17990 字,大约阅读时间需要 59 分钟。

数据库设计好了,我们开始设计SQLHelper了,是一个SQL基类.

 连接数据源:

private SqlConnection myConnection = null;    private readonly string RETURNVALUE = "RETURNVALUE";

打开数据库连接.

private void Open()        {            // 打开数据库连接            if (myConnection == null)            {               //    myConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);               myConnection = new SqlConnection(ConfigurationManager.AppSettings["ConnectionString"].ToString());                        }            if (myConnection.State == ConnectionState.Closed)            {                try                {                    ///打开数据库连接                    myConnection.Open();                }                catch (Exception ex)                {                                        SystemError.CreateErrorLog(ex.Message);                }                finally                {                    ///关闭已经打开的数据库连接				                }            }        }

关闭数据库连接

public void Close()        {            ///判断连接是否已经创建            if (myConnection != null)            {                ///判断连接的状态是否打开                if (myConnection.State == ConnectionState.Open)                {                    myConnection.Close();                }            }        }

释放资源

public void Dispose()        {            // 确认连接是否已经关闭            if (myConnection != null)            {                myConnection.Dispose();                myConnection = null;            }        }

执行无参数和返回int型的存储过程

public int RunProc(string procName)        {            SqlCommand cmd = CreateProcCommand(procName, null);            try            {                ///执行存储过程                cmd.ExecuteNonQuery();            }            catch (Exception ex)            {                ///记录错误日志                SystemError.CreateErrorLog(ex.Message);            }            finally            {                ///关闭数据库的连接                Close();            }            ///返回存储过程的参数值            return (int)cmd.Parameters[RETURNVALUE].Value;        }

执行传入参数和返回int型的存储过程

public int RunProc(string procName, SqlParameter[] prams)        {            SqlCommand cmd = CreateProcCommand(procName, prams);            try            {                ///执行存储过程                cmd.ExecuteNonQuery();            }            catch (Exception ex)            {                ///记录错误日志                SystemError.CreateErrorLog(ex.Message);            }            finally            {                ///关闭数据库的连接                Close();            }            ///返回存储过程的参数值            return (int)cmd.Parameters[RETURNVALUE].Value;        }

 执行存储过程和返回SqlDataReader

public void RunProc(string procName, out SqlDataReader dataReader)        {            ///创建Command            SqlCommand cmd = CreateProcCommand(procName, null);            try            {                ///读取数据                dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);            }            catch (Exception ex)            {                dataReader = null;                ///记录错误日志                SystemError.CreateErrorLog(ex.Message);            }        }

 执行传入参数和返回SqlDataReader存储过程

public void RunProc(string procName, SqlParameter[] prams, out SqlDataReader dataReader)        {            ///创建Command            SqlCommand cmd = CreateProcCommand(procName, prams);            try            {                ///读取数据                dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);            }            catch (Exception ex)            {                dataReader = null;                ///记录错误日志                SystemError.CreateErrorLog(ex.Message);            }        }

执行无参数存储过程返回DataSet

public void RunProc(string procName, ref DataSet dataSet)        {            if (dataSet == null)            {                dataSet = new DataSet();            }            ///创建SqlDataAdapter            SqlDataAdapter da = CreateProcDataAdapter(procName, null);            try            {                ///读取数据                da.Fill(dataSet);            }            catch (Exception ex)            {                ///记录错误日志                SystemError.CreateErrorLog(ex.Message);            }            finally            {                ///关闭数据库的连接                Close();            }        }

执行传入参数的存储过程返回DataSet

public void RunProc(string procName, SqlParameter[] prams, ref DataSet dataSet)        {            if (dataSet == null)            {                dataSet = new DataSet();            }            ///创建SqlDataAdapter            SqlDataAdapter da = CreateProcDataAdapter(procName, prams);            try            {                ///读取数据                da.Fill(dataSet);            }            catch (Exception ex)            {                ///记录错误日志                SystemError.CreateErrorLog(ex.Message);            }            finally            {                ///关闭数据库的连接                Close();            }        }

执行传入参数和表名的存储过程返回DataSet

public void RunProc(string procName, SqlParameter[] prams, string TableName, ref DataSet dataSet)        {            if (dataSet == null)            {                dataSet = new DataSet();            }            ///创建SqlDataAdapter            SqlDataAdapter da = CreateProcDataAdapter(procName, prams);            try            {                ///读取数据                da.Fill(dataSet, TableName);            }            catch (Exception ex)            {                ///记录错误日志                SystemError.CreateErrorLog(ex.Message);            }            finally            {                ///关闭数据库的连接                Close();            }        }

执行无参数SQL语句

public int RunSQL(string cmdText)        {            SqlCommand cmd = CreateSQLCommand(cmdText, null);            try            {                ///执行存储过程                cmd.ExecuteNonQuery();            }            catch (Exception ex)            {                ///记录错误日志                SystemError.CreateErrorLog(ex.Message);            }            finally            {                ///关闭数据库的连接                Close();            }            ///返回存储过程的参数值            return (int)cmd.Parameters[RETURNVALUE].Value;        }

执行传入参数SQL语句

public int RunSQL(string cmdText, SqlParameter[] prams)        {            SqlCommand cmd = CreateSQLCommand(cmdText, prams);            try            {                ///执行存储过程                cmd.ExecuteNonQuery();            }            catch (Exception ex)            {                ///记录错误日志                SystemError.CreateErrorLog(ex.Message);            }            finally            {                ///关闭数据库的连接                Close();            }            ///返回存储过程的参数值            return (int)cmd.Parameters[RETURNVALUE].Value;        }

 执行无参数SQL语句返回SqlDataReader

public void RunSQL(string cmdText, out SqlDataReader dataReader)        {            ///创建Command            SqlCommand cmd = CreateSQLCommand(cmdText, null);            try            {                ///读取数据                dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);            }            catch (Exception ex)            {                dataReader = null;                ///记录错误日志                SystemError.CreateErrorLog(ex.Message);            }        }

执行传入参数SQL语句返回SqlDataReader

public void RunSQL(string cmdText, SqlParameter[] prams, out SqlDataReader dataReader)        {            ///创建Command            SqlCommand cmd = CreateSQLCommand(cmdText, prams);            try            {                ///读取数据                dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);            }            catch (Exception ex)            {                dataReader = null;                ///记录错误日志                SystemError.CreateErrorLog(ex.Message);            }        }

 执行无参数SQL语句返回DataSet

public void RunSQL(string cmdText, ref DataSet dataSet)        {            if (dataSet == null)            {                dataSet = new DataSet();            }            ///创建SqlDataAdapter            SqlDataAdapter da = CreateSQLDataAdapter(cmdText, null);            try            {                ///读取数据                da.Fill(dataSet);            }            catch (Exception ex)            {                ///记录错误日志                SystemError.CreateErrorLog(ex.Message);            }            finally            {                ///关闭数据库的连接                Close();            }        }

执行传入参数SQL语句返回DataSet

public void RunSQL(string cmdText, SqlParameter[] prams, ref DataSet dataSet)        {            if (dataSet == null)            {                dataSet = new DataSet();            }            ///创建SqlDataAdapter            SqlDataAdapter da = CreateProcDataAdapter(cmdText, prams);            try            {                ///读取数据                da.Fill(dataSet);            }            catch (Exception ex)            {                ///记录错误日志                SystemError.CreateErrorLog(ex.Message);            }            finally            {                ///关闭数据库的连接                Close();            }        }

执行传入参数SQL语句和表名返回DataSet

public void RunSQL(string cmdText, SqlParameter[] prams, string TableName, ref DataSet dataSet)        {            if (dataSet == null)            {                dataSet = new DataSet();            }            ///创建SqlDataAdapter            SqlDataAdapter da = CreateProcDataAdapter(cmdText, prams);            try            {                ///读取数据                da.Fill(dataSet, TableName);            }            catch (Exception ex)            {                ///记录错误日志                SystemError.CreateErrorLog(ex.Message);            }            finally            {                ///关闭数据库的连接                Close();            }        }

创建一个SqlCommand对象以此来执行存储过程

private SqlCommand CreateProcCommand(string procName, SqlParameter[] prams)        {            ///打开数据库连接            Open();            ///设置Command            SqlCommand cmd = new SqlCommand(procName, myConnection);            cmd.CommandType = CommandType.StoredProcedure;            ///添加把存储过程的参数            if (prams != null)            {                foreach (SqlParameter parameter in prams)                {                    cmd.Parameters.Add(parameter);                }            }            ///添加返回参数ReturnValue            cmd.Parameters.Add(                new SqlParameter(RETURNVALUE, SqlDbType.Int, 4, ParameterDirection.ReturnValue,                false, 0, 0, string.Empty, DataRowVersion.Default, null));            ///返回创建的SqlCommand对象            return cmd;        }

创建一个SqlCommand对象以此来执行存储过程

private SqlCommand CreateSQLCommand(string cmdText, SqlParameter[] prams)        {            ///打开数据库连接            Open();            ///设置Command            SqlCommand cmd = new SqlCommand(cmdText, myConnection);            ///添加把存储过程的参数            if (prams != null)            {                foreach (SqlParameter parameter in prams)                {                    cmd.Parameters.Add(parameter);                }            }            ///添加返回参数ReturnValue            cmd.Parameters.Add(                new SqlParameter(RETURNVALUE, SqlDbType.Int, 4, ParameterDirection.ReturnValue,                false, 0, 0, string.Empty, DataRowVersion.Default, null));            ///返回创建的SqlCommand对象            return cmd;        }

创建一个SqlDataAdapter对象,用此来执行存储过程

private SqlDataAdapter CreateProcDataAdapter(string procName, SqlParameter[] prams)        {            ///打开数据库连接            Open();            ///设置SqlDataAdapter对象            SqlDataAdapter da = new SqlDataAdapter(procName, myConnection);            da.SelectCommand.CommandType = CommandType.StoredProcedure;            ///添加把存储过程的参数            if (prams != null)            {                foreach (SqlParameter parameter in prams)                {                    da.SelectCommand.Parameters.Add(parameter);                }            }            ///添加返回参数ReturnValue            da.SelectCommand.Parameters.Add(                new SqlParameter(RETURNVALUE, SqlDbType.Int, 4, ParameterDirection.ReturnValue,                false, 0, 0, string.Empty, DataRowVersion.Default, null));            ///返回创建的SqlDataAdapter对象            return da;        }

创建一个SqlDataAdapter对象,用此来执行SQL语句

private SqlDataAdapter CreateSQLDataAdapter(string cmdText, SqlParameter[] prams)        {            ///打开数据库连接            Open();            ///设置SqlDataAdapter对象            SqlDataAdapter da = new SqlDataAdapter(cmdText, myConnection);            ///添加把存储过程的参数            if (prams != null)            {                foreach (SqlParameter parameter in prams)                {                    da.SelectCommand.Parameters.Add(parameter);                }            }            ///添加返回参数ReturnValue            da.SelectCommand.Parameters.Add(                new SqlParameter(RETURNVALUE, SqlDbType.Int, 4, ParameterDirection.ReturnValue,                false, 0, 0, string.Empty, DataRowVersion.Default, null));            ///返回创建的SqlDataAdapter对象            return da;        }

生成存储过程参数

public SqlParameter CreateParam(string ParamName, SqlDbType DbType, Int32 Size, ParameterDirection Direction, object Value)        {            SqlParameter param;            ///当参数大小为0时,不使用该参数大小值            if (Size > 0)            {                param = new SqlParameter(ParamName, DbType, Size);            }            else            {                ///当参数大小为0时,不使用该参数大小值                param = new SqlParameter(ParamName, DbType);            }            ///创建输出类型的参数            param.Direction = Direction;            if (!(Direction == ParameterDirection.Output && Value == null))            {                param.Value = Value;            }            ///返回创建的参数            return param;        }

传入输入参数

public SqlParameter CreateInParam(string ParamName, SqlDbType DbType, int Size, object Value)        {            return CreateParam(ParamName, DbType, Size, ParameterDirection.Input, Value);        }

传入返回值参数

public SqlParameter CreateOutParam(string ParamName, SqlDbType DbType, int Size)        {            return CreateParam(ParamName, DbType, Size, ParameterDirection.Output, null);        }

传入返回值参数

public SqlParameter CreateReturnParam(string ParamName, SqlDbType DbType, int Size)        {            return CreateParam(ParamName, DbType, Size, ParameterDirection.ReturnValue, null);        }

把所有这些方法放在SQLHelper.cs类里.再建一个SQLTools.cs,里面的方法如下:

public class SystemException : Exception    {        ///         /// 包含系统Excepton        ///         public SystemException(string source, string message, Exception inner)            : base(message, inner)        {            base.Source = source;        }        ///         /// 不包含系统Excepton        /// 			        public SystemException(string source, string message)            : base(message)        {            base.Source = source;        }    }    ///     /// 处理网页中的HTML代码,并消除危险字符    ///     public class SystemHTML    {        private static string HTMLEncode(string fString)        {            if (fString != string.Empty)            {                ///替换尖括号                fString.Replace("<", "<");                fString.Replace(">", "&rt;");                ///替换引号                fString.Replace(((char)34).ToString(), """);                fString.Replace(((char)39).ToString(), "'");                ///替换空格                fString.Replace(((char)13).ToString(), "");                ///替换换行符                fString.Replace(((char)10).ToString(), "
"); } return (fString); } } /// /// SystemTools 的摘要说明。 /// public class SystemTools { /// /// 将DataReader转为DataTable /// /// DataReader public static DataTable ConvertDataReaderToDataTable(SqlDataReader dataReader) { ///定义DataTable DataTable datatable = new DataTable(); try { ///动态添加表的数据列 for (int i = 0; i < dataReader.FieldCount; i++) { DataColumn myDataColumn = new DataColumn(); myDataColumn.DataType = dataReader.GetFieldType(i); myDataColumn.ColumnName = dataReader.GetName(i); datatable.Columns.Add(myDataColumn); } ///添加表的数据 while (dataReader.Read()) { DataRow myDataRow = datatable.NewRow(); for (int i = 0; i < dataReader.FieldCount; i++) { myDataRow[i] = dataReader[i].ToString(); } datatable.Rows.Add(myDataRow); myDataRow = null; } ///关闭数据读取器 dataReader.Close(); return datatable; } catch (Exception ex) { ///抛出类型转换错误 SystemError.CreateErrorLog(ex.Message); throw new Exception(ex.Message, ex); } } }

主要是处理异常和一些特殊字符.

再建一个SystemError.cs,里面的方法如下:

public class SystemError    {        private static string m_fileName = "c:\\Systemlog.txt";        public static String FileName        {            get            {                return (m_fileName);            }            set            {                if (value != null || value != "")                {                    m_fileName = value;                }            }        }        public static void CreateErrorLog(string message)        {            if (File.Exists(m_fileName))            {                ///如果日志文件已经存在,则直接写入日志文件                StreamWriter sr = File.AppendText(FileName);                sr.WriteLine("\n");                sr.WriteLine(DateTime.Now.ToString() + message);                sr.Close();            }            else            {                ///创建日志文件                StreamWriter sr = File.CreateText(FileName);                sr.Close();            }	        }    }

主要记录日志.

我们的SQLHelper类就建完了,接下来我们就开始建Model类了.欢迎拍砖.

转载地址:http://birjx.baihongyu.com/

你可能感兴趣的文章
web ssh方案Gateone
查看>>
HTML5教程:1.2 HTML 5会深受欢迎的理由
查看>>
PostgreSQL 约束延迟生效(deferrable)
查看>>
Laravel 应用性能调优
查看>>
我的友情链接
查看>>
Linux mail 命令
查看>>
SublimeText Markdown Edit
查看>>
etcd选举机制
查看>>
httpd安全控制
查看>>
html解析
查看>>
LNMMP架构实现Web动静分离
查看>>
RHEL6.8编译安装LAMP环境:httpd-2.4+mysql5.6+php5.5;基于LAMP环境部署WordPress
查看>>
1.2.1 标示符
查看>>
Kebernetes 学习总结(13) K8s 资源监控
查看>>
java如何备份/还原mysql
查看>>
NO.168 如何做禅道二次开发(4):如何登记菜单
查看>>
ios实现城市选择功能(searchBar和tableView)
查看>>
javaBean
查看>>
U盘防病毒的技巧
查看>>
sublime3学习笔记3:搜索和替换
查看>>