以前我在对数据库进行操作的时候都是在同一页面对数据库进行操作。这样的话,就是操作繁琐,而且需要重复的书写对数据库操作的代码,这样不仅浪费了很多的时间,而且也使得代码看起来非常的凌乱。至从接触到了三层架构的思想,明白了分层的好处,还有面向对象的好处。今天在看书的时候,看到周金桥老师的对数据库访问的通用类,就试着模仿的写了一个,代码清晰,而且很实用,包括了对数据库的所有的常用的操作。
- ///<summary>
- ///数据库访问通用类
- ///</summary>
- publicclassSqlHelper
- {
- privatestringconnectionString;
- ///<summary>
- ///设定数据库访问字符串
- ///</summary>
- publicstringConnectionString
- {
- set{connectionString=value;}
- }
- ///<summary>
- ///构造函数
- ///</summary>
- ///<paramname="connectionString">数据库访问字符串</param>
- publicSqlHelper(stringconnectionString)
- {
- this.connectionString=connectionString;
- }
- ///<summary>
- ///执行一个查询,并返回查询结果
- ///</summary>
- ///<paramname="sql">要执行的sql语句</param>
- ///<paramname="commandType">要执行的查询语句的类型,如存储过程或者sql文本命令</param>
- ///<returns>返回查询结果集</returns>
- publicDataTableExecuteDataTable(stringsql,CommandTypecommandType)
- {
- returnExecuteDataTable(sql,commandType,null);
- }
- ///<summary>
- ///执行一个查询,并返回结果集
- ///</summary>
- ///<paramname="sql">要执行的sql文本命令</param>
- ///<returns>返回查询的结果集</returns>
- publicDataTableExecuteDataTable(stringsql)
- {
- returnExecuteDataTable(sql,CommandType.Text,null);
- }
- ///<summary>
- ///执行一个查询,并返回查询结果
- ///</summary>
- ///<paramname="sql">要执行的sql语句</param>
- ///<paramname="commandtype">要执行查询语句的类型,如存储过程或者sql文本命令</param>
- ///<paramname="parameters">Transact-SQL语句或者存储过程参数数组</param>
- ///<returns></returns>
- publicDataTableExecuteDataTable(stringsql,CommandTypecommandtype,SqlParameter[]parameters)
- {
- DataTabledata=newDataTable();//实例化datatable,用于装载查询结果集
- using(SqlConnectioncon=newSqlConnection(connectionString))
- {
- using(SqlCommandcmd=newSqlCommand(sql,con))
- {
- cmd.CommandType=commandtype;//设置command的commandType为指定的Commandtype
- //如果同时传入了参数,则添加这些参数
- if(parameters!=null)
- {
- foreach(SqlParameterparameterinparameters)
- {
- cmd.Parameters.Add(parameter);
- }
- }
- //通过包含查询sql的sqlcommand实例来实例化sqldataadapter
- SqlDataAdapteradapter=newSqlDataAdapter(cmd);
- adapter.Fill(data);//填充datatable
- }
- }
- returndata;
- }
- ///<summary>
- ///返回一个SqlDataReader对象的实例
- ///</summary>
- ///<paramname="sql">要执行的SQl查询命令</param>
- ///<returns></returns>
- publicSqlDataReaderExecuteReader(stringsql)
- {
- returnExecuteReader(sql,CommandType.Text,null);
- }
- ///<summary>
- ///
- ///</summary>
- ///<paramname="sql">要执行的sql语句</param>
- ///<paramname="commandType">要执行查询语句的类型,如存储过程或者SQl文本命令</param>
- ///<returns></returns>
- publicSqlDataReaderExecuteReader(stringsql,CommandTypecommandType)
- {
- returnExecuteReader(sql,commandType,null);
- }
- ///<summary>
- ///返回一个sqldatareader对象的实例
- ///</summary>
- ///<paramname="sql"></param>
- ///<paramname="commandType"></param>
- ///<paramname="parameters"></param>
- ///<returns></returns>
- publicSqlDataReaderExecuteReader(stringsql,CommandTypecommandType,SqlParameter[]parameters)
- {
- SqlConnectioncon=newSqlConnection(connectionString);
- SqlCommandcmd=newSqlCommand(sql,con);
- if(parameters!=null)
- {
- foreach(SqlParameterparameterinparameters)
- {
- cmd.Parameters.Add(parameters);
- }
- }
- con.Open();
- //CommandBehavior.CloseConnection参数指示关闭reader对象时关闭与其关联的Connection对象
- returncmd.ExecuteReader(CommandBehavior.CloseConnection);
- }
- ///<summary>
- ///执行一个查询,返回结果集的首行首列。忽略其他行,其他列
- ///</summary>
- ///<paramname="sql">要执行的SQl命令</param>
- ///<returns></returns>
- publicObjectExecuteScalar(stringsql)
- {
- returnExecuteScalar(sql,CommandType.Text,null);
- }
- ///<summary>
- ///
- ///</summary>
- ///<paramname="sql"></param>
- ///<paramname="commandType"></param>
- ///<returns></returns>
- publicObjectExecuteScalar(stringsql,CommandTypecommandType)
- {
- returnExecuteScalar(sql,commandType,null);
- }
- ///<summary>
- ///
- ///</summary>
- ///<paramname="sql"></param>
- ///<paramname="commandType">参数类型</param>
- ///<paramname="parameters"></param>
- ///<returns></returns>
- publicObjectExecuteScalar(stringsql,CommandTypecommandType,SqlParameter[]parameters)
- {
- Objectresult=null;
- SqlConnectioncon=newSqlConnection(connectionString);
- SqlCommandcmd=newSqlCommand(sql,con);
- cmd.CommandType=commandType;
- if(parameters!=null)
- {
- foreach(SqlParameterparapmeterinparameters)
- {
- cmd.Parameters.Add(parapmeter);
- }
- }
- con.Open();
- result=cmd.ExecuteScalar();
- con.Close();
- returnresult;
- }
- ///<summary>
- ///对数据库进行增删改的操作
- ///</summary>
- ///<paramname="sql">要执行的sql命令</param>
- ///<returns></returns>
- publicintExecuteNonQuery(stringsql)
- {
- returnExecuteNonQuery(sql,CommandType.Text,null);
- }
- ///<summary>
- ///数据库进行增删改的操作
- ///</summary>
- ///<paramname="sql">对数据库进行操作的sql命令</param>
- ///<paramname="commandType">要执行查询语句的类型,如存储过程或者sql文本命令</param>
- ///<returns></returns>
- publicintExecuteNonQuery(stringsql,CommandTypecommandType)
- {
- returnExecuteNonQuery(sql,commandType,null);
- }
- ///<summary>
- ///对数据库进行增删改的操作
- ///</summary>
- ///<paramname="sql">要执行的sql语句</param>
- ///<paramname="commandType">要执行的查询语句类型,如存储过程或者sql文本命令</param>
- ///<paramname="parameters">Transact-SQL语句或者存储过程的参数数组</param>
- ///<returns></returns>
- publicintExecuteNonQuery(stringsql,CommandTypecommandType,SqlParameter[]parameters)
- {
- intcount=0;
- SqlConnectioncon=newSqlConnection(connectionString);
- SqlCommandcmd=newSqlCommand(sql,con);
- cmd.CommandType=commandType;
- if(parameters!=null)
- {
- foreach(SqlParameterparameterinparameters)
- {
- cmd.Parameters.Add(parameter);
- }
- }
- con.Open();
- count=cmd.ExecuteNonQuery();
- con.Close();
- returncount;
- }
- ///<summary>
- ///返回当前连接的数据库中所有用户创建的数据库
- ///</summary>
- ///<returns></returns>
- publicDataTableGetTables()
- {
- DataTabletable=null;
- using(SqlConnectioncon=newSqlConnection(connectionString))
- {
- con.Open();
- table=con.GetSchema("Tables");
- }
- returntable;
- }
- }
如果我们建立了一个对数据库访问的通用类以后,在随数据库进行操作的时候吗,就只需要先实例化对象,然后根据自己的需要,调用相应的方法就可以完成对数据库的所有操作。这就是数据库访问层和业务逻辑层分开的好处。