`using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
namespace self.xiketang.com.Ado.Net
{
public class SQLHelper
{
private static string connString = ConfigurationManager.ConnectionStrings["connString"].ToString();
///
/// 执行增删改操作的方法
///
///
///
//public static int Update(string sql)
//{
// SqlConnection conn = new SqlConnection(connString);
// SqlCommand cmd = new SqlCommand(sql, conn);
// try
// {
// conn.Open();
// return cmd.ExecuteNonQuery();
// }
// catch (Exception ex)
// {
// //可以在这个地方捕获ex对象相关信息,然后保存到日志文件中...
// throw new Exception("执行方法public static int Update(string sql)发生异常:" + ex.Message);
// }
// finally //不管前面是否发生异常都要执行的代码
// {
// conn.Close();
// }
//}
///
/// 执行 增/删/改 (带参数,防SQL注入)
///
public static int Update(string sql, params SqlParameter[] parameters)
{
using (SqlConnection conn = new SqlConnection(connString))
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
try
{
if (parameters != null)
{
cmd.Parameters.AddRange(parameters);
}
conn.Open();
return cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
// 这里可以写日志
throw new Exception("数据库操作失败:" + ex.Message);
}
}
}
///
/// 执行单一结果返回的查询方法
///
///
///
//public static object GetSingleResult(string sql)
//{
// SqlConnection conn = new SqlConnection(connString);
// SqlCommand cmd = new SqlCommand(sql, conn);
// try
// {
// conn.Open();
// return cmd.ExecuteScalar();
// }
// catch (Exception ex)
// {
// //可以在这个地方捕获ex对象相关信息,然后保存到日志文件中...
// throw new Exception("执行方法 public static object GetSingleResult(string sql)发生异常:" + ex.Message);
// }
// finally //不管前面是否发生异常都要执行的代码
// {
// conn.Close();
// }
//}
///
/// 执行查询,返回单个结果(如:Count、Max、Sum 等)
///
public static object GetSingleResult(string sql, params SqlParameter[] parameters)
{
using (SqlConnection conn = new SqlConnection(connString))
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
try
{
// 有参数就加(防SQL注入)
if (parameters != null)
{
cmd.Parameters.AddRange(parameters);
}
conn.Open();
return cmd.ExecuteScalar();
}
catch (Exception ex)
{
// 可记录日志
throw new Exception("查询单个值失败:" + ex.Message);
}
}
}
///
/// 执行返回结果集的查询
///
///
///
//public static SqlDataReader GetReader(string sql)
//{
// SqlConnection conn = new SqlConnection(connString);
// SqlCommand cmd = new SqlCommand(sql, conn);
// try
// {
// conn.Open();
// //我们添加枚举CommandBehavior.CloseConnection之后,将来reader对象的链接会跟随reader对象的关闭自动关闭
// return cmd.ExecuteReader(CommandBehavior.CloseConnection);
// }
// catch (Exception ex)
// {
// //可以在这个地方捕获ex对象相关信息,然后保存到日志文件中...
// throw new Exception("执行方法 public static object GetSingleResult(string sql)发生异常:" + ex.Message);
// }
// //finally //在这个方法里面,绝对不能直接把链接关掉,否则出错
// //{
// // conn.Close();
// //}
//}
///
/// 执行查询,返回 SqlDataReader(只读、向前、快)
/// 注意:使用完必须 Close() 或 using 释放,会自动关闭连接
///
public static SqlDataReader GetReader(string sql, params SqlParameter[] parameters)
{
SqlConnection conn = new SqlConnection(connString);
try
{
conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
// 加参数(防注入)
if (parameters != null)
{
cmd.Parameters.AddRange(parameters);
}
// 关键:CommandBehavior.CloseConnection → 释放 reader 时自动关闭连接
return cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
catch (Exception ex)
{
// 出错了必须把连接关掉!!!(原代码漏了这个)
conn.Close();
// 记日志
throw new Exception("获取DataReader失败:" + ex.Message);
}
}
}
}
`
