www.pudn.com > DBAccess00.rar > DBAccess.cs


using System;  
using System.Data.SqlClient;  
using System.Text;  
using System.Data;  
using System.Collections;  
using System.Configuration;  
 
 
public class DBAccess  
{  
	///   
	/// Declare the ole db required objects  
	///   
 
 
	///   
	/// An ole db adapter to act as the bridge to the database  
	///   
	private SqlDataAdapter dbDataAdapter;  
	///   
	/// The connection to the database  
	///   
	private SqlConnection dbConnection;  
	///   
	/// The command for doing the inserts  
	///   
	private SqlCommand dbInsertCommand;  
	///   
	/// The command for doing the deletes  
	///   
	private SqlCommand dbDeleteCommand;  
	///   
	/// The command for doing the updates  
	///   
	private SqlCommand dbUpdateCommand;  
	///   
	/// The command for doing the Selects  
	///   
	private SqlCommand dbSelectCommand;  
 
	private SqlCommand dbSelectCommandofAdapter;  
 
	///   
	/// The command for get dataset  
	///   
	private SqlDataAdapter dataAdapterCommand;  
 
	///   
	/// The data reader for the application  
	///   
	public SqlDataReader dbDataReader;  
 
 
	///   
	/// Declare an enum to allow internal tracking of commands  
	///   
	enum COMMAND{ NONE, INSERT, UPDATE, DELETE, SELECT,DATASET };  
 
	///   
	/// Internal member for tracking command progress  
	///   
	private COMMAND command;  
 
	///   
	/// String to hold error messages if a command fails  
	///   
	private string error;  
 
	///   
	/// Get a stored error message if ExecuteCommand fails  
	///   
	public string ErrorMessage  
	{  
		get  
		{  
			return error;  
		}  
	}  
 
	///   
	/// bool holder for is open  
	///   
	private bool bOpen;  
 
	///   
	/// Check to see if a data base is open  
	///   
	public bool IsOpen  
	{  
		get  
		{  
			return bOpen;  
		}  
	}  
 
 
	///   
	/// Declare a string object for the insert command  
	///   
	public string InsertCommand  
	{  
		get  
		{  
			return dbInsertCommand.CommandText;  
		}  
		set  
		{  
			command = COMMAND.INSERT;  
			dbInsertCommand.CommandText = value;  
		}  
	}  
 
	///   
	/// Declare a string object for the delete command  
	///   
	public string DeleteCommand  
	{  
		get  
		{  
			return dbDeleteCommand.CommandText;  
		}  
		set  
		{  
			command = COMMAND.DELETE;  
			dbDeleteCommand.CommandText = value;  
		}  
	}  
 
	///   
	/// Declare a string object for the update command  
	///   
	public string UpdateCommand  
	{  
		get  
		{  
			return dbUpdateCommand.CommandText;  
		}  
		set  
		{  
			command = COMMAND.UPDATE;  
			dbUpdateCommand.CommandText = value;  
		}  
	}  
 
	///   
	/// Declare a string object for the select command  
	///   
	public string SelectCommand  
	{  
		get  
		{  
			return dbSelectCommand.CommandText;  
		}  
		set  
		{  
			command = COMMAND.SELECT;  
			dbSelectCommand.CommandText = value;  
		}  
	}  
 
	public string SelectDataSetCommand  
	{  
		get  
		{  
			return dataAdapterCommand.SelectCommand.CommandText;  
		}  
		set  
		{  
			command = COMMAND.DATASET;  
			dataAdapterCommand.SelectCommand.CommandText = value;  
		}  
	}  
 
	///   
	/// Get the reader from the class  
	///   
	public SqlDataReader GetReader  
	{  
		get  
		{  
			switch( command )  
			{  
				case COMMAND.NONE: return null;  
				case COMMAND.DELETE: return DeleteReader;  
				case COMMAND.INSERT: return InsertReader;  
				case COMMAND.SELECT: return SelectReader;  
				case COMMAND.UPDATE: return UpdateReader;  
				default: return null;  
			}  
		}  
	}  
 
	public DataSet GetDataSet  
	{  
		get  
		{  
			switch( command )  
			{  
				case COMMAND.DATASET: return SelectDataSet();  
				default: return null;  
			}  
		}  
	}  
 
