自己写的一个数据访问类,请高手帮忙看看!谢谢!

原创 2006年06月23日 11:55:00

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

namespace SQLServerDAL
{
 /// <summary>
 /// SQLDAL 的摘要说明。
 /// </summary>
 public class SQLDAL
 {
  #region 属性
  private static string connectionString = ConfigurationSettings.AppSettings["ConnectionString"];
  private static SqlConnection con = new SqlConnection();
  private static SqlCommand cmd = new SqlCommand();
  #endregion
  public SQLDAL()
  {
   //
   // TODO: 在此处添加构造函数逻辑
   //
  }

  #region 打开当前数据库连接
  /// <summary>
  /// 打开当前数据库连接
  /// </summary>
  private static void openConnection()
  {
   if(con.State == ConnectionState.Closed)
   {
    con.ConnectionString = connectionString;
    cmd.Connection = con;
   }
   try
   {
    con.Open();
   }
   catch(Exception e)
   {
    throw new Exception(e.Message);
   }
  }
  #endregion

  #region 关闭当前数据库连接
  /// <summary>
  /// 关闭当前数据库连接
  /// </summary>
  private static void closeConnection()
  {
   if(con.State == ConnectionState.Open)
   {
    cmd.Dispose();
    con.Close();
    con.Dispose();
   }
  }
  #endregion

  #region 执行sql语句,并返回影响的记录数
  /// <summary>
  /// 执行sql语句,并返回影响的记录数
  /// </summary>
  /// <param name="strsql"></param>
  /// <returns></returns>
  public static int ExecuteSql(string strsql)
  {
   int count = 0;
   try
   {
    openConnection();
    cmd.CommandType = CommandType.Text;
    cmd.CommandText = strsql;
    count = cmd.ExecuteNonQuery();
   }
   catch(Exception e)
   {
    throw new Exception(e.Message);
   }
   finally
   {
    closeConnection();
   }
   return count;
  }
  #endregion

  #region 执行sql语句并返回第一行的第一条记录,返回值为object时需要拆箱操作
  /// <summary>
  /// 执行sql语句并返回第一行的第一条记录,返回值为object时需要拆箱操作
  /// </summary>
  /// <param name="strsql"></param>
  /// <returns></returns>
  public static object ExecuteScalar(string strsql)
  {
   object obj = new object();
   try
   {
    openConnection();
    cmd.CommandType = CommandType.Text;
    cmd.CommandText = strsql;
    obj = cmd.ExecuteScalar();
   }
   catch(Exception e)
   {
    throw new Exception(e.Message);
   }
   finally
   {
    closeConnection();
   }
   return obj;
  }
  #endregion
 
  #region 执行一条sql语句,同时进行事务处理
  /// <summary>
  /// 执行一条sql语句,同时进行事务处理
  /// </summary>
  /// <param name="strsql"></param>
  public static void ExecuteSqlWithTransaction(string strsql)
  {
   SqlTransaction Trans;
   Trans = con.BeginTransaction();
   cmd.Transaction = Trans;
   try
   {
    openConnection();
    cmd.CommandType = CommandType.Text;
    cmd.CommandText = strsql;
    cmd.ExecuteNonQuery();

    Trans.Commit();
   }
   catch(Exception e)
   {
    Trans.Rollback();
    throw new Exception(e.Message);
   }
   finally
   {
    closeConnection();
   }
  }
  #endregion

  #region 执行多条sql语句,同时进行事务处理
  /// <summary>
  /// 执行多条sql语句,同时进行事务处理
  /// </summary>
  /// <param name="strsql">传入的存储sql语句的数组</param>
  public static void ExecuteSqlWithTransaction(string [] strsql)
  {
   SqlTransaction Trans;
   Trans = con.BeginTransaction();
   cmd.Transaction = Trans;
   try
   {
    openConnection();
    cmd.CommandType = CommandType.Text;
    foreach(string sql in strsql)
    {
     cmd.CommandText = sql;
     cmd.ExecuteNonQuery();
    }
    Trans.Commit();
   }
   catch(Exception e)
   {
    Trans.Rollback();
    throw new Exception(e.Message);
   }
   finally
   {
    closeConnection();
   }
  }
  #endregion

