针对SQLServer数据库的通用访问类
Web.config中代码
<configuration>
<connectionStrings>
<add name="connString" connectionString="Server=数据库服务;DataBase=数据库名称;Uid=数据库登录名用户;Pwd=数据库登录密码"/>
</connectionStrings>
</configuration>
现在我们先建一个SQLHelper类,用来对数据库的操作
代码如下:
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.IO;
using System.Configuration; namespace DAL
{
/// <summary>
/// 针对SQLServer数据库的通用访问类
/// </summary>
public class SQLHelper
{ //封装数据库连接字符串
private static string connString = ConfigurationManager.ConnectionStrings["connString"].ToString(); #region 封装格式化SQL语句执行的各种方法 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)
{
//将异常信息写入日志
string errorInfo = "调用public static int Update(string sql)方法时发生错:" + ex.Message;
WriteLog(errorInfo);
throw new Exception(errorInfo);
}
finally
{
conn.Close();
}
}
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)
{
//将异常信息写入日志
string errorInfo = "调用public static object GetSingleResult(string sql)方法时发生错:" + ex.Message;
WriteLog(errorInfo);
throw new Exception(errorInfo);
}
finally
{
conn.Close();
}
}
public static SqlDataReader GetReader(string sql)
{
SqlConnection conn = new SqlConnection(connString);
SqlCommand cmd = new SqlCommand(sql, conn);
try
{
conn.Open();
return cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
catch (Exception ex)
{
conn.Close();
//将异常信息写入日志
string errorInfo = "调用SqlDataReader GetReader(string sql)方法时发生错:" + ex.Message;
WriteLog(errorInfo);
throw new Exception(errorInfo);
}
}
public static DataSet GetDataSet(string sql)
{
SqlConnection conn = new SqlConnection(connString);
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataAdapter da = new SqlDataAdapter(cmd);//创建数据适配器对象
DataSet ds = new DataSet();//创建一个内存数据集
try
{
conn.Open();
da.Fill(ds);//使用数据适配器填充数据集
return ds;
}
catch (Exception ex)
{
//将异常信息写入日志
string errorInfo = "调用 public static DataSet GetDataSet(string sql)方法时发生错:" + ex.Message;
WriteLog(errorInfo);
throw new Exception(errorInfo);
}
finally
{
conn.Close();
}
}
public static bool UpdateByTran(List<string> sqlList)
{
SqlConnection conn = new SqlConnection(connString);
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
try
{
conn.Open();
cmd.Transaction = conn.BeginTransaction();//开启事务
foreach (string sql in sqlList)
{
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
}
cmd.Transaction.Commit();//提交事务
return true;
}
catch (Exception ex)
{
if (cmd.Transaction != null)
{
cmd.Transaction.Rollback();//回滚事务
}
string errorInfo = "调用UpdateByTran(List<string> sqlList)方法时发生错:" + ex.Message;
WriteLog(errorInfo);
throw new Exception(errorInfo);
}
finally
{
if (cmd.Transaction != null)
{
cmd.Transaction = null;//清空事务
}
conn.Close();
}
} #endregion #region 封装带参数SQL语句执行的各种方法 public static int Update(string sql, SqlParameter[] param)
{
SqlConnection conn = new SqlConnection(connString);
SqlCommand cmd = new SqlCommand(sql, conn);
try
{
conn.Open();
cmd.Parameters.AddRange(param);//封装参数
return cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
string errorInfo = "调用 public static int Update(string sql,SqlParameter[] param)方法时发生错:" + ex.Message;
WriteLog(errorInfo);
throw ex;
}
finally
{
conn.Close();
}
}
public static object GetSingleResult(string sql, SqlParameter[] param)
{
SqlConnection conn = new SqlConnection(connString);
SqlCommand cmd = new SqlCommand(sql, conn);
try
{
conn.Open();
cmd.Parameters.AddRange(param);//封装参数
return cmd.ExecuteScalar();
}
catch (Exception ex)
{
//将异常信息写入日志
string errorInfo = "调用 public static object GetSingleResult(string sql, SqlParameter[] param)方法时发生错:" + ex.Message;
WriteLog(errorInfo);
throw new Exception(errorInfo);
}
finally
{
conn.Close();
}
}
public static SqlDataReader GetReader(string sql, SqlParameter[] param)
{
SqlConnection conn = new SqlConnection(connString);
SqlCommand cmd = new SqlCommand(sql, conn);
try
{
conn.Open();
cmd.Parameters.AddRange(param);//封装参数
return cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
catch (Exception ex)
{
conn.Close();
//将异常信息写入日志
string errorInfo = "调用 public static SqlDataReader GetReader(string sql, SqlParameter[] param)方法时发生错:" + ex.Message;
WriteLog(errorInfo);
throw new Exception(errorInfo);
}
}
/// <summary>
/// 启用事务提交多条带参数的SQL语句
/// </summary>
/// <param name="mainSql">主表SQL语句</param>
/// <param name="mainParam">主表SQL语句对应的参数</param>
/// <param name="detailSql">明细表SQL语句</param>
/// <param name="detailParam">明细表SQL语句对应的参数数组集合</param>
/// <returns>返回事务是否执行成功</returns>
public static bool UpdateByTran(string mainSql, SqlParameter[] mainParam,
string detailSql, List<SqlParameter[]> detailParam)
{
SqlConnection conn = new SqlConnection(connString);
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
try
{
conn.Open();
cmd.Transaction = conn.BeginTransaction();//开启事务
if (mainSql != null && mainSql.Length != )
{
cmd.CommandText = mainSql;
cmd.Parameters.AddRange(mainParam);
cmd.ExecuteNonQuery();
}
foreach (SqlParameter[] param in detailParam)
{
cmd.CommandText = detailSql;
cmd.Parameters.Clear();//必须要清除以前的参数
cmd.Parameters.AddRange(param);
cmd.ExecuteNonQuery();
}
cmd.Transaction.Commit();//提交事务
return true;
}
catch (Exception ex)
{
if (cmd.Transaction != null)
{
cmd.Transaction.Rollback();//回滚事务
}
string errorInfo = "调用 public static bool UpdateByTran(string mainSql, SqlParameter[] mainParam, string detailSql, List<SqlParameter[]> detailParam)方法时发生错:" + ex.Message;
WriteLog(errorInfo);
throw new Exception(errorInfo);
}
finally
{
if (cmd.Transaction != null)
{
cmd.Transaction = null;//清空事务
}
conn.Close();
}
} #endregion #region 封装调用存储过程执行的各种方法 public static int UpdateByProcedure(string spName, SqlParameter[] param)
{
SqlConnection conn = new SqlConnection(connString);
SqlCommand cmd = new SqlCommand(spName, conn);
try
{
conn.Open();
cmd.CommandType = CommandType.StoredProcedure;//声明当前操作是存储过程
cmd.Parameters.AddRange(param);//封装参数
return cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
string errorInfo = "调用 public static int UpdateByProcedure(string spName, SqlParameter[] param)方法时发生错:" + ex.Message;
WriteLog(errorInfo);
throw new Exception(errorInfo);
}
finally
{
conn.Close();
}
}
public static object GetSingleResultByProcedure(string spName, SqlParameter[] param)
{
SqlConnection conn = new SqlConnection(connString);
SqlCommand cmd = new SqlCommand(spName, conn);
try
{
conn.Open();
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddRange(param);//封装参数
return cmd.ExecuteScalar();
}
catch (Exception ex)
{
//将异常信息写入日志
string errorInfo = "调用 public static object GetSingleResult(string sql, SqlParameter[] param)方法时发生错:" + ex.Message;
WriteLog(errorInfo);
throw new Exception(errorInfo);
}
finally
{
conn.Close();
}
}
public static SqlDataReader GetReaderByProcedure(string spName, SqlParameter[] param)
{
SqlConnection conn = new SqlConnection(connString);
SqlCommand cmd = new SqlCommand(spName, conn);
try
{
conn.Open();
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddRange(param);//封装参数
return cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
catch (Exception ex)
{
conn.Close();
//将异常信息写入日志
string errorInfo = "调用 public static SqlDataReader GetReader(string sql, SqlParameter[] param)方法时发生错:" + ex.Message;
WriteLog(errorInfo);
throw new Exception(errorInfo);
}
}
/// <summary>
/// 启用事务调用带参数的存储过程
/// </summary>
/// <param name="procedureName">存储过程名称</param>
/// <param name="paramArray">存储过程参数数组集合</param>
/// <returns>返回基于事务的存储过程调用是否成功</returns>
public static bool UpdateByTran(string procedureName, List<SqlParameter[]> paramArray)
{
SqlConnection conn = new SqlConnection(connString);
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
try
{
conn.Open();
cmd.CommandType = CommandType.StoredProcedure;//声明当前操作是调用存储过程
cmd.CommandText = procedureName;
cmd.Transaction = conn.BeginTransaction();//开启事务
foreach (SqlParameter[] param in paramArray)
{
cmd.Parameters.Clear();
cmd.Parameters.AddRange(param);
cmd.ExecuteNonQuery();
}
cmd.Transaction.Commit();//提交事务
return true;
}
catch (Exception ex)
{
if (cmd.Transaction != null)
{
cmd.Transaction.Rollback();//回滚事务
}
string errorInfo = "调用 public static bool UpdateByTran(string procedureName,List<SqlParameter[]>paramArray)方法时发生错:" + ex.Message;
WriteLog(errorInfo);
throw new Exception(errorInfo);
}
finally
{
if (cmd.Transaction != null)
{
cmd.Transaction = null;//清空事务
}
conn.Close();
}
} #endregion #region 其他方法 private static void WriteLog(string log)
{
FileStream fs = new FileStream("sqlhelper.log", FileMode.Append);
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine(DateTime.Now.ToString() + " " + log);
sw.Close();
fs.Close();
} #endregion
}
}
WriteLog方法主要是用来记录错误日志,把错误已文本的方式存储在根目录里方便维护,
同时在SQLHelper要引用System.Configuration命名空间,不然的话会报错。
针对SQLServer数据库的通用访问类的更多相关文章
- C#操作SqlServer MySql Oracle通用帮助类
C#操作SqlServer MySql Oracle通用帮助类 [前言] 作为一款成熟的面向对象高级编程语言,C#在ADO.Net的支持上已然是做的很成熟,我们可以方便地调用ADO.Net操作各类关系 ...
- C#操作SqlServer MySql Oracle通用帮助类Db_Helper_DG(默认支持数据库读写分离、查询结果实体映射ORM)
[前言] 作为一款成熟的面向对象高级编程语言,C#在ADO.Net的支持上已然是做的很成熟,我们可以方便地调用ADO.Net操作各类关系型数据库,在使用了多年的Sql_Helper_DG后,由于项目需 ...
- [C#]记录一次异常排查,关于using语法、sqlserver数据库session、DBHelper类
最近在做一个基于asp.net和sqlserver的网站项目,发现网站运行一段时间之后,会报异常: 超时时间已到,但是尚未从池中获取连接.出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小 ...
- java操作数据库的通用的类
package cn.dao; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; ...
- SQLServer数据库通用访问类
private static string connString=ConfigurationManager.ConnStrings["connString"].ToString() ...
- 自己写的访问SqlServer数据库的通用DAL层
如题,直接贴代码. 首先是DataTable转List<T>的方法,这个方法通用性极强. #region Table转List /// <summary> /// Table转 ...
- C#:数据库通用访问类 SqlHelper
using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; usin ...
- asp.net针对SQLSERVER数据库备份和恢复的一揽子问题解决
一.备份 先备份到服务端,用gridview显示出来,点击可以下载到本地 二.恢复 这是很麻烦的事情,本人查阅不少资料,耗费不少时间才搞定. 直接恢复数据库时不行的,会提示数据库正在使用,恢复失败等信 ...
- Ado.net 通用访问类
public class DbHelperSQL { private static string connString = ConfigurationManager.ConnectionStrings ...
随机推荐
- cursor: pin S产生原理及解决方法
转自:http://www.dbafree.net/?p=778 今天晚上在一个比较重要的库上,CPU严重的冲了一下,导致DB响应变慢,大量应用连接timeout,紧接着LISTENER就挂了,连接数 ...
- python3.6 实现AES加密的示例(pyCryptodome)
当然我也是通过官方推荐,使用下面命令去下载安装的,pip就是好用... pip install pycryptodome 撸码开始 废话不多说,直接上demo # from Crypto.Has ...
- 温故而知新-array_walk和sizeof和array_count_values()和extract()
1 array_walk对数组的每一个元素应用任何函数 用户自定义函数中的第一个参数指定为引用:&$value,来改变数组元素的值 如果对一个参数使用取地址,那么会改变数组元素的值 2 siz ...
- AngularJS学习笔记(2)——与用户交互的动态清单列表
与用户交互的动态清单列表 以我之前写的一个清单列表页面作为例子(MVC模式的清单列表效果),优化前代码如下: <!DOCTYPE html> <html ng-app="t ...
- RAD XE8
http://community.embarcadero.com/index.php/blogs/entry/rad-studio-2015-roadmap http://www.embarcader ...
- Eclipse使用xdoclet1.2.3 生成hibernate配置文件和映射文件
用ant和xdoclet生成hibernate配置文件可以为我们省去很多配置的操作,废话不多说,直接给栗子: 测试环境: eclipse:Eclipse Java EE IDE for Web Dev ...
- open语句对文本和二进制文件的读写
文本文件的操作此种方式是以行为单位进行读取的基本单位,主要应用的方法和函数有Open,Close,Line Input,FreeFile,EOF等.先简述其功能然后结合代码示例进行说明.Open:顾名 ...
- tensorflow 基本函数(1.tf.split, 2.tf.concat,3.tf.squeeze, 4.tf.less_equal, 5.tf.where, 6.tf.gather, 7.tf.cast, 8.tf.expand_dims, 9.tf.argmax, 10.tf.reshape, 11.tf.stack, 12tf.less, 13.tf.boolean_mask
1. tf.split(3, group, input) # 拆分函数 3 表示的是在第三个维度上, group表示拆分的次数, input 表示输入的值 import tensorflow ...
- BTN事件的响应区域
是其下所有小图片的区域组合.是并集
- Python Geoip 获取IP地址经度、纬度
简介: 除了一些免费的 API 接口,例如 http://ipinfo.io/223.155.166.172 可以得到一些信息外,还可以通过 python-geoip 库来解决这个问题. shell ...