ASP.NET对SQLServer的通用数据库访问类
程序员文章站
2023-12-17 22:39:52
本文模仿实现数据库访问的通用类,代码清晰,而且很实用,包括了对数据库的所有的常用的操作。
///
/// 数据库访问通用...
本文模仿实现数据库访问的通用类,代码清晰,而且很实用,包括了对数据库的所有的常用的操作。
/// <summary> /// 数据库访问通用类 /// </summary> public class sqlhelper { private string connectionstring; /// <summary> /// 设定数据库访问字符串 /// </summary> public string connectionstring { set { connectionstring = value; } } /// <summary> /// 构造函数 /// </summary> /// <param name="connectionstring">数据库访问字符串</param> public sqlhelper(string connectionstring) { this.connectionstring = connectionstring; } /// <summary> /// 执行一个查询,并返回查询结果 /// </summary> /// <param name="sql">要执行的sql语句</param> /// <param name="commandtype">要执行的查询语句的类型,如存储过程或者sql文本命令</param> /// <returns>返回查询结果集</returns> public datatable executedatatable(string sql,commandtype commandtype) { return executedatatable(sql, commandtype, null); } /// <summary> /// 执行一个查询,并返回结果集 /// </summary> /// <param name="sql">要执行的sql文本命令</param> /// <returns>返回查询的结果集</returns> public datatable executedatatable(string sql) { return executedatatable(sql, commandtype.text, null); } /// <summary> /// 执行一个查询,并返回查询结果 /// </summary> /// <param name="sql">要执行的sql语句</param> /// <param name="commandtype">要执行查询语句的类型,如存储过程或者sql文本命令</param> /// <param name="parameters">transact-sql语句或者存储过程参数数组</param> /// <returns></returns> public datatable executedatatable(string sql, commandtype commandtype, sqlparameter[] parameters) { datatable data = new datatable(); //实例化datatable,用于装载查询结果集 using (sqlconnection con = new sqlconnection(connectionstring)) { using (sqlcommand cmd = new sqlcommand(sql, con)) { cmd.commandtype = commandtype;//设置command的commandtype为指定的commandtype //如果同时传入了参数,则添加这些参数 if (parameters != null) { foreach (sqlparameter parameter in parameters) { cmd.parameters.add(parameter); } } //通过包含查询sql的sqlcommand实例来实例化sqldataadapter sqldataadapter adapter = new sqldataadapter(cmd); adapter.fill(data);//填充datatable } } return data; } /// <summary> /// 返回一个sqldatareader对象的实例 /// </summary> /// <param name="sql">要执行的sql查询命令</param> /// <returns></returns> public sqldatareader executereader(string sql) { return executereader(sql, commandtype.text, null); } /// <summary> /// /// </summary> /// <param name="sql">要执行的sql语句</param> /// <param name="commandtype">要执行查询语句的类型,如存储过程或者sql文本命令</param> /// <returns></returns> public sqldatareader executereader(string sql,commandtype commandtype) { return executereader(sql, commandtype, null); } /// <summary> /// 返回一个sqldatareader对象的实例 /// </summary> /// <param name="sql"></param> /// <param name="commandtype"></param> /// <param name="parameters"></param> /// <returns></returns> public sqldatareader executereader(string sql, commandtype commandtype, sqlparameter[] parameters) { sqlconnection con = new sqlconnection(connectionstring); sqlcommand cmd = new sqlcommand(sql, con); if (parameters != null) { foreach (sqlparameter parameter in parameters) { cmd.parameters.add(parameters); } } con.open(); //commandbehavior.closeconnection参数指示关闭reader对象时关闭与其关联的connection对象 return cmd.executereader(commandbehavior.closeconnection); } /// <summary> /// 执行一个查询,返回结果集的首行首列。忽略其他行,其他列 /// </summary> /// <param name="sql">要执行的sql命令</param> /// <returns></returns> public object executescalar(string sql) { return executescalar(sql, commandtype.text, null); } /// <summary> /// /// </summary> /// <param name="sql"></param> /// <param name="commandtype"></param> /// <returns></returns> public object executescalar(string sql, commandtype commandtype) { return executescalar(sql, commandtype, null); } /// <summary> /// /// </summary> /// <param name="sql"></param> /// <param name="commandtype">参数类型</param> /// <param name="parameters"></param> /// <returns></returns> public object executescalar(string sql,commandtype commandtype, sqlparameter[] parameters) { object result=null; sqlconnection con=new sqlconnection(connectionstring); sqlcommand cmd=new sqlcommand(sql,con); cmd.commandtype= commandtype; if(parameters!=null) { foreach (sqlparameter parapmeter in parameters) { cmd.parameters.add(parapmeter); } } con.open(); result=cmd.executescalar(); con.close(); return result; } /// <summary> /// 对数据库进行增删改的操作 /// </summary> /// <param name="sql">要执行的sql命令</param> /// <returns></returns> public int executenonquery(string sql) { return executenonquery(sql, commandtype.text, null); } /// <summary> /// 数据库进行增删改的操作 /// </summary> /// <param name="sql">对数据库进行操作的sql命令</param> /// <param name="commandtype">要执行查询语句的类型,如存储过程或者sql文本命令</param> /// <returns></returns> public int executenonquery(string sql, commandtype commandtype) { return executenonquery(sql, commandtype, null); } /// <summary> /// 对数据库进行增删改的操作 /// </summary> /// <param name="sql">要执行的sql语句</param> /// <param name="commandtype">要执行的查询语句类型,如存储过程或者sql文本命令</param> /// <param name="parameters">transact-sql语句或者存储过程的参数数组</param> /// <returns></returns> public int executenonquery(string sql, commandtype commandtype, sqlparameter[] parameters) { int count = 0; sqlconnection con = new sqlconnection(connectionstring); sqlcommand cmd = new sqlcommand(sql, con); cmd.commandtype = commandtype; if (parameters != null) { foreach(sqlparameter parameter in parameters) { cmd.parameters.add(parameter); } } con.open(); count = cmd.executenonquery(); con.close(); return count; } /// <summary> /// 返回当前连接的数据库中所有用户创建的数据库 /// </summary> /// <returns></returns> public datatable gettables() { datatable table = null; using (sqlconnection con = new sqlconnection(connectionstring)) { con.open(); table = con.getschema("tables"); } return table; } }
如果我们建立了一个对数据库访问的通用类以后,在随数据库进行操作的时候吗,就只需要先实例化对象,然后根据自己的需要,调用相应的方法就可以完成对数据库的所有操作。这就是数据库访问层和业务逻辑层分开的好处。
这样书写的代码,可以大大的减少我们代码的复杂度,而且,繁琐度也大大的降低了。
以上就是本文的全部内容,希望对大家的学习有所帮助。