  #region 返回指定sql语句的SqlDataReader
  /// <summary>
  /// 返回指定sql语句的SqlDataReader
  /// </summary>
  /// <param name="strsql">传入的sql语句</param>
  /// <returns>SqlDataReader</returns>
  public static SqlDataReader dataReader(string strsql)
  {
   SqlDataReader dr = null;
   try
   {
    openConnection();
    cmd.CommandType = CommandType.Text;
    cmd.CommandText = strsql;
    dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
   }
   catch
   {
    try
    {
     dr.Close();
     closeConnection();
    }
    catch
    {}
   }
   return dr;
  }
  #endregion

  #region 返回指定sql语句的引用的SqlDataReader
  /// <summary>
  /// 返回指定sql语句的引用的SqlDataReader
  /// </summary>
  /// <param name="strsql">传入的sql语句</param>
  /// <param name="dr">引用的SqlDataReader</param>
  public static void dataReader(string strsql,ref SqlDataReader dr)
  {
   try
   {
    openConnection();
    cmd.CommandType = CommandType.Text;
    cmd.CommandText = strsql;
    dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
   }
   catch
   {
    try
    {
     if(dr != null && !dr.IsClosed)
     {
      dr.Close();
     }
    }
    catch
    {}
    finally
    {
     closeConnection();
    }
   }
  }
  #endregion

  #region 执行不带参数的存储过程,并返回影响的记录数
  /// <summary>
  /// 执行不带参数的存储过程,并返回影响的记录数
  /// </summary>
  /// <param name="procName">存储过程名</param>
  /// <returns></returns>
  public static int ExecuteProcedure(string procName)
  {
   int count;
   try
   {
    openConnection();
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = procName;
    count = cmd.ExecuteNonQuery();
   }
   catch(Exception e)
   {
    throw new Exception(e.Message);
   }
   finally
   {
    closeConnection();
   }
   return count;
  }
  #endregion

  #region 执行带多个参数的存储过程
  /// <summary>
  /// 执行带多个参数的存储过程
  /// </summary>
  /// <param name="procName">存储过程名</param>
  /// <param name="coll">参数数组</param>
  public static void ExecuteProcedure(string procName,SqlParameter [] coll)
  {
   try
   {
    openConnection();
    cmd.Parameters.Clear();
    for(int i=0;i < coll.Length;i++)
    {
     cmd.Parameters.Add(coll[i]);
    }
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = procName;
    cmd.ExecuteNonQuery();
   }
   catch(Exception e)
   {
    throw new Exception(e.Message);
   }
   finally
   {
    cmd.Parameters.Clear();
    closeConnection();
   }

  }
  #endregion

  #region 执行带多个参数的存储过程,并返回引用的DataSet

  public static void ExecuteProcedure(string procName,SqlParameter [] coll,ref DataSet ds)
  {
   try
   {
    SqlDataAdapter da = new SqlDataAdapter();
    for(int i=0;i<coll.Length;i++)
    {
     cmd.Parameters.Add(coll[i]);
    }
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = procName;

    da.SelectCommand = cmd;
    da.Fill(ds);
   }
   catch(Exception e)
   {
    throw new Exception(e.Message);
   }
   finally
   {
    cmd.Parameters.Clear();
    closeConnection();
   }
  }
  #endregion

  #region 执行一条sql语句并返回指定的DataSet
  /// <summary>
  /// 执行一条sql语句并返回指定的DataSet
  /// </summary>
  /// <param name="strsql">传入的sql语句</param>
  /// <returns></returns>
  public static DataSet dataSet(string strsql)
  {
   DataSet ds = new DataSet();
   SqlDataAdapter da = new SqlDataAdapter();
   try
   {
    openConnection();
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = strsql;

    da.SelectCommand = cmd;
    da.Fill(ds);
   }
            catch(Exception e)
   {
    throw new Exception(e.Message);
   }
   finally
   {
    closeConnection();
   }
   return ds;
  }
  #endregion

