电信主站 网通分站
购买流程 付款方式 常见问题 在线提问 续租服务 购物车
用户名: 密 码: 忘记密码?
首 页
域名注册
虚拟主机
双线主机
服务器租用
VPS主机
企业邮局
代理专区
客服中心
虚拟主机行业资讯 虚拟主机评测对比 互联网最新动态 技术学院 站长资讯 在线教程 网站运营
搜索优化 服务器 网络编程 图形图象 站长之家 网页制作 操作系统
冲浪宝典 软件教学 视频通信 办公软件 邮件系统 网络安全 认证考试
您当前位置:西部数码->资讯中心-> 在线教程-> 数据库
一个通用数据库访问类(C#,SqlClient)-.NET教程,C#语言
作者:网友供稿 点击:14
  西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!虚拟主机可在线rar解压,自动数据恢复设置虚拟目录等.虚拟主机免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金!
文章页数:[1] 
使用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();
}

}




文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
相关主题
文章页数:[1] 
Google
热门文章
·数据库开发个人总结(ADO.NET小结)-.NET教程,数据库应用
·怎么由DataSet将数据导入Excel?-.NET教程,数据库应用
·动态创建SQL Server数据库、表、存储过程-ASP教程,数据库相关
·Win32环境下动态链接库(DLL)编程原理-.NET教程,数据库应用
·封装的ADO.NET对数据库操作经典类-.NET教程,数据库应用
·在DataGridView中获得DataGridViewCheckBoxColumn的状态-ASP教程,数据库相关
·DataGrid使用心得(附大量代码)-ASP教程,数据库相关
·用代码创建DataGrid的多链接及checkbox事件响应-.NET教程,数据库应用
·ADO.NET 的最佳实践技巧-.NET教程,数据库应用
·转载: 用纯ASP代码实现图片上传并存入数据库中

最新文章
·根据数据表中数据,生成Powerpoint幻灯片-ASP教程,数据库相关
·DataGrid中的按钮反选事件与NamingContainer(命名容器)-downmoon-ASP教程,数据库相关
·使用用VB处理MYSQL数据库中二进制数据问题-.NET教程,VB.Net语言
·关于DataGridView中如何接收处于编辑状态下的当前信息-ASP教程,数据库相关
·在DataGridView中获得DataGridViewCheckBoxColumn的状态-ASP教程,数据库相关
·.net下访问Access数据库需要注意的问题-.NET教程,Asp.Net开发
·ActiveMQ4.1+Spring2.0的POJO JMS方案(上)-.NET教程,数据库应用
·ASP.NET 2.0中直接将Access数据库导入到Excel文件中-.NET教程,Asp.Net开发
·NET(C#)连接各类数据库-集锦-.NET教程,C#语言
·ASP.NET2.0连接SQL Server数据库详解-.NET教程,Asp.Net开发


 
 


版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
  打印  刷新  关闭
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 虚拟主机 | 资讯中心 | 友情链接 | 网站地图

版权所有 西部数码(www.west263.com)
CopyRight (c) 2002~2006 west263.com all right reserved.
公司地址:四川成都市万和路90号天象大厦4楼 邮编:610031
电话总机:028-86262244 86263048 86263408 86263960 86264018 86267838
售前咨询:总机转201 202 203 204 206 208
售后服务:总机转211 212 213 214
财务咨询:总机转224 223 传真:028-86264041 财务QQ:点击发送消息给对方635483282
售前咨询QQ:点击发送消息给对方2182518 点击发送消息给对方241975952 点击发送消息给对方275026793 点击发送消息给对方408235859
售后服务QQ:点击发送消息给对方17708515 点击发送消息给对方307742704 点击发送消息给对方287976517 点击发送消息给对方363783715
《中华人民共和国增值电信业务经营许可证》编号:川B2-20030065号