SQLHelper设计

来源:互联网 发布:兼职做淘宝客服怎么样 编辑:程序博客网 时间:2024/05/16 05:14

[转]原文地址:http://www.cnblogs.com/springyangwc/archive/2011/03/23/1993061.html

数据库设计好了,我们开始设计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();            }        }    }

主要记录日志.

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