当前位置: 首页 > news >正文

通用数据访问类

`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);
}
}
}
}
`

http://www.jsqmd.com/news/905231/

相关文章:

  • 【系统学AI】07 ReAct范式:从奠基之作到Reflexion/RAF的演进
  • 避开版本坑!用Conda虚拟环境+清华源5分钟搞定Transformer安装(附测试代码)
  • 【仅剩237份】DeepSeek多租户安全基线检查清单(含21项CVE关联项、13个租户越权高危场景)
  • 2026徐州黄金回收避坑指南于门店推荐:选聚奢名品,不扣点不熔金,支持上门回收 - 寻茫精选
  • 保姆级教程:从下载ISO到配置网络,一步步在物理服务器上部署XCP-ng 8.2
  • 微信聊天记录永久保存指南:用WeChatMsg打造你的数字记忆保险箱
  • Deep-Live-Cam终极指南:5分钟实现实时人脸替换与一键深度伪造
  • 别再只盯着功能安全了!聊聊ISO 21448标准下,自动驾驶SOTIF的三大实战挑战与应对思路
  • Sora 2数字人唇音同步误差<0.12帧:基于Wav2Lip++改进算法的实时声画对齐实战(附GitHub可运行代码库)
  • 终极指南:如何在5分钟内为Windows微信/QQ/TIM安装防撤回补丁
  • Suncast模型性能揭秘:如何实现MAE 76.19 W/m²的高精度太阳能预测
  • 如何永久保存微信聊天记录?完全免费的本地数据备份终极指南
  • ok-ww实战手册:基于视觉AI的鸣潮智能自动化全攻略
  • 如何快速获取百度网盘真实下载地址:3步实现高速下载的完整指南
  • 田利建导演团队倾力护航《沿着边境看中国》第三季:融合真人秀元素,以匠心铸就边境新篇章
  • 开发者必读:10个MiniCPM5-1B-MLX高效部署技巧与性能优化策略
  • 如何在Blender中快速创建VRM角色:5分钟掌握VRM插件的完整指南
  • 告别命令行恐惧!Ubuntu 22.04下用GParted图形化无损调整分区大小(附保姆级截图)
  • Claude可观测性盲区大起底:缺失的17个关键指标、5个不可替代的eBPF探针位置(附审计清单PDF)
  • 【企业级会议纪要SOP】:基于ISO 2023会议管理标准重构ChatGPT工作流,已验证27家500强落地有效性
  • Honey Select 2终极汉化与模组整合方案:3步解决语言障碍与功能限制
  • 通过taotoken cli在ubuntu上快速为openclaw写入配置
  • Arduino机器人平台:模式切换架构与多传感器集成实践
  • CodeWF.Markdown:PDF 文本可复制、图片可嵌入,复制到公众号/知乎/掘金不再显示 HTML 源码
  • Pythoncollections模块深究
  • 猫抓插件完整指南:三步轻松掌控网页视频音频资源
  • DeepSeek多模态输出格式兼容方案(含OpenAI/Anthropic双协议映射表·限时公开)
  • 紧急预警:Claude v3.5部署后出现的3类静默降级现象,架构评审组已在27家头部客户中确认复现
  • 百度网盘macOS版SVIP功能破解完整指南:告别限速下载
  • 猫抓浏览器扩展:你的网页视频下载神器,三分钟告别在线观看限制