DBOperation类库

来源:互联网 发布:悠游域名批量查询工具 编辑:程序博客网 时间:2024/06/10 05:20
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.Data.SqlClient;
/// <summary>
/// 类名:DBOperation
/// 作用:创建连接字符串,打开、关闭、释放连接,执行存储过程,
/// </summary>
public class DBOperation
{
    private SqlConnection con;
    private readonly string RETURNVALUE = "RETURNVALUE";
    //记录错误日志位置
    private static string m_fileName = "c:\\Systemlog.txt";
    public DBOperation()
    {
        //
        // TODO: 在此处添加构造函数逻辑
        //
    }
    #region 创建连接字符串
    /// <summary>
    /// CreateCon创建连接字符串
    /// </summary>
    /// <returns></returns>
    public SqlConnection CreateCon()
    {
        SqlConnection con = new SqlConnection("server=61.129.47.15;database=taobao; uid=taobao;pwd=870104");
        //或者使用如下方式,调用webConfig的连接字符串
        //string strcon = ConfigurationManager.ConnectionStrings["yhqhjnConnectionString"].ConnectionString;
        //SqlConnection con = new SqlConnection(strcon);
        return con;
    }

    #endregion
    
    #region 打开数据库连接.
    private void Open()
    {
        // 打开数据库连接
        if (con == null)
        {
            con = CreateCon();
        }

        if (con.State == ConnectionState.Closed)
        {
            try
            {
                ///打开数据库连接
                con.Open();
            }
            catch (Exception ex)
            {
                DBOperation.CreateErrorMsg(ex.Message);
            }
            finally
            {
                ///关闭已经打开的数据库连接                
            }
        }
    }
#endregion

    #region 关闭数据库连接
    public void Close()
    {
        ///判断连接是否已经创建
        if (con != null)
        {
            ///判断连接的状态是否打开
            if (con.State == ConnectionState.Open)
            {
                con.Close();
            }
        }
    }
#endregion
   
    #region 释放资源
    public void Dispose()
    {
        // 确认连接是否已经关闭
        if (con != null)
        {
            con.Dispose();
            con = null;
        }
    }
#endregion
    
    #region 执行无参存储过程
    /// <summary>
    /// 执行存储过程,执行添加、删除、更新类型操作
    /// </summary>
    public int RunProc(string procName)
    {
        SqlCommand cmd = CreateProcCommand(procName, null);
        ///执行存储过程
        cmd.ExecuteNonQuery();
        ///关闭数据库的连接
        Close();

        ///返回存储过程的参数值
        return (int)cmd.Parameters[RETURNVALUE].Value;
    }
#endregion
    
    #region 执行有参存储过程
    /// <summary>
    /// 执行存储过程,执行添加、删除、更新类型操作
    /// </summary>
    /// <param name="procName">存储过程名</param>
    /// <param name="prams">参数列表</param>
    /// <returns></returns>
    public int RunProc(string procName, SqlParameter[] prams)
    {
        SqlCommand cmd = CreateProcCommand(procName, prams);
        ///执行存储过程
        cmd.ExecuteNonQuery();
        ///关闭数据库的连接
        Close();

        ///返回存储过程的参数值
        return (int)cmd.Parameters[RETURNVALUE].Value;
    }
#endregion
    
    #region 执行无参存储过程,返回datareader对象
   /// <summary>
    /// 执行存储过程,执行选择类型操作
   /// </summary>
   /// <param name="procName">存储过程名</param>
   /// <param name="dataReader">要返回的DataReader对象</param>
    public void RunProc(string procName, out SqlDataReader dataReader)
    {
        ///创建Command
        SqlCommand cmd = CreateProcCommand(procName, null);

        ///读取数据
        dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
    }

#endregion

    #region 执行有参存储过程,返回datareader对象
    /// <summary>
    /// 执行存储过程,执行选择类型操作
    /// </summary>
    public void RunProc(string procName, SqlParameter[] prams, out SqlDataReader dataReader)
    {
        ///创建Command
        SqlCommand cmd = CreateProcCommand(procName, prams);

        ///读取数据
        dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
    }
    #endregion
    
    #region 执行无参存储过程,返回DataSet对象
    /// <summary>
    /// 执行无参存储过程,返回DataSet对象
    /// </summary>
    /// <param name="procName">存储过程名</param>
    /// <param name="dataSet"></param>
    public void RunProc(string procName, ref DataSet dataSet)
    {
        if (dataSet == null)
        {
            dataSet = new DataSet();
        }
        ///创建SqlDataAdapter
        SqlDataAdapter da = CreateProcDataAdapter(procName, null);

        ///读取数据
        da.Fill(dataSet);
        ///关闭数据库的连接
        Close();
    }

#endregion
    