	public DataSet SelectDataSet()  
	{  
		try  
		{  
			dataAdapterCommand.SelectCommand.Connection = dbConnection;  
			DataSet dataset = new DataSet();  
			dataAdapterCommand.Fill(dataset);  
			return dataset;  
		}  
		catch (Exception exp)  
		{  
			error = exp.Message;  
			return null;  
		}  
 
	}  
 
	///   
	/// Execute the command that has been set up previously  
	///   
	/// A boolean value indicating true or false  
	public bool ExecuteCommand()  
	{  
		bool bReturn = false;  
		if( command == COMMAND.NONE )  
		{  
			return bReturn;  
		}  
		else if( command == COMMAND.SELECT )  
		{  
			/// select only returns true as the get reader function will  
			/// execute the command  
 
			try  
			{  
				if( dbDataReader != null )  
				{  
					dbDataReader.Close();  
					dbDataReader = null;  
				}  
 
				bReturn = true;  
				/// return bReturn;  
			}  
			catch( SqlException exp )  
			{  
				error = "dbException thrown when trying to Select, error given = " + exp.Message + " check the sql";  
				return bReturn = false;  
			}  
 
		}  
		else if( command == COMMAND.DATASET )  
		{  
			return bReturn;  
		}  
		else  
		{  
			int nAffected = -1;  
 
			if( dbDataReader != null )  
			{  
				dbDataReader.Close();  
				dbDataReader = null;  
			}  
 
			/// get the transaction object from the connection  
			SqlTransaction trans = dbConnection.BeginTransaction();  
 
			try  
			{  
				/// create a nested transaction on the connection transaction  
				switch( command )  
				{  
					case COMMAND.DELETE: dbDeleteCommand.Transaction = trans; break;  
					case COMMAND.INSERT: dbInsertCommand.Transaction = trans; break;  
					case COMMAND.UPDATE: dbUpdateCommand.Transaction = trans; break;  
				}  
 
 
				/// execute the command  
				switch( command )  
				{  
					case COMMAND.DELETE: nAffected = dbDeleteCommand.ExecuteNonQuery(); break;  
					case COMMAND.INSERT: nAffected = dbInsertCommand.ExecuteNonQuery(); break;  
					case COMMAND.UPDATE: nAffected = dbUpdateCommand.ExecuteNonQuery(); break;  
				}  
 
			}  
			catch( InvalidOperationException ioexp )  
			{  
				StringBuilder buildError = new StringBuilder();  
				buildError.Append( "InvalidOperationException thrown when trying to " );  
 
				switch( command )  
				{  
					case COMMAND.DELETE: buildError.Append( "Delete" ); break;  
					case COMMAND.INSERT: buildError.Append( "Insert" ); break;  
					case COMMAND.UPDATE: buildError.Append( "Update" ); break;  
				}  
 
				buildError.Append( ", error given = " + ioexp.Message + " check the sql" );  
 
				error = buildError.ToString();  
 
				return bReturn = false;  
			}  
			catch( SqlException dbexp )  
			{  
				StringBuilder buildError = new StringBuilder();  
				buildError.Append( "InvalidOperationException thrown when trying to " );  
 
				switch( command )  
				{  
					case COMMAND.DELETE: buildError.Append( "Delete" ); break;  
					case COMMAND.INSERT: buildError.Append( "Insert" ); break;  
					case COMMAND.UPDATE: buildError.Append( "Update" ); break;  
				}  
 
				buildError.Append( ", error given = " + dbexp.Message + " check the sql" );  
 
				error = buildError.ToString();  
 
				return bReturn = false;  
			}  
			finally  
			{  
				/// commit the command  
				if( nAffected == 1 )  
				{  
					switch( command )  
					{  
						case COMMAND.DELETE: dbDeleteCommand.Transaction.Commit(); break;  
						case COMMAND.INSERT: dbInsertCommand.Transaction.Commit(); break;  
						case COMMAND.UPDATE: dbUpdateCommand.Transaction.Commit(); break;  
					}  
 
					//trans.Commit();  
 
					bReturn = true;  
				}  
				else /// if something went wrong rollback  
				{  
					switch( command )  
					{  
						case COMMAND.DELETE: dbDeleteCommand.Transaction.Rollback(); break;  
						case COMMAND.INSERT: dbInsertCommand.Transaction.Rollback(); break;  
						case COMMAND.UPDATE: dbUpdateCommand.Transaction.Rollback(); break;  
					}  
 
					//trans.Rollback();  
 
					bReturn = false;  
				}  
			}  
		}  
 
		return bReturn;  
	}  
 
 
	#region select functions  
 
