using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.Data.SqlClient; namespace Lbsoft.Common.DBUtility { public class SqlDbHelper { private string connectionString; public string ConnectionString { get { return connectionString; } set { connectionString = value; } } public SqlDbHelper() { } public SqlDbHelper(string strConnection) { this.connectionString = strConnection; } #region ExecuteDataTable /// <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 dt = new DataTable(); //在使用完连接时一定要关闭连接,以便连接可以返回池 //C# 的代码中存在 Using 块,将自动断开连接,即使发生无法处理的异常 using (SqlConnection connection = new SqlConnection(connectionString)) { using (SqlCommand command = new SqlCommand(sql, connection)) { command.CommandType = commandType;//设置CommndType //如果同时传入了参数,则添加这些参数 if (parameters != null) { foreach (SqlParameter parameter in parameters) { command.Parameters.Add(parameter); } } //通过包含查询SQL的SqlCommand实列来初始化SqlDataAdapter SqlDataAdapter adapter = new SqlDataAdapter(command); adapter.Fill(dt);//DataAdapter 的 Fill 方法用于使用 DataAdapter 的 SelectCommand 的结果来填充 DataSet或DataTable } } return dt; } /// <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> /// <returns></returns> public DataTable ExecuteDataTable(string sql, CommandType commandType) { return ExecuteDataTable(sql, commandType, null); } #endregion #region SqlDataReader /// <summary> /// /// </summary> /// <param name="sql">要执行的SQL语句</param> /// <param name="commandType">要执行的查询语句的类型,如存储过程或者SQL文本命令</param> /// <param name="parameters">Transact-SQL语句胡存储过程的参数数组</param> /// <returns></returns> public SqlDataReader ExecuteReader(string sql, CommandType commandType, SqlParameter[] parameters) { SqlConnection connection = new SqlConnection(connectionString); SqlCommand command = new SqlCommand(sql, connection); //如果同时传入了参数,则添加这些参数 if (parameters != null) { foreach (SqlParameter parameter in parameters) { command.Parameters.Add(parameter); } } connection.Open(); //CommandBehavior.CloseConnection参数指示关闭Reader对象时关闭与其关联的Connection对象 return command.ExecuteReader(CommandBehavior.CloseConnection); } /// <summary> /// /// </summary> /// <param name="sql">要执行的SQL语句</param> /// <param name="commandType">要执行的查询语句的类型,如存储过程或者SQL文本命令</param> /// <returns></returns> public SqlDataReader ExecuteReader(string sql) { return ExecuteReader(sql, CommandType.Text, null); } /// <summary> /// /// </summary> /// <param name="sql"></param> /// <param name="commandType"></param> /// <returns></returns> public SqlDataReader ExecuteReader(string sql,CommandType commandType) { return ExecuteReader(sql, commandType, null); } #endregion #region ExecuteScalar /// <summary> /// 执行一个查询,返回查询结果集的第一行第一列,忽略其他行和列 /// </summary> /// <param name="sql">要执行的SQL语句</param> /// <param name="commandType">要执行的查询语句的类型,如存储过程或者SQL文本命令</param> /// <param name="parameters">Transact-SQL语句胡存储过程的参数数组</param> /// <returns></returns> public Object ExecuteScalar(string sql, CommandType commandType, SqlParameter[] parameters) { object result = null; using (SqlConnection connection = new SqlConnection(connectionString)) { using (SqlCommand command = new SqlCommand(sql, connection)) { command.CommandType = commandType; //如果同时传入参数则添加这些参数 if (parameters != null) { foreach (SqlParameter parameter in parameters) { command.Parameters.Add(parameter); } } connection.Open();//打开数据库连接 result = command.ExecuteScalar(); } } return result; } /// <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">要执行的SQL语句</param> /// <param name="commandType">要执行的查询语句的类型,如存储过程或者SQL文本命令</param> /// <returns></returns> public Object ExecuteScalar(string sql, CommandType commandType) { return ExecuteScalar(sql, commandType, null); } #endregion /// <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; using (SqlConnection connection = new SqlConnection(connectionString)) { using (SqlCommand command = new SqlCommand(sql, connection)) { command.CommandType = commandType; //如果同时传入了参数,则添加这些参数 if (parameters != null) { foreach (SqlParameter parameter in parameters) { command.Parameters.Add(parameter); } } connection.Open();//打开数据库连接 count = command.ExecuteNonQuery(); } } return count; } /// <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> /// <returns></returns> public DataTable GetTables() { DataTable dt = null; using (SqlConnection connection=new SqlConnection(connectionString)) { connection.Open();//打开数据库连接 dt = connection.GetSchema("Tables");//GetSchema方法使用指定的架构名称字符串,返回数据源架构信息 } return dt; } } }