访问Sql Server数据库的基类


/************************************************************
 * 类名: Base_SqlDataBase
 * 功能:这是一个访问Sql Server数据库的基类
 * **********************************************************/


using System;
using System.Data;
using System.Configuration;
using System.Data.SqlClient;
using System.Collections;
namespace GYYW.DA.KFGL
{
 
 /// <summary>
 /// **********************************************************************************************
 ///* *功能描述:1.这是一个访问Sql Server数据库的基类,在其他的的类里调用它去访问数据库。         *
 ///             2.可以通过自定义的页面抛出异常信息。                                             *
 ///* *使用说明:1.要在Web.Config中配置数据库的连接字符串strConnection                            *
 ///*         2.在项目中定义一个DataBaseError.aspx的页面,从利用         *
 ///*     Request.QueryString["str_error"]读取错误信息,并将其显示到页面上               *
 ///*            3.对数据库进行操作时仅需要传入相应的SQL语句作为参数即可完成操作                  *
 ///*            4.该类将数据库连接串作为一个属性——SqlCon,用户可以得到它。                     *
 /// **********************************************************************************************      
 /// </summary>
 public class Base_SqlDataBase
 {
  
  private string str_dbcon;
  //数据库连接字符串
  private SqlConnection sql_Con;
  //数据库联接串
  public Base_SqlDataBase()
  {
   str_dbcon =  ConfigurationSettings.AppSettings["SqlConnectionString"].ToString();
   sql_Con = new SqlConnection(str_dbcon);
  }


  /// <summary>
  ///SqlConnection: 得到SQL Server的数据库连接串
  /// </summary>
  public SqlConnection SqlCon
  {
   get
   {
    return sql_Con;
   }
  }

  /// <summary>
  /// *描述:通过Sql语句返回DataSet
  /// </summary>
  /// <param name="str_sql">string:Sql语句</param>
  /// <returns>DataSet:要返回的数据集</returns>
 

 public DataSet GetDataSetBySql(string str_sql)
  
{
   
   SqlDataAdapter sql_adp 
= new SqlDataAdapter(str_sql,sql_Con);
   
   DataSet ds 
= new DataSet();

   
try
   
{
    sql_Con.Open();
    sql_adp.Fill(ds);

   }

   
catch(SqlException e)
   
{
    
throw new Exception(e.Message);
//    string str_err = e.Message.ToString().Replace("\r\n","   ");
//    
//    System.Web.HttpContext.Current.Response.Redirect("../DataBaseError.aspx?str_error=" + str_err);
   }

   
finally
   
{
    sql_Con.Close();
    sql_adp.Dispose();
   }


   
return ds;
  }
//public DataSet GetDataSetBySql(string str_sql)


  /// <summary>
  /// *描述:通过Sql语句得到某一具体的值
  /// </summary>
  /// <param name="str_sql"></param>
  /// <returns></returns>
  

public string GetValueBySql(string str_sql)
  
{
   SqlCommand sql_Cm 
= new SqlCommand(str_sql,sql_Con);
   
string str_value = "";
   
   
try
   
{
    sql_Con.Open();
    SqlDataReader sql_dreader 
= sql_Cm.ExecuteReader();
    
if(sql_dreader.Read())
     str_value 
= sql_dreader[0].ToString();
   }

   
catch(SqlException e)
   
{
    
throw new Exception(e.Message);
//    string str_err = e.Message.ToString().Replace("\r\n","   ");
//    System.Web.HttpContext.Current.Response.Redirect("../DataBaseError.aspx?str_error=" + str_err);
   }

   
finally
   
{
    sql_Con.Close();
    sql_Cm.Dispose();
   }

   
   
   
return str_value;

  }
//public string GetValueBySql(string str_sql)

 

  /// <summary>
  /// *描述:执行一条SQL语句
  /// </summary>
  /// <param name="str_sql">string:要执行的SQL语句</param>
  /// <returns>int:返回执行的行数</returns>
  

 1public int ExcuteSql(string str_sql)
 2  {
 3   int int_num = 0;
 4
 5   SqlCommand sql_Cm = new SqlCommand(str_sql,sql_Con);
 6
 7   try
 8   {
 9    sql_Con.Open();
10    int_num = sql_Cm.ExecuteNonQuery();
11
12   }

13   catch(SqlException e)
14   {
15    throw new Exception(e.Message);
16//    string str_err = e.Message.ToString().Replace("\r\n","   ");
17//    string str_num = "共执行" + int_num.ToString() + "条记录";
18//    System.Web.HttpContext.Current.Response.Redirect("../DataBaseError.aspx?str_error=" + str_err + str_num);
19   }

20  
21   finally
22   {
23    sql_Con.Close();
24    sql_Cm.Dispose();
25   }

26   return int_num;
27  }
//public int ExcuteSql(string str_sql)
28
29


  /// <summary>
  /// *描述:执行一组放在ArrayList中的SQL语句
  /// </summary>
  /// <param name="arr_sqls">ArrayList Sql语句集</param>
  /// <returns>int:执行的行数</returns>
 

