天天学C#--数据访问类(一)

原创 2004年11月01日 20:15:00

这是网上一位仁兄写的数据访问类,封装了大部分底层的数据库操作,比如返回DataSet,DataTable

执行SQL语句,存储过程等。它是支持SQLServer的,要改写成Oracle等其他数据库也很容易,用OleDb

控件即可.

MSDN真是好东东,要想编写通用的可移植的数据访问接口,可参考MSDN的这篇文章;

http://www.microsoft.com/china/MSDN/library/data/dataAccess/wriportap2.mspx

希望大家都能写出高质量的程序,做出高质量的软件,这是我们共同的目标.

using System;
using System.Data;
using System.Data.SqlClient;

namespace SysClassLibrary
{
 /// <summary>
 /// DataAccess 的摘要说明。
 /// <description>数据处理基类,调用方式:DataAccess.DataSet((string)sqlstr);或者DataAccess.DataSet((string)sqlstr,ref DataSet ds); </description>
 /// </summary>
 public class DataAccess
 {
  #region  属性
      protected static SqlConnection conn=new SqlConnection();
      protected static SqlCommand    comm=new SqlCommand();
  #endregion
  public DataAccess()
  {
       //init();
  }
  #region 内部函数  静态方法中不会执行DataAccess()构造函数

  /// <summary>
  /// 打开数据库连接
  /// </summary>
  private static void openConnection()
  {
   if (conn.State == ConnectionState.Closed)
   {
    //SysConfig.ConnectionString 为系统配置类中连接字符串,:"server=localhost;database=databasename;uid=sa;pwd=;"

        conn.ConnectionString = SysConfig.ConnectionString ;
        comm.Connection =conn;
    try
    {
         conn.Open();
    }
    catch(Exception e)
    {
         throw new Exception(e.Message);
    }
   }
  }
  /// <summary>
  /// 关闭当前数据库连接
  /// </summary>
  private static void closeConnection()
  {
   if(conn.State == ConnectionState.Open)
        conn.Close();
   conn.Dispose();
   comm.Dispose();
  }
  #endregion
  /// <summary>
  /// 执行Sql查询语句
  /// </summary>
  /// <param name="sqlstr">传入的Sql语句</param>
  public static void ExecuteSql(string sqlstr)
  {
   try
   {
        openConnection();
        comm.CommandType =CommandType.Text ;
        comm.CommandText =sqlstr;
        comm.ExecuteNonQuery();
   }
   catch(Exception e)
   {
        throw new Exception(e.Message);
   }
   finally
   {
        closeConnection();
   }
  }

  /// <summary>
  /// 执行存储过程
  /// </summary>
  /// <param name="procName">存储过程名</param>
  /// <param name="coll">SqlParameters 集合</param>
  public static void ExecutePorcedure(string procName,SqlParameter[] coll)
  {
   try
   {
        openConnection();
        for(int i=0;i<coll.Length;i++)
        {
             comm.Parameters .Add(coll[i]);
        }
        comm.CommandType=CommandType.StoredProcedure ;
        comm.CommandText =procName;
        comm.ExecuteNonQuery();
   }
   catch(Exception e)
   {
        throw new Exception(e.Message);
   }
   finally
   {
        comm.Parameters.Clear();
        closeConnection();
   }
  }

  /// <summary>
  /// 执行存储过程并返回数据集
  /// </summary>
  /// <param name="procName">存储过程名称</param>
  /// <param name="coll">SqlParameter集合</param>
  /// <param name="ds">DataSet </param>
  public static void ExecutePorcedure(string procName,SqlParameter[] coll,ref DataSet ds)
  {
   try
   {
    SqlDataAdapter da=new SqlDataAdapter();
    openConnection();
    for(int i=0;i<coll.Length;i++)
    {
     comm.Parameters .Add(coll[i]);
    }
    comm.CommandType=CommandType.StoredProcedure ;
    comm.CommandText =procName;
   
    da.SelectCommand =comm;
    da.Fill(ds);
   }
   catch(Exception e)
   {
    throw new Exception(e.Message);
   }
   finally
   {
    comm.Parameters.Clear();
    closeConnection();
   }
  }

  /// <summary>
  /// 执行Sql查询语句并返回第一行的第一条记录,返回值为object 使用时需要拆箱操作 -> Unbox
  /// </summary>
  /// <param name="sqlstr">传入的Sql语句</param>
  /// <returns>object 返回值 </returns>
  public static object ExecuteScalar(string sqlstr)
  {
   object obj=new object();
   try
   {
    openConnection();
    comm.CommandType =CommandType.Text ;
    comm.CommandText =sqlstr;
    obj=comm.ExecuteScalar();
   }
   catch(Exception e)
   {
    throw new Exception(e.Message);
   }
   finally
   {
    closeConnection();
   }
   return obj;
  }

