基于SQLServer的数据层基类C#源码

/*****************************************************

* 文 件 名:DBObject.cs

* 功能描述:定义数据层基类。

* 创 建 人:夏春涛 xchuntao@163.com qq:23106676

* 创建时间:2004-08-11 11:05

*****************************************************/

using System;

using System.Data;

using System.Data.SqlClient;

using System.Configuration;

namespace XD.XLB.JBC.JBInfo.WebModules.Data

{

/// <summary>

/// 数据层基类,提供对底层数据的基本操作

/// </summary>

public class DBObject

{

private SqlConnection connection;

#region 构造函数

/// <summary>

/// 构造函数,初始化数据连接对象

/// </summary>

public DBObject()

{

string connectionString = ConfigurationSettings.AppSettings.Get("ConnectionString");//从Web.Config中取得的连接字符串

connection = new SqlConnection(connectionString);

}

/// <summary><table >

/// <tr><td><b>功能描述</b>:构造函数,根据指定的数据连接字符串,初始化数据连接对象</td></tr>

/// <tr><td><b>创 建 人</b>:夏春涛 </td></tr>

/// <tr><td><b>创建时间</b>:2005-05-28 </td></tr>

/// </table></summary>

/// <param name="newConnectionString">数据连接字符串</param>

public DBObject( string newConnectionString )

{

string connectionString = newConnectionString;

connection = new SqlConnection( connectionString );

}

#endregion

/// <summary>

/// 数据连接对象(只读)

/// </summary>

public SqlConnection Connection

{

get

{

return connection;

}

set

{

connection = value;

}

}

//-----------------------------------------------------------------------------------------

//以下是从《ASP.Net Web站点高级编程》中Copy的(夏春涛)------------------------------------

//-----------------------------------------------------------------------------------------

/// <summary>

/// 创建一个SqlCommand对象,用于获取存储过程的返回值

/// </summary>

/// <param name="storedProcName">存储过程名称</param>

/// <param name="parameters">存储过程的参数对象列表(数组)</param>

/// <returns>SqlCommand对象</returns>

private SqlCommand BuildIntCommand(string storedProcName, IDataParameter[] parameters)

{

SqlCommand command = BuildQueryCommand( storedProcName, parameters );

command.Parameters.Add( new SqlParameter ( "ReturnValue",

SqlDbType.Int,

4, /* Size */

ParameterDirection.ReturnValue,

false, /* is nullable */

0, /* byte precision */

0, /* byte scale */

string.Empty,

DataRowVersion.Default,

null ));

return command;

}

/// <summary>

/// 创建一个SqlCommand对象,用于生成SqlDataReader

/// </summary>

/// <param name="storedProcName">存储过程名称</param>

/// <param name="parameters">存储过程的参数对象列表(数组)</param>

/// <returns>SqlCommand对象</returns>

private SqlCommand BuildQueryCommand(string storedProcName, IDataParameter[] parameters)

{

SqlCommand command = new SqlCommand( storedProcName, connection );

command.CommandType = CommandType.StoredProcedure;

foreach (SqlParameter parameter in parameters)

{

command.Parameters.Add( parameter );

}

return command;

}

/// <summary>

/// 运行存储过程,获取影响数,返回存储过程运行结果

/// </summary>

/// <param name="storedProcName">存储过程名称</param>

/// <param name="parameters">存储过程的参数对象列表(数组)</param>

/// <param name="rowsAffected">出参:执行存储过程所影响的记录行数</param>

/// <returns>存储过程的运行结果</returns>

public object RunProcedure(string storedProcName, IDataParameter[] parameters, out int rowsAffected )

{

object result;

if(connection.State.ToString() == "Closed")

connection.Open();

SqlCommand command = BuildIntCommand( storedProcName, parameters );

rowsAffected = command.ExecuteNonQuery();

result = command.Parameters["ReturnValue"].Value;

connection.Close();

return result;

}

/// <summary>

/// 运行存储过程,返回产生的SqlDataReader对象

/// </summary>

/// <param name="storedProcName">存储过程名称</param>

/// <param name="parameters">存储过程的参数对象列表(数组)</param>

/// <returns>SqlDataReader对象</returns>

public SqlDataReader RunProcedure(string storedProcName, IDataParameter[] parameters )

{

SqlDataReader returnReader;

connection.Open();

SqlCommand command = BuildQueryCommand( storedProcName, parameters );

command.CommandType = CommandType.StoredProcedure;

returnReader = command.ExecuteReader();

//connection.Close();

return returnReader;

}

/// <summary>

/// 运行存储过程,创建一个DataSet对象,

/// 将运行结果存入指定的DataTable中,返回DataSet对象

/// </summary>

/// <param name="storedProcName">存储过程名称</param>

/// <param name="parameters">存储过程的参数对象列表(数组)</param>

/// <param name="tableName">数据表名称</param>

/// <returns>DataSet对象</returns>

public DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName )

{

DataSet dataSet = new DataSet();

connection.Open();

SqlDataAdapter sqlDA = new SqlDataAdapter();

sqlDA.SelectCommand = BuildQueryCommand( storedProcName, parameters );

sqlDA.Fill( dataSet, tableName );

connection.Close();

return dataSet;

}

/// <summary>

/// 运行存储过程,将运行结果存入已有DataSet对象的指定表中,无返回值

/// </summary>

/// <param name="storedProcName">存储过程名称</param>

/// <param name="parameters">存储过程的参数对象列表(数组)</param>

/// <param name="dataSet">DataSet对象</param>

/// <param name="tableName">数据表名称</param>

public void RunProcedure(string storedProcName, IDataParameter[] parameters, DataSet dataSet, string tableName )

{

connection.Open();

SqlDataAdapter sqlDA = new SqlDataAdapter();

sqlDA.SelectCommand = BuildIntCommand( storedProcName, parameters );

sqlDA.Fill( dataSet, tableName );

connection.Close();

}

//-----------------------------------------------------------------------------------------

//以下是自建的(夏春涛)-------------------------------------------------------------------

//-----------------------------------------------------------------------------------------

/// <summary>

/// 运行与写数据库相关的SQL语句,返回影响行数**********************************************

/// </summary>

/// <param name="sqlString">SQL语句</param>

/// <returns>影响行数</returns>

public int ExeNonQuery(string sqlString)

{

int RowAffected;

if(connection.State.ToString() == "Closed")

connection.Open();

SqlCommand command = new SqlCommand( sqlString, connection );

RowAffected = command.ExecuteNonQuery();

//connection.Close();

return RowAffected;

}

/// <summary>

/// 运行SQL语句,返回SqlDataReader对象

/// </summary>

/// <param name="sqlString">SQL语句</param>

/// <returns>SqlDataReader对象</returns>

public SqlDataReader ExeSqlString(string sqlString)

{

SqlDataReader returnReader;

if(connection.State.ToString() == "Closed")

connection.Open();

SqlCommand command = new SqlCommand( sqlString, connection );

returnReader = command.ExecuteReader();

//connection.Close();

return returnReader;

}

/// <summary>

/// 运行SQL语句,返回DataSet对象

/// </summary>

/// <param name="string">SQL语句</param>

/// <param name="tableName">数据表名称</param>

/// <returns>DataSet对象</returns>

public DataSet ExeSqlString(string sqlString, string tableName )

{

DataSet dataSet = new DataSet();

if (connection.State.ToString() == "Closed")

connection.Open();

SqlDataAdapter sqlDA = new SqlDataAdapter();

sqlDA.SelectCommand = new SqlCommand( sqlString, connection );

sqlDA.Fill( dataSet, tableName );

connection.Close();

return dataSet;

}

/// <summary>

/// 运行SQL语句,将运行结果存入已有DataSet对象的指定表中,无返回值

/// </summary>

/// <param name="sqlString">SQL语句</param>

/// <param name="dataSet">DataSet对象</param>

/// <param name="tableName">数据表名称</param>

public void ExeSqlString(string sqlString, DataSet dataSet, string tableName )

{

if (connection.State.ToString() == "Closed")

connection.Open();

SqlDataAdapter sqlDA = new SqlDataAdapter();

sqlDA.SelectCommand = new SqlCommand( sqlString, connection );

sqlDA.Fill( dataSet, tableName );

connection.Close();

}

/// <summary>

/// 运行SQL语句,返回查询结果的第一行的第一列,忽略其它行或列

/// </summary>

/// <param name="sqlString">SQL语句</param>

/// <returns>影响行数</returns>

public object ExeScalar(string sqlString)

{

object returnScalar;

if (connection.State.ToString() == "Closed")

connection.Open();

SqlCommand command = new SqlCommand( sqlString, connection );

returnScalar = command.ExecuteScalar();

//connection.Close();

return returnScalar;

}

~DBObject()

{

if(connection.State.ToString() == "Open")

connection.Close();

connection.Dispose();

}

}

}