访问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>
public int ExcuteSql(string str_sql)2
{3
int int_num = 0;4

5
SqlCommand sql_Cm = new SqlCommand(str_sql,sql_Con);6

7
try8
{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
finally22
{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>
public string GetValueBySqlCommand(SqlCommand sql_Cm)2
{3
string str_value = "";4
5
try6
{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
finally19
{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>
public int ExcuteSqlCommand(SqlCommand sql_Cm)2
{3
int int_num = 0;4

5
try6
{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
finally20
{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>
public int ExcuteSqlCommands(SqlCommand[] sql_Cms)2
{//--73
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
try9
{//--110
sql_Con.Open();//打开链接11
cm_begin.ExecuteNonQuery();//开始事务12
}//--113
catch(SqlException e)14
{//--215
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
}//--221
if(IsOpen)22
{//--323
bool AllSeccess = true;//全部执行成功24
for(int i=0;i<sql_Cms.Length && AllSeccess;i++)25
{//--426
try27
{//--528
int_num += sql_Cms[i].ExecuteNonQuery();29
}//--530
catch(SqlException e)31
{//--632
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
}//--639

40
}//--441
if(AllSeccess)//如果全部执行成功42
cm_commit.ExecuteNonQuery();//提交任务43
this.sql_Con.Close();44
}//--345
return int_num;46
}//--747
#endregion48

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>
public 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>
public 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>
public DataSet GetDataSetByCommand(SqlCommand sqlCmd)2
{3
SqlDataAdapter sql_adp = new SqlDataAdapter(sqlCmd);4
5
DataSet ds = new DataSet();6

7
try8
{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
finally21
{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>
public SqlDataReader GetSqlDataReaderByCommand(SqlCommand sqlCmd)2
{3
SqlDataReader sql_dr;4
try5
{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
finally14
{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>
public SqlCommand GetSqlCmdForProc(string Proc)2
{3
SqlCommand sqlCm = new SqlCommand(Proc,this.SqlCon);4
sqlCm.CommandType = CommandType.StoredProcedure;5
return sqlCm;6
}7
#endregion8

}
}

浙公网安备 33010602011771号