  /// <summary>
  /// 执行Sql查询语句,同时进行事务处理
  /// </summary>
  /// <param name="sqlstr">传入的Sql语句</param>
  public static void ExecuteSqlWithTransaction(string sqlstr)
  {
   SqlTransaction trans ;
   trans=conn.BeginTransaction();
   comm.Transaction =trans;
   try
   {
    openConnection();
    comm.CommandType =CommandType.Text ;
    comm.CommandText =sqlstr;
    comm.ExecuteNonQuery();
    trans.Commit();
   }
   catch
   {
    trans.Rollback();
   }
   finally
   {
    closeConnection();
   }
  }

  /// <summary>
  /// 返回指定Sql语句的SqlDataReader,请注意,在使用后请关闭本对象,同时将自动调用closeConnection()来关闭数据库连接
  /// 方法关闭数据库连接
  /// </summary>
  /// <param name="sqlstr">传入的Sql语句</param>
  /// <returns>SqlDataReader对象</returns>
  public static SqlDataReader dataReader(string sqlstr)
  {
   SqlDataReader dr=null;
   try
   {
    openConnection();
    comm.CommandText =sqlstr;
    comm.CommandType =CommandType.Text ;
    dr=comm.ExecuteReader(CommandBehavior.CloseConnection);
   }
   catch
   {
    try
    {
     dr.Close();
     closeConnection();
    }
    catch
    {
    }
   }
   return dr;
  }
  /// <summary>
  /// 返回指定Sql语句的SqlDataReader,请注意,在使用后请关闭本对象,同时将自动调用closeConnection()来关闭数据库连接
  /// 方法关闭数据库连接
  /// </summary>
  /// <param name="sqlstr">传入的Sql语句</param>
  /// <param name="dr">传入的ref DataReader 对象</param>
  public static void dataReader(string sqlstr,ref SqlDataReader dr)
  {
   try
   {
    openConnection();
    comm.CommandText =sqlstr;
    comm.CommandType =CommandType.Text ;
    dr=comm.ExecuteReader(CommandBehavior.CloseConnection);
   }
   catch
   {
    try
    {
     if(dr!=null && !dr.IsClosed)
      dr.Close();
    }
    catch
    {
    }
    finally
    {
     closeConnection();
    }
   }
  }


  /// <summary>
  /// 返回指定Sql语句的DataSet
  /// </summary>
  /// <param name="sqlstr">传入的Sql语句</param>
  /// <returns>DataSet</returns>
  public static DataSet dataSet(string sqlstr)
  {
   DataSet ds= new DataSet();
   SqlDataAdapter da=new SqlDataAdapter();
   try
   {
    openConnection();
    comm.CommandType =CommandType.Text ;
    comm.CommandText =sqlstr;
    da.SelectCommand =comm;
    da.Fill(ds);
   }
   catch(Exception e)
   {
    throw new Exception(e.Message);
   }
   finally
   {
    closeConnection();
   }
   return ds;
  }

  /// <summary>
  /// 返回指定Sql语句的DataSet
  /// </summary>
  /// <param name="sqlstr">传入的Sql语句</param>
  /// <param name="ds">传入的引用DataSet对象</param>
  public static void dataSet(string sqlstr,ref DataSet ds)
  {
   SqlDataAdapter da=new SqlDataAdapter();
   try
   {
    openConnection();
    comm.CommandType =CommandType.Text ;
    comm.CommandText =sqlstr;
    da.SelectCommand =comm;
    da.Fill(ds);
   }
   catch(Exception e)
   {
    throw new Exception(e.Message);
   }
   finally
   {
    closeConnection();
   }
  }
  /// <summary>
  /// 返回指定Sql语句的DataTable
  /// </summary>
  /// <param name="sqlstr">传入的Sql语句</param>
  /// <returns>DataTable</returns>
  public static DataTable dataTable(string sqlstr)
  {
   SqlDataAdapter da=new SqlDataAdapter();
   DataTable datatable=new DataTable();
   try
   {
    openConnection();
    comm.CommandType =CommandType.Text ;
    comm.CommandText =sqlstr;
    da.SelectCommand =comm;
    da.Fill(datatable);
   }
   catch(Exception e)
   {
    throw new Exception(e.Message);
   }
   finally
   {
    closeConnection();
   }
   return datatable;
  }

