分享
 
 
 

数据库操作类实现(C#,SqlClient)

王朝c#·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

使用ADO.NET时,每次数据库操作都要设置connection属性、建立connection、使用command、事务处理等,比较繁琐,有很多重复工作。能不能把这些繁琐的、常用的操作再封装一下,以更方便、安全地使用。下面这个类就是一种尝试:

using System;

using System.Data.SqlClient;

using System.Text;

using System.Data;

using System.Collections;

using System.Configuration;

public class DBAccess

{

/// <summary>

/// Declare the ole db required objects

/// </summary>

/// <summary>

/// An ole db adapter to act as the bridge to the database

/// </summary>

private SqlDataAdapter dbDataAdapter;

/// <summary>

/// The connection to the database

/// </summary>

private SqlConnection dbConnection;

/// <summary>

/// The command for doing the inserts

/// </summary>

private SqlCommand dbInsertCommand;

/// <summary>

/// The command for doing the deletes

/// </summary>

private SqlCommand dbDeleteCommand;

/// <summary>

/// The command for doing the updates

/// </summary>

private SqlCommand dbUpdateCommand;

/// <summary>

/// The command for doing the Selects

/// </summary>

private SqlCommand dbSelectCommand;

private SqlCommand dbSelectCommandofAdapter;

/// <summary>

/// The command for get dataset

/// </summary>

private SqlDataAdapter dataAdapterCommand;

/// <summary>

/// The data reader for the application

/// </summary>

public SqlDataReader dbDataReader;

/// <summary>

/// Declare an enum to allow internal tracking of commands

/// </summary>

enum COMMAND{ NONE, INSERT, UPDATE, DELETE, SELECT,DATASET };

/// <summary>

/// Internal member for tracking command progress

/// </summary>

private COMMAND command;

/// <summary>

/// String to hold error messages if a command fails

/// </summary>

private string error;

/// <summary>

/// Get a stored error message if ExecuteCommand fails

/// </summary>

public string ErrorMessage

{

get

{

return error;

}

}

/// <summary>

/// bool holder for is open

/// </summary>

private bool bOpen;

/// <summary>

/// Check to see if a data base is open

/// </summary>

public bool IsOpen

{

get

{

return bOpen;

}

}

/// <summary>

/// Declare a string object for the insert command

/// </summary>

public string InsertCommand

{

get

{

return dbInsertCommand.CommandText;

}

set

{

command = COMMAND.INSERT;

dbInsertCommand.CommandText = value;

}

}

/// <summary>

/// Declare a string object for the delete command

/// </summary>

public string DeleteCommand

{

get

{

return dbDeleteCommand.CommandText;

}

set

{

command = COMMAND.DELETE;

dbDeleteCommand.CommandText = value;

}

}

/// <summary>

/// Declare a string object for the update command

/// </summary>

public string UpdateCommand

{

get

{

return dbUpdateCommand.CommandText;

}

set

{

command = COMMAND.UPDATE;

dbUpdateCommand.CommandText = value;

}

}

/// <summary>

/// Declare a string object for the select command

/// </summary>

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;

}

}

/// <summary>

/// Get the reader from the class

/// </summary>

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;

}

}

/// <summary>

/// Execute the command that has been set up previously

/// </summary>

/// <returns>A boolean value indicating true or false</returns>

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

/// <summary>

/// Get the Select reader from the select command

/// </summary>

private SqlDataReader SelectReader

{

get

{

if( dbDataReader != null )

{

if( dbDataReader.IsClosed == false )

{

dbDataReader.Close();

dbDataReader = null;

}

}

dbDataReader = dbSelectCommand.ExecuteReader();

return dbDataReader;

}

}

/// <summary>

/// Get the Update reader from the update command

/// </summary>

private SqlDataReader UpdateReader

{

get

{

if( dbDataReader.IsClosed == false )

dbDataReader.Close();

dbDataReader = dbSelectCommand.ExecuteReader();

return dbDataReader;

}

}

/// <summary>

/// Get the Insert Reader from the Insert Command

/// </summary>

private SqlDataReader InsertReader

{

get

{

if( dbDataReader.IsClosed == false )

dbDataReader.Close();

dbDataReader = dbSelectCommand.ExecuteReader();

return dbDataReader;

}

}

/// <summary>

/// Get the Delete Reader from the Delete Command

/// </summary>

private SqlDataReader DeleteReader

{

get

{

if( dbDataReader != null )

{

if( dbDataReader.IsClosed == false )

{

dbDataReader.Close();

dbDataReader = null;

}

}

dbDataReader = dbSelectCommand.ExecuteReader();

return dbDataReader;

}

}

#endregion

/// <summary>

/// Standard Constructor

/// </summary>

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;

}

}

/// <summary>

/// Close the currently open connection

/// </summary>

public void Close()

{

if (dbDataReader != null)

{

if( dbDataReader.IsClosed == false )

{

dbDataReader.Close();

dbDataReader = null;

}

}

dbConnection.Close();

}

}

使用示例:

Insert操作,新建用户:

public bool NewUser()

{

DBAccess newUserDBAccess = new DBAccess();

StringBuilder sqlStr = new StringBuilder();

sqlStr.Append( "Insert into userTable(usrName,pwd,name,depart,role,available) values(");

sqlStr.Append( "'" + usrName + "',");

sqlStr.Append( "'" + pwd + "',");

sqlStr.Append( "'" + name + "',");

sqlStr.Append( "'" + depart + "',");

sqlStr.Append( "'" + role + "',");

sqlStr.Append(1);

sqlStr.Append( ")");

newUserDBAccess.InsertCommand = sqlStr.ToString();

newUserDBAccess.Open();

try

{

if (!newUserDBAccess.ExecuteCommand())

{

errMsg = newUserDBAccess.ErrorMessage;

return false;

}

else

{

return true;

}

}

finally

{

newUserDBAccess.Close();

}

}

Update操作,修改用户信息:

public bool ModifyUser()

{

DBAccess modifyUserDBAccess = new DBAccess();

StringBuilder sqlStr = new StringBuilder();

sqlStr.Append( "update userTable set ");

sqlStr.Append( " usrName = ");

sqlStr.Append( "'" + usrName + "',");

sqlStr.Append( " name =");

sqlStr.Append( "'" + name + "',");

sqlStr.Append( " pwd =");

sqlStr.Append( "'" + pwd + "',");

sqlStr.Append( " depart =");

sqlStr.Append( "'" + depart + "',");

sqlStr.Append( " role =");

sqlStr.Append( "'" + role + "'");

sqlStr.Append( " where usrID = ");

sqlStr.Append(id);

modifyUserDBAccess.UpdateCommand = sqlStr.ToString();

modifyUserDBAccess.Open();

try

{

if (!modifyUserDBAccess.ExecuteCommand())

{

errMsg = modifyUserDBAccess.ErrorMessage;

return false;

}

else

{

return true;

}

}

finally

{

modifyUserDBAccess.Close();

}

}

Delete操作,删除用户:

public static bool DelUser(int usrID)

{

DBAccess delUserDBAccess = new DBAccess();

StringBuilder sqlStr = new StringBuilder();

sqlStr.Append( "update userTable set ");

sqlStr.Append( " available =");

sqlStr.Append(0);

sqlStr.Append( " where usrID = ");

sqlStr.Append(usrID);

delUserDBAccess.UpdateCommand = sqlStr.ToString();

delUserDBAccess.Open();

try

{

if (!delUserDBAccess.ExecuteCommand())

{

return false;

}

else

{

return true;

}

}

finally

{

delUserDBAccess.Close();

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有