 public int ExcuteSqls(ArrayList arr_sqls)
  
{
   
int int_num = 0;
   
   
for(int i=0;i<arr_sqls.Count;i++)
   
{
    SqlCommand sql_Cm 
= new SqlCommand(arr_sqls[i].ToString(),sql_Con);
    
try
    
{
     sql_Con.Open();
     int_num 
= int_num + sql_Cm.ExecuteNonQuery();

    }

    
catch(SqlException e)
    
{
     
throw new Exception(e.Message);
//     string str_err = e.Message.ToString().Replace("\r\n","   ");
//     string str_num = "执行到第" + i.ToString() + "条SQL语句";
//     System.Web.HttpContext.Current.
//      Response.Redirect("../DataBaseError.aspx?str_error=" + str_err + str_num);
    }

  
    
finally
    
{
     sql_Con.Close();
     sql_Cm.Dispose();
    }

   }
//for(int i=0;i<arr_sqls.Count;i++)
   return int_num;
  }
//public int ExcuteSqls(ArrayList arr_sqls)


  /// <summary>
  /// *描述: 通过SqlCommand返回一个值
  /// </summary>
  /// <param name="sql_Cm">SqlCommand SqlCommand对象</param>
  /// <returns>string 要查询的值</returns>
  

 1public string GetValueBySqlCommand(SqlCommand sql_Cm)
 2  {
 3   string str_value = "";
 4   
 5   try
 6   {
 7    sql_Con.Open();
 8    SqlDataReader sql_dreader = sql_Cm.ExecuteReader();
 9    if(sql_dreader.Read())
10     str_value = sql_dreader[0].ToString();
11   }

12   catch(SqlException e)
13   {
14    throw new Exception(e.Message);
15//    string str_err = e.Message.ToString().Replace("\r\n","   ");
16//    System.Web.HttpContext.Current.Response.Redirect("../DataBaseError.aspx?str_error=" + str_err);
17   }

18   finally
19   {
20    sql_Con.Close();
21    sql_Cm.Dispose();
22   }

23   
24   
25   return str_value;
26  }
//GetValueBuSqlCommand(SqlCommand sql_Cm)
27


  #region 执行SqlCommand对象

  /// <summary>
  /// 描述:执行一个SqlCommand对象,返回执行的纪录条数
  /// </summary>
  /// <param name="sql_Cm">SqlCommand</param>
  /// <returns>int 返回执行的纪录条数</returns>
  

 1public int ExcuteSqlCommand(SqlCommand sql_Cm)
 2  {
 3   int int_num = 0;
 4
 5   try
 6   {
 7    sql_Con.Open();
 8    int_num = sql_Cm.ExecuteNonQuery();
 9
10   }

11   catch(SqlException e)
12   {
13    throw new Exception(e.Message);
14//    string str_err = e.Message.ToString().Replace("\r\n","   ");
15//    string str_num = "共执行" + int_num.ToString() + "条记录";
16//    System.Web.HttpContext.Current.Response.Redirect("../DataBaseError.aspx?str_error=" + str_err + str_num);
17   }

18  
19   finally
20   {
21    sql_Con.Close();
22    sql_Cm.Dispose();
23   }

24   return int_num;
25  }
//ExcuteSqlCommand(SqlCommand sql_Cm)
26
27

  /// <summary>
  /// 描述:执行一组SqlCommand对象,当其中一个出现错误时,全部回滚
  /// </summary>
  /// <param name="sql_Cms">SqlCommand[] SqlCommand对象数组</param>
  /// <returns>返回任务执行记录数</returns>
  

 1public int ExcuteSqlCommands(SqlCommand[] sql_Cms)
 2  {//--7
 3   int int_num = 0;
 4   SqlCommand cm_begin = new SqlCommand("BEGIN TRAN CMS",this.sql_Con);//开始任务对象
 5   SqlCommand cm_rollback = new SqlCommand("ROLLBACK TRAN CMS",this.sql_Con);//任务回滚对象
 6   SqlCommand cm_commit = new SqlCommand("COMMIT TRAN CMS",this.sql_Con);//提交任务对象
 7   bool IsOpen = true;//判断是否打开链接
 8   try
 9   {//--1
10    sql_Con.Open();//打开链接
11    cm_begin.ExecuteNonQuery();//开始事务
12   }
//--1
13   catch(SqlException e)
14   {//--2
15    IsOpen = false;//说明链接打开失败
16    throw new Exception(e.Message);
17    //    string str_err = e.Message.ToString().Replace("\r\n","   ");
18    //    string str_num = "共执行" + int_num.ToString() + "条记录";
19    //    System.Web.HttpContext.Current.Response.Redirect("../DataBaseError.aspx?str_error=" + str_err + str_num);
20   }
//--2
21   if(IsOpen)
22   {//--3
23    bool AllSeccess = true;//全部执行成功
24    for(int i=0;i<sql_Cms.Length && AllSeccess;i++)
25    {//--4
26     try
27     {//--5
28      int_num += sql_Cms[i].ExecuteNonQuery();
29     }
//--5
30     catch(SqlException e)
31     {//--6
32      cm_rollback.ExecuteNonQuery();//任务回滚
33      AllSeccess = false;//说明有command对象执行失败
34      throw new Exception(e.Message);
35      //    string str_err = e.Message.ToString().Replace("\r\n","   ");
36      //    string str_num = "共执行" + int_num.ToString() + "条记录";
37      //    System.Web.HttpContext.Current.Response.Redirect("../DataBaseError.aspx?str_error=" + str_err + str_num);
38     }
//--6
39
40    }
//--4
41    if(AllSeccess)//如果全部执行成功
42     cm_commit.ExecuteNonQuery();//提交任务
43    this.sql_Con.Close();
44   }
//--3
45   return int_num;
46  }
//--7
47  #endregion
48
49

 

