C#写的数据库访问类(只针对SQLSERVER)

a 夏天 提交于 2020-03-27 04:05:58

这个类使用的是存储过程方式,可以提高一些运行效率
目前还在写用于OLEDB的数据访问类

using System;
using System.ComponentModel;
using System.Collections;
using System.Diagnostics;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

 

namespace MI.Components
{
 /// <summary>
 /// Database 的摘要说明。
 /// </summary>
 public class Database : IDisposable
 {
  // 连接数据源
  private SqlConnection con;

        public Database()
        { }
  /// <summary>
  /// 执行存储过程
  /// </summary>
  /// <param name="procName">存储过程的名称</param>
  /// <returns>返回存储过程返回值</returns>
  public int RunProc(string procName)
  {
            //SqlTransaction tran;
   SqlCommand cmd = CreateCommand(procName, null);
   cmd.ExecuteNonQuery();
   this.Close();
   return (int)cmd.Parameters["ReturnValue"].Value;
  }

  /// <summary>
  /// 执行存储过程
  /// </summary>
  /// <param name="procName">存储过程名称</param>
  /// <param name="prams">存储过程所需参数</param>
  /// <returns>返回存储过程返回值</returns>
  public int RunProc(string procName, SqlParameter[] prams)
  {
   SqlCommand cmd = CreateCommand(procName, prams);
   cmd.ExecuteNonQuery();
   this.Close();
   return (int)cmd.Parameters["ReturnValue"].Value;
  }
  /// <summary>
  /// 执行存储过程
  /// </summary>
  /// <param name="procName">存储过程名称</param>
  /// <param name="prams">存储过程所需参数</param>
  /// <returns>返回存储过程返回值</returns>
  public string RunStrProc(string procName, SqlParameter[] prams)
  {
   SqlCommand cmd = CreatestrCommand(procName, prams);
   cmd.ExecuteNonQuery();
   this.Close();
            return cmd.Parameters["ReturnValue"].Value.ToString();
  }
  /// <summary>
  /// 执行存储过程
  /// </summary>
  /// <param name="procName">存储过程的名称</param>
  /// <param name="dataReader">返回存储过程返回值</param>
  public void RunProc(string procName, out SqlDataReader dataReader)
  {
   SqlCommand cmd = CreateCommand(procName, null);
   dataReader = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
  }

  /// <summary>
  /// 执行存储过程
  /// </summary>
  /// <param name="procName">存储过程的名称</param>
  /// <param name="prams">存储过程所需参数</param>
  /// <param name="dataReader">存储过程所需参数</param>
  public void RunProc(string procName, SqlParameter[] prams, out SqlDataReader dataReader)
  {
   SqlCommand cmd = CreateCommand(procName, prams);
   dataReader = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
   //return (int)cmd.Parameters["ReturnValue"].Value;
  }

        /// <summary>
        /// 执行存储过程
        /// </summary>
        /// <param name="procName">存储过程的名称</param>
        /// <param name="prams">存储过程所需参数</param>
        /// <param name="ds">存储过程所需参数</param>
        public void RunProc(string procName, ref DataSet ds)
        {
            SqlCommand cmd = CreateCommand(procName,null);
            SqlDataAdapter sda = new SqlDataAdapter(cmd);
            sda.Fill(ds);
            this.Close();
        }

        /// <summary>
        /// 执行存储过程
        /// </summary>
        /// <param name="procName">存储过程的名称</param>
        /// <param name="prams">存储过程所需参数</param>
        /// <param name="ds">存储过程所需参数</param>
        /// <param name="ds">存储过程所需参数</param>
        public void RunProc(string procName, ref DataSet ds,string tablename)
        {
            SqlCommand cmd = CreateCommand(procName, null);
            SqlDataAdapter sda = new SqlDataAdapter(cmd);
            sda.Fill(ds,tablename);
            this.Close();
        }

        /// <summary>
        /// 执行存储过程
        /// </summary>
        /// <param name="procName">存储过程的名称</param>
        /// <param name="prams">存储过程所需参数</param>
        /// <param name="ds">存储过程所需参数</param>
        public void RunProc(string procName, SqlParameter[] prams, ref DataSet ds)
        {
            SqlCommand cmd = CreateCommand(procName, prams);
            SqlDataAdapter sda = new SqlDataAdapter(cmd);
            sda.Fill(ds);
            this.Close();

        }

        /// <summary>
        /// 执行存储过程
        /// </summary>
        /// <param name="procName">存储过程的名称</param>
        /// <param name="prams">存储过程所需参数</param>
        /// <param name="ds">存储过程所需参数</param>
        /// <param name="ds">存储过程所需参数</param>
        public void RunProc(string procName, SqlParameter[] prams, ref DataSet ds,string tablename)
        {
            SqlCommand cmd = CreateCommand(procName, prams);
            SqlDataAdapter sda = new SqlDataAdapter(cmd);
            sda.Fill(ds,tablename);
            this.Close();

        }


