• 步步为营 .NET三层架构解析 三、SQLHelper设计


    数据库设计好了,我们开始设计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
       {
           /// <summary>
           /// 包含系统Excepton
           /// </summary>
           public SystemException(string source, string message, Exception inner)
               base(message, inner)
           {
               base.Source = source;
           }
     
           /// <summary>
           /// 不包含系统Excepton
           /// </summary>           
           public SystemException(string source, string message)
               base(message)
           {
               base.Source = source;
           }
       }
     
       /// <summary>
       /// 处理网页中的HTML代码,并消除危险字符
       /// </summary>
       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(), "<BR> ");
               }
               return (fString);
           }
       }
     
     
       /// <summary>
       /// SystemTools 的摘要说明。
       /// </summary>
       public class SystemTools
       {
           /// <summary>
           /// 将DataReader转为DataTable
           /// </summary>
           /// <param name="DataReader">DataReader</param>
           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();
            }  
        }
    }

    主要记录日志.

    http://www.cnblogs.com/springyangwc/archive/2011/03/23/1993061.html

  • 相关阅读:
    安卓SQLite数据库操作(上)
    Android 查看设备信息
    Unity 编辑器学习(四)之 静态游戏物体
    Unity 编辑器学习(三)之 Light & Baked
    Unity 编辑器学习(二)之 全局光照(GI)
    unity 自动删除未引用的Assets下的资源
    C# http服务器
    unity 美术注意事项
    软件版本号命名规范
    Unity 框架(一)
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/1996164.html
Copyright © 2020-2023  润新知