    #region 执行有参存储过程,返回DataSet对象
    /// <summary>
    /// 执行有参存储过程,返回DataSet对象
    /// </summary>
    /// <param name="procName">存储过程名</param>
    /// <param name="prams">参数列表</param>
    /// <param name="dataSet">返回对象</param>
    public void RunProc(string procName, SqlParameter[] prams, ref DataSet dataSet)
    {
        if (dataSet == null)
        {
            dataSet = new DataSet();
        }
        ///创建SqlDataAdapter
        SqlDataAdapter da = CreateProcDataAdapter(procName, prams);

        ///读取数据
        da.Fill(dataSet);
        ///关闭数据库的连接
        Close();
    }
#endregion
    

    #region 创建一个SqlCommand对象以此来执行存储过程
    /// <summary>
    /// 创建一个SqlCommand对象以此来执行存储过程
    /// </summary>
    /// <param name="procName">存储过程名</param>
    /// <param name="prams">存储过程参数</param>
    /// <returns></returns>

    private SqlCommand CreateProcCommand(string procName, SqlParameter[] prams)
    {
        Open();
        ///设置Command
        SqlCommand cmd = new SqlCommand(procName, con);
        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;
    }    

    #endregion

    #region 创建一个SqlDataAdapter对象,用此来执行存储过程
    /// <summary>
    /// 创建一个SqlDataAdapter对象,用此来执行存储过程
    /// </summary>
    /// <param name="procName">存储过程名</param>
    /// <param name="prams">参数列表</param>
    /// <returns></returns>
    private SqlDataAdapter CreateProcDataAdapter(string procName, SqlParameter[] prams)
    {
        ///打开数据库连接
        Open();

        ///设置SqlDataAdapter对象
        SqlDataAdapter da = new SqlDataAdapter(procName, con);
        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;
    }
#endregion
    
    #region 生成存储过程参数
    /// <summary>
    /// 生成存储过程参数
    /// </summary>
    /// <param name="ParamName">参数名称</param>
    /// <param name="DbType">参数类型</param>
    /// <param name="Size">参数大小</param>
    /// <param name="Direction">形式参数类型</param>
    /// <param name="Value">形参名称</param>
    /// <returns></returns>
    public SqlParameter CreateParam(string ParamName, SqlDbType DbType, Int32 Size, ParameterDirection Direction, object Value)
    {
        SqlParameter param = null;

        ///当参数大小为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;
    }
#endregion
    
    #region 输入传入参数
    /// <summary>
    /// 输入传入参数和
    /// </summary>
    /// <param name="ParamName">参数名称</param>
    /// <param name="DbType">参数类型</param>
    /// <param name="Size">参数大小</param>
    /// <param name="Value">参数值</param>
    /// <returns></returns>
    public SqlParameter CreateInParam(string ParamName, SqlDbType DbType, int Size, object Value)
    {
        return CreateParam(ParamName, DbType, Size, ParameterDirection.Input, Value);
    }
#endregion

    #region 传入返回值参数
    /// <summary>
    /// 传入返回值参数
    /// </summary>
    public SqlParameter CreateOutParam(string ParamName, SqlDbType DbType, int Size)
    {
        return CreateParam(ParamName, DbType, Size, ParameterDirection.Output, null);
    }
#endregion

    #region 传入返回值参数
    /// <summary>
    /// 传入返回值参数
    /// </summary>
    public SqlParameter CreateReturnParam(string ParamName, SqlDbType DbType, int Size)
    {
        return CreateParam(ParamName, DbType, Size, ParameterDirection.ReturnValue, null);
    }
    #endregion

    #region 将DataReader转为DataTable
    /// <summary>
    /// 将DataReader转为DataTable
    /// </summary>
    /// <param name="dataReader"></param>
    /// <returns></returns>
    public static DataTable ConvertdrTodt(SqlDataReader dataReader)
    {
        ///定义DataTable
        DataTable datatable = new DataTable();

        ///动态添加表的数据列
        for (int i = 0; i < dataReader.FieldCount; i++)
        {
            DataColumn mydc = new DataColumn();
            mydc.DataType = dataReader.GetFieldType(i);
            mydc.ColumnName = dataReader.GetName(i);
            datatable.Columns.Add(mydc);
        }

        ///添加表的数据
        while (dataReader.Read())
        {
            DataRow mydr = datatable.NewRow();
            for (int i = 0; i < dataReader.FieldCount; i++)
            {
                mydr[i] = dataReader[i].ToString();
            }
            datatable.Rows.Add(mydr);
            mydr = null;
        }
        ///关闭数据读取器
        dataReader.Close();
        return datatable;
    }

    #endregion

    #region 记录日志至文本文件
    /// <summary>
    /// 记录日志至文本文件
    /// </summary>
    /// <param name="message">记录的内容</param>
    public static void CreateErrorMsg(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();
        }    
    }
    #endregion
    
}

0 0