• 数据访问基础类(基于SQLServer) (转)


    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Text;
    using Microsoft.Practices.EnterpriseLibrary.Data;
    using Microsoft.Practices.EnterpriseLibrary.Data.Sql;
    using System.Net.Mail;
    using System.Data.Common;
    using System.Security.Principal;
    using System.IO;
    using System.Collections.Generic;
    using System.Data.SqlClient;
    using System.Collections;
    using Microsoft.Practices.EnterpriseLibrary;


    /// <summary>
    /// Copyright (C) 2004-2008 LiTianPing 
    /// 数据访问基础类(基于SQLServer)
    /// 用户可以修改满足自己项目的需要。
    /// </summary>
    public abstract class DbHelperSQL
    {
        public DbHelperSQL()
        {

        }

        public static Database GetDatabase()
        {
            return DatabaseFactory.CreateDatabase();
        }

        #region membership中的用户及邮件相关函数
        /// <summary>
        /// 发送邮件
        /// </summary>
        /// <param name="mailFrom">发件人</param>
        /// <param name="mailTo">收件人</param>
        /// <param name="mailSubject">邮件标题</param>
        /// <param name="mailBody">邮件正文</param>
        public static void SendMail(string mailFrom, string mailTo, string mailSubject, string mailBody)
        {
            try
            {
                MailMessage message = new MailMessage();
                if (mailFrom.Length > 0)
                {
                    message.From = new MailAddress(mailFrom);
                }
                message.IsBodyHtml = true;
                message.To.Add(new MailAddress(mailTo));
                message.Subject = mailSubject;
                message.Body = mailBody;
                SmtpClient client = new SmtpClient();
                client.Send(message);
            }
            catch
            {
            }
        }
        /// <summary>
        /// 发送文本邮件
        /// </summary>
        /// <param name="mailFrom">发件人</param>
        /// <param name="mailTo">收件人</param>
        /// <param name="mailSubject">邮件标题</param>
        /// <param name="mailBody">邮件正文</param>
        public static void SendTextMail(string mailFrom, string mailTo, string mailSubject, string mailBody)
        {
            try
            {
                MailMessage message = new MailMessage();
                if (mailFrom.Length > 0)
                {
                    message.From = new MailAddress(mailFrom);
                }
                message.IsBodyHtml = false;
                message.To.Add(new MailAddress(mailTo));
                message.Subject = mailSubject;
                message.Body = mailBody;
                SmtpClient client = new SmtpClient();
                client.Send(message);
            }
            catch
            {
            }
        }


        //自动发送邮件给系统管理员
        public static void SendMailToAdmin(string mailFrom, string mailBody)
        {
            SendMail(mailFrom, ConfigurationManager.AppSettings["AdminMail"], "系统自动发送", mailBody);
        }

        /// <summary> 
        /// 查找用户名对应的membership的用户id
        /// </summary> 
        /// <param name="UserName">要查找UserId的用户名称</param> 
        public static string MemberShipUserId(string UserName)
        {
            Database db = GetDatabase();
            string select = "select UserId from aspnet_Users where UserName='" + UserName + "'";
            string sResult = db.ExecuteScalar(CommandType.Text, select).ToString();
            return sResult;
        }

        /// <summary> 
        /// 查找用户唯一标识对应的membership的用户名
        /// </summary> 
        /// <param name="UserID">用户的唯一标识ID</param> 
        public static string MemberShipUserName(string UserID)
        {
            Database db = GetDatabase();
            string select = "select UserName from aspnet_Users where UserId='" + UserID + "'";
            return db.ExecuteScalar(CommandType.Text, select).ToString();
        }
        #endregion

        #region 一次执行多条存储过程,同时使用事务的方法 ExecuteTransaction
        /// <summary>
        /// 再次封装Entlib,用于一次执行多条存储过程,同时使用事务的方法
        /// 使用时请先建立Database,再把需要执行的语句及参数保存到DbCommand对象中,
        /// 最后调用本方法,并判断返回结果即可
        /// 
        /// 使用方法如下:
        ///      Database db = GetDatabase();
        ///      DbCommand[] cmd = new DbCommand[你需要的大小];
        ///      给每个cmd赋值
        ///      ExecuteTransaction(db, cmd);
        /// </summary>
        /// <param name="db">从DatabaseFactory获得的Database对象</param>
        /// <param name="cmd">要执行的DbCommand对象数组</param>
        /// <returns>事务执行成功返回True,失败返回False并自动回滚</returns>
        public static bool ExecuteTransaction(ArrayList cmd)
        {
            Database db = GetDatabase();
            bool result = false;
            using (DbConnection connection = db.CreateConnection())
            {
                connection.Open();
                DbTransaction transaction = connection.BeginTransaction();

                try
                {
                    for (int i = 0; i < cmd.Count; i++)
                    {
                        db.ExecuteNonQuery(((DbCommand)cmd[i]), transaction);
                    }
                    transaction.Commit();
                    result = true;
                }
                catch (Exception ee)
                {
                    transaction.Rollback();
                    HttpContext.Current.Trace.Warn(ee.Message);
                }
                connection.Close();
                return result;
            }
        }
        #endregion

        #region 分页方法调用 AuthorizeUserOnPageRule
        /// <summary>
        /// 获取总条数记录
        /// </summary>
        /// <param name="table">数据表名称</param>        
        public static int SelectCount(string table, string where)
        {
            int result;
            Database db = GetDatabase();
            string sql = "select count(*) from " + table;
            if (!string.IsNullOrEmpty(where.Trim()))
            {
                sql += " where " + where;
            }
            DbCommand dbc = db.GetSqlStringCommand(sql);
            result = (int)db.ExecuteScalar(dbc);
            return result;
        }

        /// <summary>
        /// 获取当前页的数据,返回DataSet   
        /// 程序编写:姚国标
        /// 完成日期:2006.05.13
        /// </summary>
        /// <param name="anp">分页控件</param>
        /// <param name="table">数据表名称</param>
        /// <param name="PK">主键 例如:ID</param>
        /// <param name="sort">排序字段 例如:ID desc</param>
        /// <param name="fields">查询字段 例如:*</param>
        /// <param name="filter">where条件 例如:id>100</param>
        /// <param name="group">group条件</param>
        /// <param name="lblDGMessage">label控件,显示 多少条记录,有多少页等</param>
        /// <returns>返回Dataset数据</returns>
        public static DataSet GetPagenumberData(Wuqi.Webdiyer.AspNetPager anp, string table, string pk, string sort, string fields, string filter, string group, Label lblDGMessage)
        {
            Database db = GetDatabase();
            DbCommand dbc = db.GetStoredProcCommand("Paging_RowCount");

            lblDGMessage.Text = "共有信息记录 " + anp.RecordCount.ToString() + " 条, 当前第 " + anp.CurrentPageIndex.ToString() + "  页, 共 " + anp.PageCount.ToString() + " 页.";

            db.AddInParameter(dbc, "tables", DbType.String, table);
            db.AddInParameter(dbc, "PK", DbType.String, pk);
            db.AddInParameter(dbc, "sort", DbType.String, sort);
            db.AddInParameter(dbc, "PageNumber", DbType.Int32, anp.CurrentPageIndex);
            db.AddInParameter(dbc, "PageSize", DbType.String, anp.PageSize);
            db.AddInParameter(dbc, "Fields", DbType.String, fields);
            db.AddInParameter(dbc, "Filter", DbType.String, filter);
            db.AddInParameter(dbc, "Group", DbType.String, group);
            DataSet ds = db.ExecuteDataSet(dbc);
            return ds;

        }
        #endregion

        #region 公用方法 GetMaxID,Exists

        public static int GetMaxID(string FieldName, string TableName)
        {
            string strsql = "select max(" + FieldName + ")+1 from " + TableName;
            object obj = GetSingle(strsql);
            if (obj == null)
            {
                return 1;
            }
            else
            {
                return int.Parse(obj.ToString());
            }
        }
        public static bool Exists(string strSql)
        {
            object obj = GetSingle(strSql);
            int cmdresult;
            if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
            {
                cmdresult = 0;
            }
            else
            {
                cmdresult = int.Parse(obj.ToString());
            }
            if (cmdresult == 0)
            {
                return false;
            }
            else
            {
                return true;
            }
        }
        #endregion

        #region  执行SQL语句 ExecuteSql 执行存储过程 ExecuteProcedure

        /// <summary>
        /// 执行SQL语句,返回影响的记录数
        /// </summary>
        /// <param name="SQLString">SQL语句</param>
        /// <returns>影响的记录数,-1表示操作错误</returns>
        public static int ExecuteSql(string SQLString)
        {
            Database db = GetDatabase();
            using (DbConnection connection = db.CreateConnection())
            {
                try
                {
                    connection.Open();
                    int iRows = db.ExecuteNonQuery(CommandType.Text, SQLString);
                    connection.Close();
                    return iRows;
                }
                catch (Exception ee)
                {
                    connection.Close();
                    HttpContext.Current.Trace.Warn(ee.Message);
                    return -1;
                }
            }
        }

        /// <summary>
        /// 执行存储过程
        /// </summary>
        /// <param name="ProcName">存储过程名</param>
        /// <param name="ParaValue">存储过程参数</param>
        /// <returns>影响的记录数,-1表示操作失败</returns>
        public static int ExecuteProcedure(string ProcName,params object[] ParaValue)
        {
            Database db = GetDatabase();
            using (DbConnection connection = db.CreateConnection())
            {
                try
                {
                    connection.Open();
                    int iRows = db.ExecuteNonQuery(ProcName, ParaValue);
                    connection.Close();
                    return iRows;
                }
                catch (Exception ee)
                {
                    connection.Close();
                    HttpContext.Current.Trace.Warn(ee.Message);
                    return -1;
                }
            }
        }

        /// <summary>
        /// 执行查询语句,返回SqlDataReader
        /// </summary>
        /// <param name="strSQL">查询语句</param>
        /// <returns>SqlDataReader,错误返回null</returns>
        public static SqlDataReader ExecuteReader(string strSQL)
        {
            Database db = GetDatabase();
            using (DbConnection connection = db.CreateConnection())
            {
                try
                {
                    connection.Open();
                    SqlDataReader idr = (SqlDataReader)db.ExecuteReader(CommandType.Text, strSQL);
                    connection.Close();
                    return idr;
                }
                catch (Exception ee)
                {
                    connection.Close();
                    HttpContext.Current.Trace.Warn(ee.Message);
                    return null;
                }
            }
        }

        /// <summary>
        /// 执行查询语句,返回DataSet
        /// </summary>
        /// <param name="strSQL">查询语句</param>
        /// <returns>DataSet,错误返回null</returns>
        public static DataSet ExecuteDataSet(string strSQL)
        {
            Database db = GetDatabase();
            using (DbConnection connection = db.CreateConnection())
            {
                try
                {
                    connection.Open();
                    DataSet  ds = db.ExecuteDataSet(CommandType.Text, strSQL);
                    connection.Close();
                    return ds;
                }
                catch (Exception ee)
                {
                    connection.Close();
                    HttpContext.Current.Trace.Warn(ee.Message);
                    return null;
                }
            }
        }

        /// <summary>
        /// 执行一条计算查询结果语句,返回查询结果(object)。
        /// </summary>
        /// <param name="SQLString">计算查询结果语句</param>
        /// <returns>查询结果(object)</returns>
        public static object GetSingle(string SQLString)
        {
            try
            {
                Database db = GetDatabase();
                object obj = db.ExecuteScalar(CommandType.Text,SQLString);
                if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
                {
                    return null;
                }
                else
                {
                    return obj;
                }
            }
            catch (Exception ex)
            {
                HttpContext.Current.Trace.Warn(ex.Message);
                throw new Exception(ex.Message);
            }

        }

        #endregion

        #region 存储过程操作

        /// <summary>
        /// 执行存储过程,返回结果集
        /// </summary>
        /// <param name="storedProcName">存储过程名</param>
        /// <param name="parameters">存储过程参数</param>
        /// <returns>SqlDataReader</returns>
        public static SqlDataReader RunProcedure(string storedProcName, IDataParameter[] parameters)
        {
            Database db = GetDatabase();

            //用以下方法设置存储过程的参数
            DbCommand dbCommand = db.GetStoredProcCommand(storedProcName);
            for (int i = 0; i < parameters.Length; i++)
            {
                db.AddParameter(dbCommand, parameters[i].ParameterName, parameters[i].DbType, parameters[i].Direction,
                                parameters[i].SourceColumn, parameters[i].SourceVersion, parameters[i].Value);
            }

            //执行存储过程
            try
            {
                return (SqlDataReader)db.ExecuteReader(dbCommand);
            }
            catch (Exception ex)
            {
                HttpContext.Current.Trace.Warn(ex.Message);
                return null;
            }
        }

        /// <summary>
        /// 执行存储过程,返回影响的行数        
        /// </summary>
        /// <param name="storedProcName">存储过程名</param>
        /// <param name="parameters">存储过程参数</param>
        /// <param name="rowsAffected">影响的行数</param>
        /// <returns></returns>
        public static int RunProcedure(string storedProcName, IDataParameter[] parameters, out int rowsAffected)
        {
            Database db = GetDatabase();

            //用以下方法设置存储过程的参数
            DbCommand dbCommand = db.GetStoredProcCommand(storedProcName);
            for (int i = 0; i < parameters.Length; i++)
            {
                db.AddParameter(dbCommand, parameters[i].ParameterName, parameters[i].DbType, parameters[i].Direction,
                                parameters[i].SourceColumn, parameters[i].SourceVersion, parameters[i].Value);
            }

            //执行存储过程
            try
            {
                rowsAffected = db.ExecuteNonQuery(dbCommand);
            }
            catch (Exception ex)
            {
                HttpContext.Current.Trace.Warn(ex.Message);
                rowsAffected = -1;
            }

            //如果有返回参数
            if (dbCommand.Parameters[0].Direction == ParameterDirection.Output)
            {
                try
                {
                    return Convert.ToInt32(dbCommand.Parameters[0].Value);
                }
                catch
                {
                    return -1;
                }
            }
            else
            {
                return rowsAffected;
            }
        }


        /// <summary>
        /// 执行存储过程
        /// </summary>
        /// <param name="storedProcName">存储过程名</param>
        /// <param name="parameters">存储过程参数</param>
        /// <param name="tableName">DataSet结果中的表名</param>
        /// <returns>DataSet</returns>
        public static DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string ds)
        {
            Database db = GetDatabase();

            //用以下方法设置存储过程的参数
            DbCommand dbCommand = db.GetStoredProcCommand(storedProcName);
            for (int i = 0; i < parameters.Length; i++)
            {
                db.AddParameter(dbCommand,parameters[i].ParameterName,parameters[i].DbType,parameters[i].Direction,
                                parameters[i].SourceColumn,parameters[i].SourceVersion,parameters[i].Value);
            }
            
            //执行存储过程
            try
            {
                return db.ExecuteDataSet(dbCommand);
            }
            catch (Exception ex)
            {
                HttpContext.Current.Trace.Warn(ex.Message);
                return null;
            }
        }

        #endregion

    }
  • 相关阅读:
    正则表达式的点星匹配
    好玩Python——PIL项目实训(四)
    mysql中正则表达式使用学习记录
    linux下每个目录文件的作用
    彻底搞懂Android文件存储---内部存储,外部存储以及各种存储路径解惑
    获取APP包名和ACtivity名的方法
    mysql 中 王数据表中插入中文字段报错:mysql> insert into a values(202,"王一"); ERROR 1366 (HY000): Incorrect string value: 'xE7x8Ex8BxE4xB8x80' for column 'tname' at row 1
    linux系统下安装mysql
    测试人员初步分析BUG原因--转载
    PC端通过ADB命令 无线向 andriod端发送文件
  • 原文地址:https://www.cnblogs.com/skyblue/p/687589.html
Copyright © 2020-2023  润新知