  #region 执行一条sql语句并返回引用的DataSet
  /// <summary>
  /// 执行一条sql语句并返回引用的DataSet
  /// </summary>
  /// <param name="strsql">传入的sql语句</param>
  /// <param name="ds">引用的DataSet</param>
  public static void dataSet(string strsql,ref DataSet ds)
  {
   SqlDataAdapter da = new SqlDataAdapter();
   try
   {
    openConnection();
    cmd.CommandType = CommandType.Text;
    cmd.CommandText = strsql;
    
    da.SelectCommand = cmd;
    da.Fill(ds);
   }
   catch(Exception e)
   {
    throw new Exception(e.Message);
   }
   finally
   {
    closeConnection();
   }
  }
  #endregion

  #region 返回指定sql语句的DataTable

  public static DataTable dataTable(string strsql)
  {
   DataTable dt = new DataTable();
   SqlDataAdapter da = new SqlDataAdapter();
   try
   {
    openConnection();
    cmd.CommandType = CommandType.Text;
    cmd.CommandText = strsql;

    da.SelectCommand = cmd;
    da.Fill(dt);
   }
   catch(Exception e)
   {
    throw new Exception(e.Message);
   }
   finally
   {
    closeConnection();
   }
   return dt;
  }
  #endregion

  #region 返回指定sql语句的引用的DataTable
  /// <summary>
  /// 返回指定sql语句的引用的DataTable
  /// </summary>
  /// <param name="strsql">传入的sql语句</param>
  /// <param name="dt">引用的DataTable</param>
  public static void dataTable(string strsql,ref DataTable dt)
  {
   SqlDataAdapter da = new SqlDataAdapter();
   try
   {
    openConnection();
    cmd.CommandType = CommandType.Text;
    cmd.CommandText = strsql;

    da.SelectCommand = cmd;
    da.Fill(dt);
   }
   catch(Exception e)
   {
    throw new Exception(e.Message);
   }
   finally
   {
    closeConnection();
   }
  }
  #endregion

  #region 执行带参数的存储过程并返回DataTable
  /// <summary>
  /// 执行带参数的存储过程并返回数据集合
  /// </summary>
  /// <param name="procName">存储过程名</param>
  /// <param name="parameters">SqlParameterCollection输入参数</param>
  /// <returns>DataTable</returns>
  public static  DataTable dataTable(string procName,SqlParameterCollection parameters)
  {
   SqlDataAdapter da = new SqlDataAdapter();
   DataTable dt = new DataTable();
   try
   {
    openConnection();
    cmd.Parameters.Clear();
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = procName;
    foreach(SqlParameter parameter in parameters)
    {
     SqlParameter p = (SqlParameter)parameter;
     cmd.Parameters.Add(p);
    }
    da.SelectCommand = cmd;
    da.Fill(dt);
   }
   catch(Exception e)
   {
    throw new Exception(e.Message);
   }
   finally
   {
    closeConnection();
   }
   return dt;
  }
  #endregion

  #region 执行sql语句并返回DataView
  /// <summary>
  /// 执行sql语句并返回DataView
  /// </summary>
  /// <param name="strsql">传入的sql语句</param>
  /// <returns>DataView</returns>
  public static DataView dataView(string strsql)
  {
   SqlDataAdapter da = new SqlDataAdapter();
   DataSet ds = new DataSet();
   DataView dv = new DataView();
   try
   {
    openConnection();
    cmd.CommandType = CommandType.Text;
    cmd.CommandText = strsql;

    da.SelectCommand = cmd;
    da.Fill(ds);
    dv = ds.Tables[0].DefaultView;
   }
   catch(Exception e)
   {
    throw new Exception(e.Message);
   }
   finally
   {
    closeConnection();
   }
   return dv;
  }
  #endregion