	///   
	/// Get the Select reader from the select command  
	///   
	private SqlDataReader SelectReader  
	{  
		get  
		{  
			if( dbDataReader != null )  
			{  
				if( dbDataReader.IsClosed == false )  
				{  
					dbDataReader.Close();  
					dbDataReader = null;  
				}  
			}  
 
			dbDataReader = dbSelectCommand.ExecuteReader();  
			return dbDataReader;  
		}  
	}  
 
	///   
	/// Get the Update reader from the update command  
	///   
	private SqlDataReader UpdateReader  
	{  
		get  
		{  
			if( dbDataReader.IsClosed == false )  
				dbDataReader.Close();  
 
			dbDataReader = dbSelectCommand.ExecuteReader();  
			return dbDataReader;  
		}  
	}  
 
	///   
	/// Get the Insert Reader from the Insert Command  
	///   
	private SqlDataReader InsertReader  
	{  
		get  
		{  
			if( dbDataReader.IsClosed == false )  
				dbDataReader.Close();  
 
			dbDataReader = dbSelectCommand.ExecuteReader();  
			return dbDataReader;  
		}  
	}  
 
	///   
	/// Get the Delete Reader from the Delete Command  
	///   
	private SqlDataReader DeleteReader  
	{  
		get  
		{  
			if( dbDataReader != null )  
			{  
				if( dbDataReader.IsClosed == false )  
				{  
					dbDataReader.Close();  
					dbDataReader = null;  
				}  
			}  
 
			dbDataReader = dbSelectCommand.ExecuteReader();  
			return dbDataReader;  
		}  
	}  
 
	#endregion  
 
 
	///   
	/// Standard Constructor  
	///   
	public DBAccess()  
	{  
		/// NOTE That we are not setting the commands up the way the wizard would  
		/// but building them more generically  
 
		// create the command variables  
		dbDataAdapter = new SqlDataAdapter();  
		dbConnection = new SqlConnection();  
		dbSelectCommand = new SqlCommand();  
		dbDeleteCommand = new SqlCommand();  
		dbUpdateCommand = new SqlCommand();  
		dbInsertCommand = new SqlCommand();  
 
		/// set up the adapter  
		dbDataAdapter.DeleteCommand = dbDeleteCommand;  
		dbDataAdapter.InsertCommand = dbInsertCommand;  
		dbDataAdapter.SelectCommand = dbSelectCommand;  
		dbDataAdapter.UpdateCommand = dbUpdateCommand;  
 
		/// make sure everyone knows what conection to use  
		dbSelectCommand.Connection = dbConnection;  
		dbDeleteCommand.Connection = dbConnection;  
		dbUpdateCommand.Connection = dbConnection;  
		dbInsertCommand.Connection = dbConnection;  
 
		command = COMMAND.NONE;  
		dbDataReader = null;  
 
		dbSelectCommandofAdapter = new SqlCommand();  
		dataAdapterCommand = new SqlDataAdapter();  
		dataAdapterCommand.SelectCommand = dbSelectCommandofAdapter;  
	}  
 
	public void Open()  
	{  
		/// set up the connection string  
		StringBuilder strBuild = new StringBuilder();  
 
		//Connection的属性从配置文件读取  
		strBuild.AppendFormat(ConfigurationSettings.AppSettings["DBConnection"]);  
 
		dbConnection.ConnectionString = strBuild.ToString();  
 
		try  
		{  
			dbConnection.Open();  
			bOpen = true;  
		}  
		catch (Exception exp)  
		{  
			error = exp.Message;  
		}  
 
 
	}  
 
 
	///   
	/// Close the currently open connection  
	///   
	public void Close()  
	{  
		if (dbDataReader != null)  
		{  
			if( dbDataReader.IsClosed == false )  
			{  
				dbDataReader.Close();  
				dbDataReader = null;  
			}  
		}  
 
		dbConnection.Close();  
	}  
 
}