using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
namespace Yahweh.DBUtility
{
///
/// 数据库操作类(SQLServer),通过数据库连接字符串,CommandType.Text 文本命令
///
public sealed class SqlHelper
{
///
/// 数据库连接字符串
///
private static readonly string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
///
/// 执行一个SQL语句(连接字符串),返回受影响行数
///
/// 命令字符串
/// 返回命令影响的行数
public static int ExecuteNonQuery(string cmdTxt)
{
return ExecuteNonQuery(cmdTxt, null);
}
///
/// 执行一个SQL语句(连接字符串),返回受影响行数
///
/// 命令字符串
/// 参数集
/// 返回命令影响的行数
public static int ExecuteNonQuery(string cmdTxt, params SqlParameter[] paras)
{
return ExecuteNonQuery(cmdTxt, CommandType.Text, paras);
}
///
/// 执行一个SQL语句(连接字符串),返回受影响行数
///
/// 命令字符串
/// 命令类型
/// 参数集
/// 返回命令影响的行数
public static int ExecuteNonQuery(string cmdTxt, CommandType cmdType, params SqlParameter[] paras)
{
// using 的方式创建数据库连接对象,并在执行完后释放资源
using (SqlConnection conn = new SqlConnection(connStr))
{
// 通过无参构造方法,创建数据库操作命令对象
SqlCommand cmd = new SqlCommand();
// 调用PrePareCommand方法,预处理操作命令对象
PrepareCommand(cmd, conn, null, cmdType, cmdTxt, paras);
// 调用数据库操作命令对象的ExecuteNonQuery方法,执行SQL语句并返回受影响的行数
int count = cmd.ExecuteNonQuery();
// 移除数据库操作命令对象中的参数集
cmd.Parameters.Clear();
// 返回受影响的行数
return count;
}
}
///
/// 执行一个SQL语句(连接字符串),返回DataReader对象
///
/// 命令字符串
/// 返回一个DataReader对象
public static SqlDataReader ExecuteReader(string cmdTxt)
{
return ExecuteReader(cmdTxt, null);
}
///
/// 执行一个SQL语句(连接字符串),返回DataReader对象
///
/// 命令字符串
/// 参数集
///
public static SqlDataReader ExecuteReader(string cmdTxt, params SqlParameter[] paras)
{
return ExecuteReader(cmdTxt, CommandType.Text, paras);
}
///
/// 执行一个SQL语句(连接字符串),返回DataReader对象
///
/// 命令字符串
/// 命令类型
/// 参数集
/// 返回一个DataReader对象
public static SqlDataReader ExecuteReader(string cmdTxt, CommandType cmdType, params SqlParameter[] paras)
{
SqlConnection conn = new SqlConnection(connStr);
SqlCommand cmd = new SqlCommand();
try
{
PrepareCommand(cmd, conn, null, cmdType, cmdTxt, paras);
// CommandBehavior.CloseConnection 执行命令时,关闭关联的 DataReader 对象时,关联的 Connection 对象也会关闭
SqlDataReader sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
cmd.Parameters.Clear();
return sdr;
}
catch
{
conn.Close();
throw;
}
}
///
/// 执行一个SQL语句(连接字符串),返回一个object对象
///
/// 命令字符串
/// 返回一个object对象,对象中只包含一列。
public static object ExecuteScalar(string cmdTxt)
{
return ExecuteScalar(cmdTxt, null);
}
///
/// 执行一个SQL语句(连接字符串),返回一个object对象
///
/// 命令字符串
/// 参数集
/// 返回一个object对象,对象中只包含一列。
public static object ExecuteScalar(string cmdTxt, params SqlParameter[] paras)
{
return ExecuteScalar(cmdTxt, CommandType.Text, paras);
}
///
/// 执行一个SQL语句(连接字符串),返回一个object对象
///
/// 命令字符串
/// 命令类型
/// 参数集
/// 返回一个object对象,对象中只包含一列。
public static object ExecuteScalar(string cmdTxt, CommandType cmdType, params SqlParameter[] paras)
{
using (SqlConnection connection = new SqlConnection(connStr))
{
SqlCommand cmd = new SqlCommand();
PrepareCommand(cmd, connection, null, cmdType, cmdTxt, paras);
Object val = cmd.ExecuteScalar();
cmd.Parameters.Clear();
if (val == null || val == DBNull.Value)
{
return null;
}
return val;
}
}
///
/// 执行一个SQL语句(连接字符串),返回一个DataTable对象
///
/// 命令字符串
///
public static DataTable ExecuteDataTable(string cmdTxt)
{
return ExecuteDataTable(cmdTxt, null);
}
///
/// 执行一个SQL语句(连接字符串),返回一个DataTable对象
///
/// 命令字符串
/// 参数集
///
public static DataTable ExecuteDataTable(string cmdTxt, params SqlParameter[] paras)
{
return ExecuteDataTable(cmdTxt, CommandType.Text, paras);
}
///
/// 执行一个SQL语句(连接字符串),返回一个DataTable对象
///
/// 命令字符串
/// 命令类型
/// 参数集
/// 返回一个DataTable对象
public static DataTable ExecuteDataTable(string cmdTxt, CommandType cmdType, params SqlParameter[] paras)
{
using (SqlConnection conn = new SqlConnection(connStr))
{
SqlCommand cmd = new SqlCommand();
PrepareCommand(cmd, conn, null, cmdType, cmdTxt, paras);
SqlDataAdapter sda = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
sda.Fill(dt);
return dt;
}
}
///
/// 根据一个SQL语句(连接字符串),返回一个DataSet对象
///
/// 命令字符串
/// 返回一个DataSet对象
public static DataSet ExecuteDataSet(string cmdTxt)
{
return ExecuteDataSet(cmdTxt, null);
}
///
/// 根据一个SQL语句(连接字符串),返回一个DataSet对象
///
/// 命令字符串
/// 参数集
/// 返回一个DataSet对象
public static DataSet ExecuteDataSet(string cmdTxt, params SqlParameter[] paras)
{
return ExecuteDataSet(cmdTxt, CommandType.Text, paras);
}
///
/// 根据一个SQL语句(连接字符串),返回一个DataSet对象
///
/// 命令字符串
/// 命令类型
/// 参数集
/// 返回一个DataSet对象
public static DataSet ExecuteDataSet(string cmdTxt, CommandType cmdType, params SqlParameter[] paras)
{
using (SqlConnection connection = new SqlConnection(connStr))
{
SqlCommand cmd = new SqlCommand();
PrepareCommand(cmd, connection, null, cmdType, cmdTxt, paras);
using (SqlDataAdapter da = new SqlDataAdapter(cmd))
{
DataSet ds = new DataSet();
try
{
da.Fill(ds, "ds");
cmd.Parameters.Clear();
}
catch (SqlException ex)
{
throw new Exception(ex.Message);
}
return ds;
}
}
}
///
/// SqlCommand对象封装预处理
///
/// SqlCommand对象
/// 数据库连接对象
/// 数据库事务对象
/// 命令类型
/// 命令字符串
/// 参数集
private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdTxt, IEnumerable paras)
{
// 判断数据库连接状态,确保为Open状态
if (conn.State != ConnectionState.Open)
// 打开数据库连接。执行语句只有一条,可省略{}
conn.Open();
// 设置SqlCommand数据库连接对象
cmd.Connection = conn;
// 设置SqlCommand命令字符串(SQL语句)
cmd.CommandText = cmdTxt;
// 判断数据库事务对象,不为null,则设置SqlCommand数据库事务对象
if (trans != null)
cmd.Transaction = trans;
// 设置SqlCommand命令类型,Text:文本命令 | StoredProcedure:存储过程
cmd.CommandType = cmdType;
// 判断参数集是否为null
if (paras == null)
return;
// 设置SqlCommand参数集
foreach (SqlParameter para in paras)
cmd.Parameters.Add(para);
}
}
}