  #region 执行sql语句并返回引用的DataView
  /// <summary>
  /// 执行sql语句并返回引用的DataView
  /// </summary>
  /// <param name="strsql">传入的sql语句</param>
  /// <param name="dv">传入的引用的DataView</param>
  public static void dataView(string strsql,ref DataView dv)
  {
   DataSet ds = new DataSet();
   SqlDataAdapter da = new SqlDataAdapter();
   try
   {
    openConnection();
    cmd.CommandType = CommandType.Text;
    cmd.CommandText = strsql;
    da.SelectCommand = cmd;
    da.Fill(ds);

    dv = ds.Tables[0].DefaultView;
   }
   catch(Exception e)
   {
    throw new Exception(e.Message);
   }
   finally
   {
    closeConnection();
   }
  }
  #endregion

 }
}

自己写的一个数据访问类

/**//* * 名称:        DataAccessFactory.cs * 命名空间:    Mouse.Tools.Data * 类:            DataAccessFacto...
  • flczlxy
  • flczlxy
  • 2007年04月12日 13:11
  • 982

自己写的String类

1:MyString.h #pragma once class myCString { public: int GetLength()const {return m_nLength;} ...
  • djb100316878
  • djb100316878
  • 2014年12月01日 08:49
  • 1255

java能不能自己写一个类叫java.lang.System/String正确答案

最近学习了下java类加载相关的知识。然后看到网上有一道面试题是 能不能自己写个类叫java.lang.System? 网上提供的答案:通常不可以,但可以采取另类方法达到这个需求。所谓的另类方法指...
  • tang9140
  • tang9140
  • 2015年01月15日 11:03
  • 4052

请高手们帮忙!!!!

 想问一下.... 父窗口是以  USERCONTROL 组合而成的, 在子窗口中写入一些字  点按钮之后 怎样把那些字传给父窗口中USERCONTROL 中的TEXTBOX 里    opener....
  • yqkim
  • yqkim
  • 2007年07月12日 14:55
  • 233

请高手帮忙!

我的系统重装后,系统没有毒和木马,怎么出现上面那副图的那样子,请高手速速帮忙,小弟不甚感激!先谢谢拉!...
  • ceoshunge
  • ceoshunge
  • 2008年04月23日 11:21
  • 146

请高手指教!谢谢!

大家好,请高手指教指教!我已经在学校里面呆了快两年了,专业是软件技术,但是我好象什么都没有学到,对于软件理论是可以的,但是说到亲手去做,我觉得很困难。请问各位高手有什么好的学习方法让我的能力更加提高吗...
  • kyodunlps
  • kyodunlps
  • 2007年03月17日 09:22
  • 259

请高手帮忙!

     写了个老鼠走迷宫的代码,结果准备打印出走之前的地图和走之后的地图,不知道为啥,只输出了前一个,而没有后一个。     好心的人帮我看看是怎么回事,不胜感激。源代码:#include#defi...
  • yulifeifei
  • yulifeifei
  • 2009年07月15日 10:56
  • 136

请高手帮忙~~~

// 编写程序:通过键盘输入若干学生信息(学号,姓名,年龄,考分),保存在文件stu.dat中 #include #include void main() {     int i,j;  ...
  • chenhong339
  • chenhong339
  • 2011年11月21日 14:58
  • 162

请各位高手帮忙!

编写一个Java应用程序,对于给定的一个字符串的集合,格式如:  {aaa bbb ccc}, {bbb ddd},{eee fff},{ggg},{ddd hhh}  要求将其中交集不为空的集合合并...
  • Andy381663213
  • Andy381663213
  • 2008年10月29日 16:17
  • 435

蓝牙问题。请真正的c#高手帮忙?谢谢

.NET高手求救啊?最近开发一个蓝牙的项目。但是遇到了问题一直都无法解决。希望csdn中的 高手尽快帮忙解决啊? 我在网上找了好多的资料和demo,资料上都是说调用系统的api就可以了。 但是我运行的...
  • hou450691196
  • hou450691196
  • 2009年09月19日 10:55
  • 297
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:自己写的一个数据访问类,请高手帮忙看看!谢谢!
举报原因:
原因补充:

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