  /// <summary>
  /// 创建一个SqlCommand对象以此来执行存储过程
  /// </summary>
  /// <param name="procName">存储过程的名称</param>
  /// <param name="prams">存储过程所需参数</param>
  /// <returns>返回SqlCommand对象</returns>
  private SqlCommand CreateCommand(string procName, SqlParameter[] prams)
  {
   // 确认打开连接
   Open();

   
   SqlCommand cmd = new SqlCommand(procName, con);
   cmd.CommandType = CommandType.StoredProcedure;

   // 依次把参数传入存储过程
   if (prams != null)
   {
    foreach (SqlParameter parameter in prams)
     cmd.Parameters.Add(parameter);
   }
   
   // 加入返回参数
   cmd.Parameters.Add(
    new SqlParameter("ReturnValue", SqlDbType.Int, 4,
    ParameterDirection.ReturnValue, false, 0, 0,
    string.Empty, DataRowVersion.Default, null));

   return cmd;
  }
  private SqlCommand CreatestrCommand(string procName, SqlParameter[] prams)
  {
   // 确认打开连接
   Open();

   
   SqlCommand cmd = new SqlCommand(procName, con);
   cmd.CommandType = CommandType.StoredProcedure;

   // 依次把参数传入存储过程
   if (prams != null)
   {
    foreach (SqlParameter parameter in prams)
     cmd.Parameters.Add(parameter);
   }
   
   // 加入返回参数
   cmd.Parameters.Add(
    new SqlParameter("ReturnValue",SqlDbType.VarChar, 50,
    ParameterDirection.ReturnValue,false, 0, 0,
    string.Empty, DataRowVersion.Default,DBNull.Value));

   return cmd;
  }
  /// <summary>
  /// 打开数据库连接.
  /// </summary>
  private void Open()
  {
   // 打开数据库连接
   if (con == null)
   {
                con = new SqlConnection(ConfigurationManager.ConnectionStrings["MIConnectionString"].ToString());
               
   }    
   if(con.State ==System.Data.ConnectionState.Closed)
    con.Open();

  }

  /// <summary>
  /// 关闭数据库连接
  /// </summary>
  public void Close()
  {
   if (con != null)
    con.Close();
  }

  /// <summary>
  /// 释放资源
  /// </summary>
  public void Dispose()
  {
   // 确认连接是否已经关闭
   if (con != null)
   {
    con.Dispose();
    con = null;
   }    
  }

  /// <summary>
  /// 传入输入参数
  /// </summary>
  /// <param name="ParamName">存储过程名称</param>
  /// <param name="DbType">参数类型</param></param>
  /// <param name="Size">参数大小</param>
  /// <param name="Value">参数值</param>
  /// <returns>新的 parameter 对象</returns>
        public SqlParameter MakeInParam(string ParamName, SqlDbType DbType, int Size, object Value)
  {
   return MakeParam(ParamName, DbType, Size, ParameterDirection.Input, Value);
  }  

  /// <summary>
  /// 传入返回值参数
  /// </summary>
  /// <param name="ParamName">存储过程名称</param>
  /// <param name="DbType">参数类型</param>
  /// <param name="Size">参数大小</param>
  /// <returns>新的 parameter 对象</returns>
        public SqlParameter MakeOutParam(string ParamName, SqlDbType DbType, int Size)
  {
   return MakeParam(ParamName, DbType, Size, ParameterDirection.Output, null);
  }  

  /// <summary>
  /// 传入返回值参数
  /// </summary>
  /// <param name="ParamName">存储过程名称</param>
  /// <param name="DbType">参数类型</param>
  /// <param name="Size">参数大小</param>
  /// <returns>新的 parameter 对象</returns>
  public SqlParameter MakeReturnParam(string ParamName, SqlDbType DbType, int Size)
  {
   return MakeParam(ParamName, DbType, Size, ParameterDirection.ReturnValue, null);
  } 
 
  /// <summary>
  /// 生成存储过程参数
  /// </summary>
  /// <param name="ParamName">存储过程名称</param>
  /// <param name="DbType">参数类型</param>
  /// <param name="Size">参数大小</param>
  /// <param name="Direction">参数方向</param>
  /// <param name="Value">参数值</param>
  /// <returns>新的 parameter 对象</returns>
  public SqlParameter MakeParam(string ParamName, SqlDbType DbType, int Size, ParameterDirection Direction, object Value)
  {
   SqlParameter param;

   if(Size > 0)
    param = new SqlParameter(ParamName, DbType, Size);
   else
    param = new SqlParameter(ParamName, DbType);

   param.Direction = Direction;
   if (!(Direction == ParameterDirection.Output))
                param.Value = Value;

   return param;
           
  }
 }
}

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!