  /// <summary>
  /// 描述:为SqlCommand对象添加参数
  /// </summary>
  /// <param name="sqlCmd">SqlCommand </param>
  /// <param name="sqlType">SqlDbType 参数的数据类型</param>
  /// <param name="parameter">string 参数</param>
  /// <param name="pvalue">object 参数的值</param>
  /// <returns>bool 添加是否成功</returns>
  

1public void AddInParameterForCommand(SqlCommand sqlCmd,SqlDbType sqlType,string parameter,object pvalue)
2  {
3   SqlParameter sqlPara = new SqlParameter(parameter,sqlType);
4   sqlPara.Value = pvalue;
5   sqlCmd.Parameters.Add(sqlPara);
6
7  }
//AddParameterForCommand(SqlCommand sqlCmd,SqlDbType,sqlType,string parameter,object value)
8
9


  /// <summary>
  /// 描述:为SqlCommand对象添加参数
  /// </summary>
  /// <param name="sqlCmd">SqlCommand </param>
  /// <param name="sqlType">SqlDbType 参数的数据类型</param>
  /// <param name="parameter">string 参数</param>
  /// <param name="pvalue">object 参数的值</param>
  /// <returns>SqlParameter 要返回值得SqlParameter对象</returns>
  

 1public SqlParameter AddOutParameterForCommand(SqlCommand sqlCmd,SqlDbType sqlType,string parameter,int size)
 2  {
 3   SqlParameter sqlPara = new SqlParameter(parameter,sqlType,size);
 4   sqlPara.Direction = ParameterDirection.Output;
 5   sqlCmd.Parameters.Add(sqlPara);
 6   return sqlPara;
 7
 8  }
//AddParameterForCommand(SqlCommand sqlCmd,SqlDbType,sqlType,string parameter,object value)
 9
10


  /// <summary>
  /// 描述:根据SqlCommand对象得到DataSet
  /// </summary>
  /// <param name="sqlCmd">SqlCommand Command对象</param>
  /// <returns>DataSet</returns>
 

 1 public DataSet GetDataSetByCommand(SqlCommand sqlCmd)
 2  {
 3   SqlDataAdapter sql_adp = new SqlDataAdapter(sqlCmd);
 4   
 5   DataSet ds = new DataSet();
 6
 7   try
 8   {
 9    sql_Con.Open();
10    sql_adp.Fill(ds);
11
12   }

13   catch(SqlException e)
14   {
15    throw new Exception(e.Message);
16//    string str_err = e.Message.ToString().Replace("\r\n","   ");
17//    
18//    System.Web.HttpContext.Current.Response.Redirect("../DataBaseError.aspx?str_error=" + str_err);
19   }

20   finally
21   {
22    sql_Con.Close();
23    sql_adp.Dispose();
24   }

25
26   return ds;
27  
28  }

29
30

  /// <summary>
  /// 描述:根据SqlCommand对象得到SqlDataReader
  /// </summary>
  /// <param name="sqlCmd">SqlCommand Command对象</param>
  /// <returns>SqlDataReader</returns>
  

 1public SqlDataReader GetSqlDataReaderByCommand(SqlCommand sqlCmd)
 2  {
 3   SqlDataReader sql_dr;
 4   try
 5   {
 6    sql_Con.Open();
 7    sql_dr = sqlCmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
 8   }

 9   catch(SqlException e)
10   {
11    throw new Exception(e.Message);
12   }

13   finally
14   {
15    sqlCmd.Dispose();
16   }

17
18   return sql_dr;
19  }

20
21

  #region 为执行存储过程准备SqlCommand对象
  /// <summary>
  /// 2005-9-25 15:49
  /// </summary>
  /// <param name="Proc">string 存储过程名</param>
  /// <returns>SqlCommand对象</returns>
 

1 public SqlCommand GetSqlCmdForProc(string Proc)
2  {
3   SqlCommand sqlCm = new SqlCommand(Proc,this.SqlCon);
4   sqlCm.CommandType = CommandType.StoredProcedure;
5   return sqlCm;
6  }

7  #endregion
8

  

 }
}

posted on 2006-03-07 10:43  小肠与小豆子  阅读(258)  评论(0)    收藏  举报

导航