  /// <summary>
  /// 执行指定Sql语句,同时给传入DataTable进行赋值
  /// </summary>
  /// <param name="sqlstr">传入的Sql语句</param>
  /// <param name="dt">ref DataTable dt </param>
  public static void dataTable(string sqlstr,ref DataTable dt)
  {
   SqlDataAdapter da=new SqlDataAdapter();
   try
   {
    openConnection();
    comm.CommandType =CommandType.Text ;
    comm.CommandText =sqlstr;
    da.SelectCommand =comm;
    da.Fill(dt);
   }
   catch(Exception e)
   {
    throw new Exception(e.Message);
   }
   finally
   {
    closeConnection();
   }
  }
  /// <summary>
  /// 执行带参数存储过程并返回数据集合
  /// </summary>
  /// <param name="procName">存储过程名称</param>
  /// <param name="parameters">SqlParameterCollection 输入参数</param>
  /// <returns></returns>
  public static DataTable dataTable(string procName,SqlParameterCollection parameters)
  {
   SqlDataAdapter da=new SqlDataAdapter();
   DataTable datatable=new DataTable();
   try
   {
    openConnection();
    comm.Parameters.Clear();
    comm.CommandType=CommandType.StoredProcedure ;
    comm.CommandText =procName;
    foreach(SqlParameter para in parameters)
    {
     SqlParameter p=(SqlParameter)para;
     comm.Parameters.Add(p);
    }
    da.SelectCommand =comm;
    da.Fill(datatable);
   }
   catch(Exception e)
   {
    throw new Exception(e.Message);
   }
   finally
   {
    closeConnection();
   }
   return datatable;
  }

  public static DataView dataView(string sqlstr)
  {
   SqlDataAdapter da=new SqlDataAdapter();
   DataView dv=new DataView();
   DataSet ds=new DataSet();
   try
   {
    openConnection();
    comm.CommandType=CommandType.Text;
    comm.CommandText =sqlstr;
    da.SelectCommand =comm;
    da.Fill(ds);
    dv=ds.Tables[0].DefaultView;
   }
   catch(Exception e)
   {
    throw new Exception(e.Message);
   }
   finally
   {
    closeConnection();
   }
   return dv;
  }
 }


}

天天学C#--数据访问类(一)

这是网上一位仁兄写的数据访问类,封装了大部分底层的数据库操作,比如返回DataSet,DataTable 执行SQL语句,存储过程等。它是支持SQLServer的,要改写成Oracle等其他数据...
  • my98800
  • my98800
  • 2016年04月25日 14:57
  • 140

天天学C#--数据访问(二)(SQLHelper of Microsoft)

这个是微软的SQLHelper,说明挺详细,参考资料也挺全,大家慢慢研究吧// ============================================================...
  • ClampHammer
  • ClampHammer
  • 2004年11月01日 20:26
  • 1676

天天学C#--数据访问类(二)(SQLHelper of Microsoft)

这个是微软的SQLHelper,说明挺详细,参考资料也挺全,大家慢慢研究吧 // ================================================== // M...
  • my98800
  • my98800
  • 2016年04月25日 14:59
  • 147

每天记录一点学习心得!

C#
  • u013846818
  • u013846818
  • 2014年11月11日 13:51
  • 179

每天学习十分钟3之学习心得

感悟:很多事情,可以说是全部事情都是说起来容易,做起来难。前几天便是下定决心每天学习十分钟,然后通过博客的形式记录下来,可实际上:刚开始坚持了两天,就没有很好的坚持下去。关于“坚持”这一点做的真的有点...
  • tian330726
  • tian330726
  • 2015年12月29日 12:56
  • 266

win10 下天天模拟器 需要重启 安装驱动问题

按照以上方式,亲测可行  http://www.yxswz.com/x64bug.html 禁用数字签名:http://www.xiazaiba.com/jiaocheng/10544.html ...
  • xiangpi99
  • xiangpi99
  • 2017年05月03日 10:54
  • 1712

C#--类

C#的类和结构在形式上有点相似,但是,类可以有自己的方法,而结构去没有,且,结构是值类型,而类是引用类型。 using System; using System.Collections.Generi...
  • jiuduying
  • jiuduying
  • 2014年04月03日 17:21
  • 387

C#数据库公共访问类----公共的数据库访问访问类

using System; using System.Collections.Generic; using System.Text; using System.Data; using System.D...
  • luoyanqing119
  • luoyanqing119
  • 2014年01月09日 11:22
  • 3636

[每日一学]MFC学习笔记——自定义消息的使用

简单概要 windows的消息机制在前面的几章已经介绍过了,今天来学习一下自定义消息。 预备知识 看完前几章的文章。 具体步骤 新建一个工程,名称为“MyMe...
  • kingsollyu
  • kingsollyu
  • 2012年12月11日 12:05
  • 4560

献给游戏开发新手的入门概述:怎样模仿出一款《天天酷跑》

献给2d游戏开发新手的入门概述
  • qq_15650553
  • qq_15650553
  • 2015年11月01日 11:47
  • 1187
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:天天学C#--数据访问类(一)
举报原因:
原因补充:

(最多只允许输入30个字)