using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Configuration;
using System.Web;
using System.Collections;
using System.Transactions; namespace Boss.DAL
{
/// <summary>
/// 数据库的通用访问类
/// 此类为抽象类,不允许实例化,在应用时直接调用
/// </summary>
public abstract class SqlHelperEx
{
#region 数据操作 /// <summary>
/// 打开数据库链接
/// </summary>
/// <param name="conn"></param>
/// <returns></returns>
public static SqlConnection ConnOpen(string conn)
{
try
{
SqlConnection myConn = new SqlConnection(ConfigurationManager.ConnectionStrings[conn].ConnectionString);
myConn.Open();
return myConn;
}
catch (SqlException ex)
{
throw ex;
}
} /// <summary>
/// 关闭数据库链接
/// </summary>
/// <param name="myConn">数据库连接对象SqlConnection</param>
public static void ConnClose(SqlConnection myConn)
{
try
{ if (myConn.State == ConnectionState.Open)
{
myConn.Close();
myConn.Dispose();
}
}
catch (SqlException ex)
{
throw ex;
}
} /// <summary>
/// 获取SqlDataReader 带参
/// </summary>
/// <param name="strSql">Sql语句</param>
/// <param name="myConn">SqlConnection</param>
/// <returns>SqlDataReader</returns>
public static SqlDataReader ExecuteReader(string strSql, SqlConnection myConn, params SqlParameter[] cmdParms)
{
try
{
SqlDataReader myDr;
SqlCommand myComm = GetSqlCommand(strSql, myConn, cmdParms);
myDr = myComm.ExecuteReader();
myComm.Dispose();
return myDr;
}
catch (SqlException ex)
{
throw ex;
}
} /// <summary>
/// 获取SqlDataReader 无参
/// </summary>
/// <param name="strSql">Sql语句</param>
/// <param name="myConn">SqlConnection</param>
/// <returns>SqlDataReader</returns>
public static SqlDataReader ExecuteReader(string strSql, SqlConnection myConn)
{
try
{
SqlDataReader myDr;
SqlCommand myComm = GetSqlCommand(strSql, myConn, null);
myDr = myComm.ExecuteReader();
myComm.Dispose();
return myDr;
}
catch (SqlException ex)
{
throw ex;
}
} /// <summary>
/// 执行sql语句(有参数)
/// </summary>
/// <param name="strSql">sql语句</param>
/// <param name="cmdParms">参数</param>
/// <returns>返回影响行数</returns>
public static int ExecuteNonQuery(string strSql, SqlConnection myConn, params SqlParameter[] cmdParms)
{
int Result = -;
try
{
SqlCommand myComm = GetSqlCommand(strSql, myConn, cmdParms);
Result = myComm.ExecuteNonQuery();
myComm.Dispose();
WriteLog(strSql, cmdParms);
}
catch (SqlException ex)
{
throw ex;
}
return Result;
}
/// <summary>
/// 执行sql语句(无参数)
/// </summary>
/// <param name="strSql">sql语句</param>
/// <param name="cmdParms">参数</param>
/// <returns>返回影响行数</returns>
public static int ExecuteNonQuery(string strSql, SqlConnection myConn)
{
int Result = -;
try
{
SqlCommand myComm = GetSqlCommand(strSql, myConn, null);
Result = myComm.ExecuteNonQuery();
myComm.Dispose();
WriteLog(strSql);
}
catch (SqlException ex)
{
throw ex;
}
return Result;
} public static int ExecuteNonQueryLog(string strSql, SqlConnection myConn, params SqlParameter[] cmdParms)
{
int Result = -;
try
{
SqlCommand myComm = GetSqlCommand(strSql, myConn, cmdParms);
Result = myComm.ExecuteNonQuery();
myComm.Dispose();
}
catch (SqlException ex)
{
throw ex;
}
return Result;
} /// <summary>
/// 获取DataSet 带参
/// </summary>
/// <param name="strSql">sql语句</param>
/// <param name="myConn">数据库连接</param>
/// <returns>DataSet</returns>
public static DataSet GetDataSet(string strSql, SqlConnection myConn, params SqlParameter[] cmdParms)
{ try
{
DataSet ds = new DataSet();
SqlCommand sqlCommand = GetSqlCommand(strSql, myConn, cmdParms);
SqlDataAdapter adpt = new SqlDataAdapter(sqlCommand);
adpt.Fill(ds);
adpt.Dispose();
return ds;
}
catch (SqlException ex)
{
throw ex;
}
} /// <summary>
/// 获取DataSet 无参
/// </summary>
/// <param name="strSql">sql语句</param>
/// <param name="myConn">数据库连接</param>
/// <returns>DataSet</returns>
public static DataSet GetDataSet(string strSql, SqlConnection myConn)
{ try
{
DataSet ds = new DataSet();
SqlCommand sqlCommand = GetSqlCommand(strSql, myConn, null);
SqlDataAdapter adpt = new SqlDataAdapter(sqlCommand);
adpt.Fill(ds);
adpt.Dispose();
return ds;
}
catch (SqlException ex)
{
throw ex;
}
} /// <summary>
/// 执行SQL,返回结果集中第一行第一列(带参数)
/// </summary>
/// <param name="sql">SQL语句</param>
/// <returns>object</returns>
public static object ExecuteScalar(string strSql, SqlConnection myConn, params SqlParameter[] cmdParms)
{
try
{
SqlCommand sqlCommand = GetSqlCommand(strSql, myConn, cmdParms);
object flag = sqlCommand.ExecuteScalar();
return flag;
}
catch (SqlException ex)
{
throw ex;
}
} /// <summary>
/// 执行SQL,返回结果集中第一行第一列(不带参数)
/// </summary>
/// <param name="sql">SQL语句</param>
/// <returns>object</returns>
public static object ExecuteScalar(string strSql, SqlConnection myConn)
{
try
{
SqlCommand sqlCommand = GetSqlCommand(strSql, myConn, null);
object flag = sqlCommand.ExecuteScalar();
return flag;
}
catch (SqlException ex)
{
throw ex;
}
}
/// <summary>
/// 获取DataTable带参
/// </summary>
/// <param name="strSql">sql语句</param>
/// <param name="myConn">数据库连接</param>
/// <returns>DataSet</returns>
public static DataTable GetDataTable(string strSql, SqlConnection myConn, params SqlParameter[] cmdParms)
{
try
{
DataTable dt = new DataTable();
SqlCommand sqlCommand = new SqlCommand(); sqlCommand = GetSqlCommand(strSql, myConn, cmdParms);
SqlDataAdapter adpt = new SqlDataAdapter(sqlCommand);
adpt.Fill(dt);
adpt.Dispose();
return dt;
}
catch (SqlException ex)
{
throw ex;
}
}
/// <summary>
/// 获取DataTable 无参
/// </summary>
/// <param name="strSql">sql语句</param>
/// <param name="myConn">数据库连接</param>
/// <returns>DataSet</returns>
public static DataTable GetDataTable(string strSql, SqlConnection myConn)
{
try
{
DataTable dt = new DataTable();
SqlCommand sqlCommand = new SqlCommand(); sqlCommand = GetSqlCommand(strSql, myConn, null);
SqlDataAdapter adpt = new SqlDataAdapter(sqlCommand);
adpt.Fill(dt);
adpt.Dispose();
return dt;
}
catch (SqlException ex)
{
throw ex;
}
} private static SqlCommand GetSqlCommand(string strSql, SqlConnection myConn, params SqlParameter[] cmdParms)
{
try
{
SqlCommand myComm = new SqlCommand();
//设置数据库连接
myComm.Connection = myConn;
//设置Sql语句
myComm.CommandText = strSql;
//设置Sql执行方式
myComm.CommandType = CommandType.Text;
//等待时间
myComm.CommandTimeout = ; if (cmdParms != null)
{
foreach (SqlParameter parameter in cmdParms)
{
if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
(parameter.Value == null))
{
parameter.Value = DBNull.Value;
}
myComm.Parameters.Add(parameter);
}
}
return myComm;
}
catch (SqlException ex)
{
throw ex;
}
} public static void WriteLog(string sql, params SqlParameter[] cmdParms)
{
string straction = "";
string strtablename = "";
string strsql = sql.Trim(); if (strsql.ToLower().Trim().IndexOf("insert") == )
{
straction = "insert";
strtablename = sql.Trim().ToLower().Replace("insert", "").Trim().Replace("into", "").Trim().Split('(')[];
}
else if (strsql.ToLower().Trim().IndexOf("update") == )
{
straction = "update";
strtablename = sql.Trim().ToLower().Replace("update", "").Trim().Split(' ')[];
} if (cmdParms != null)
{
for (int i = ; i < cmdParms.Length; i++)
{
strsql = strsql.Replace(cmdParms[i].ParameterName, "'" + cmdParms [i].Value+ "'");
}
} SqlConnection conndef = ConnOpen("Default");
//写日志
int ilog = Convert.ToInt32(CommonClass.InsertSysLog(straction, "表:" + strtablename, strsql, conndef));//调用执行写系统日志
ConnClose(conndef);
} public static void WriteLog(string sql)
{
string straction = "";
string strtablename = "";
string strsql = sql.Trim(); if (strsql.ToLower().Trim().IndexOf("insert") == )
{
straction = "insert";
strtablename = sql.Trim().ToLower().Replace("insert", "").Trim().Replace("into", "").Trim().Split('(')[];
}
else if (strsql.ToLower().Trim().IndexOf("update") == )
{
straction = "update";
strtablename = sql.Trim().ToLower().Replace("update", "").Trim().Split(' ')[];
} SqlConnection conndef = ConnOpen("Default");
//写日志
int ilog = Convert.ToInt32(CommonClass.InsertSysLog(straction, "表:" + strtablename, strsql, conndef));//调用执行写系统日志
ConnClose(conndef);
} #endregion #region 存储过程 /// <summary>
/// 执行存储过程
/// </summary>
/// <param name="storedProcName">存储过程名</param>
/// <param name="parameters">存储过程参数</param>
/// <param name="tableName">DataSet结果中的表名</param>
/// <returns>DataSet</returns>
public static DataTable RunProcedure(SqlConnection conn, string storedProcName, IDataParameter[] parameters)
{
try
{
DataSet dataSet = new DataSet();
SqlDataAdapter sqlDA = new SqlDataAdapter();
sqlDA.SelectCommand = BuildQueryCommand(conn, storedProcName, parameters);
sqlDA.Fill(dataSet);
return dataSet.Tables[];
}
catch (Exception ex)
{ return null;
}
} /// <summary>
/// 构建 SqlCommand 对象(用来返回一个结果集,而不是一个整数值)
/// </summary>
/// <param name="connection">数据库连接</param>
/// <param name="storedProcName">存储过程名</param>
/// <param name="parameters">存储过程参数</param>
/// <returns>SqlCommand</returns>
private static SqlCommand BuildQueryCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters)
{
SqlCommand command = new SqlCommand(storedProcName, connection);
command.CommandType = CommandType.StoredProcedure;
foreach (SqlParameter parameter in parameters)
{
if (parameter != null)
{
// 检查未分配值的输出参数,将其分配以DBNull.Value.
if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
(parameter.Value == null))
{
parameter.Value = DBNull.Value;
}
command.Parameters.Add(parameter);
}
} return command;
} #endregion #region 事物操作
/// <summary>
/// 跨库事物处理
/// </summary>
/// <param name="SqlList"></param>
/// <returns></returns>
public static int ExecuteSqlTranEx(IList<CommandInfo> SqlList)
{
int result = ;
try
{
using (TransactionScope scope = new TransactionScope())
{
for (int i = ; i < SqlList.Count; i++)
{
SqlConnection myConn = new SqlConnection(ConfigurationManager.ConnectionStrings[SqlList[i].ConnStr].ConnectionString);
using (myConn)
{
myConn.Open();
SqlCommand myComm = GetSqlCommand(SqlList[i].Sql, myConn, SqlList[i].Parameters);
int r = myComm.ExecuteNonQuery();
result += ;
myConn.Dispose();
myConn.Close(); }
scope.Complete(); //提交事物
}
}
}
catch (Exception ex) //发生异常后自动回滚
{
//throw;
}
return result;
} /// <summary>
/// 执行多条SQL语句,实现数据库事务。
/// </summary>
/// <param name="SQLStringList">SQL语句的IList,Sql为CommandInfo.Sql,SqlParameter为CommandInfo.Parameters</param>
public static int ExecuteSqlTran(IList<CommandInfo> SqlList, SqlConnection SqlDrConn)
{ //当连接处于打开状态时关闭,然后再打开,避免有时候数据不能及时更新
if (SqlDrConn.State == ConnectionState.Open)
{
SqlDrConn.Close();
}
SqlDrConn.Open();
using (SqlTransaction trans = SqlDrConn.BeginTransaction())
{
SqlCommand sqlCommand = new SqlCommand();
try
{
//受影响总条数
int count = ;
//循环
foreach (CommandInfo myDE in SqlList)
{
string sql = myDE.Sql;
SqlParameter[] cmdParms = (SqlParameter[])myDE.Parameters;
sqlCommand = GetSqlCommand(sql, SqlDrConn, cmdParms);
sqlCommand.Transaction = trans;
int val = sqlCommand.ExecuteNonQuery();
if (val == )
{
trans.Rollback();
return ;
}
count += val;
sqlCommand.Parameters.Clear();
}
trans.Commit();
return count;
}
catch
{
trans.Rollback();
throw;
}
}
}
#endregion }
public class CommandInfo
{
public CommandInfo(string strSql, SqlParameter[] cmdParameters, string strconn)
{
this.Sql = strSql;
this.Parameters = cmdParameters;
this.ConnStr = strconn;
}
public CommandInfo(string strSql, SqlParameter[] cmdParameters)
{
this.Sql = strSql;
this.Parameters = cmdParameters;
}
/// <summary>
/// Sql语句
/// </summary>
public string Sql { set; get; }
/// <summary>
/// Sql参数
/// </summary>
public SqlParameter[] Parameters { set; get; }
/// <summary>
/// 数据库链接字符串 说明 跨库事务执行时使用
/// </summary>
public string ConnStr { set; get; }
}
}

-->
<configuration>
<connectionStrings>
<clear/>


<!--开发库-->
<add name="Default" connectionString="Data Source=211.149.217.181;Initial Catalog=DevFotileEcBossDB;User ID=sa;Password=ft!@12" providerName="System.Data.SqlClient"/>
<add name="MemberDB" connectionString="Data Source=211.149.217.181;Initial Catalog=DevMemberDB;User ID=sa;Password=ft!@12" providerName="System.Data.SqlClient"/>
<add name="WEBDB" connectionString="Data Source=211.149.217.181;Initial Catalog=DevWebDB;User ID=sa;Password=ft!@12" providerName="System.Data.SqlClient"/>
<add name="webadDB" connectionString="Data Source=211.149.217.181;Initial Catalog=ECwebadDB;User ID=sa;Password=ft!@12" providerName="System.Data.SqlClient"/>
<add name="CRMDB" connectionString="Data Source=211.149.217.181;Initial Catalog=ECCRMDB;User ID=sa;Password=ft!@12" providerName="System.Data.SqlClient"/>
<add name="ECSMS" connectionString="Data Source=211.149.217.181;Initial Catalog=ftSMS;User ID=sa;Password=ft!@12" providerName="System.Data.SqlClient"/>
<add name="CIOKMDB" connectionString="Data Source=211.149.217.181;Initial Catalog=CIOKMDB;User ID=sa;Password=ft!@12" providerName="System.Data.SqlClient"/>
<add name="SPSDB" connectionString="Data Source=211.149.217.181;Initial Catalog=DevSNSResourceDB;User ID=sa;Password=ft!@12" providerName="System.Data.SqlClient"/>
<add name="LOGDB" connectionString="Data Source=211.149.217.181;Initial Catalog=DevFotileEcBossDB;User ID=sa;Password=ft!@12" providerName="System.Data.SqlClient"/>
<add name="WDGJDB" connectionString="Data Source=211.149.197.100;Initial Catalog=WDGJDB;User ID=readonlysa;Password=ft!@12" providerName="System.Data.SqlClient"/>



</connectionStrings>
<appSettings>
<add key="authorizedSequence" value="2c9f62803bcc4478bb3fe6ea227cb7d3"/>
</appSettings>

 

DBHerperl类的更多相关文章

  1. Java类的继承与多态特性-入门笔记

    相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...

  2. C++ 可配置的类工厂

    项目中常用到工厂模式,工厂模式可以把创建对象的具体细节封装到Create函数中,减少重复代码,增强可读和可维护性.传统的工厂实现如下: class Widget { public: virtual i ...

  3. Android请求网络共通类——Hi_博客 Android App 开发笔记

    今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...

  4. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

  5. ASP.NET Core 折腾笔记二:自己写个完整的Cache缓存类来支持.NET Core

    背景: 1:.NET Core 已经没System.Web,也木有了HttpRuntime.Cache,因此,该空间下Cache也木有了. 2:.NET Core 有新的Memory Cache提供, ...

  6. .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类

    .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类 0x00 为什么要引入扩展方法 有的中间件功能比较简单,有的则比较复杂,并且依赖其它组件.除 ...

  7. Java基础Map接口+Collections工具类

    1.Map中我们主要讲两个接口 HashMap  与   LinkedHashMap (1)其中LinkedHashMap是有序的  怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...

  8. PHP-解析验证码类--学习笔记

    1.开始 在 网上看到使用PHP写的ValidateCode生成验证码码类,感觉不错,特拿来分析学习一下. 2.类图 3.验证码类部分代码 3.1  定义变量 //随机因子 private $char ...

  9. C# 多种方式发送邮件(附帮助类)

    因项目业务需要,需要做一个发送邮件功能,查了下资料,整了整,汇总如下,亲测可用- QQ邮箱发送邮件 #region 发送邮箱 try { MailMessage mail = new MailMess ...

随机推荐

  1. java对像序列化

    package cn.stat.p2.demo; import java.io.FileInputStream; import java.io.FileNotFoundException; impor ...

  2. 【转】C++中的位拷贝与值拷贝

    [转]http://blog.csdn.net/liam1122/article/details/1966617 为了便于说明我们以String类为例: 首先定义String类,而并不实现其成员函数. ...

  3. Chrome调试nodejs

    1.安装node-inspector 命令: npm install -g node-inspector 2.nodemon --debug xxx.js启动项目(如果使用--debug-brk 就会 ...

  4. 关于qq创始人----马化腾的一些琐事

    马化腾(pony)写代码的水平如何? 一位产品经理吐槽: 曾经和pony一起写过代码. 当时5个人挤在一个只有四个位置的房间里,埋头开发,用C++.我当时负责写一个通讯模块,有一个bug弄了两天,没有 ...

  5. 解决redis-cli连接时出现Could not connect to Redis at 127.0.0.1:6379: Connection refused

    执行redis 配置文件 redis-server  /etc/redis/redis.conf

  6. jQuery实现的全选、反选和不选功能

    适用于网页多选后需要进行批量操作的场景(如批量删除等).如有问题希望大家可以指正.谢谢~~ HTML 我们的页面上有一个歌曲列表,列出多行歌曲名称,并匹配复选框供用户选择,并且在列表下方有一排操作按钮 ...

  7. (转载)Python装饰器学习

    转载出处:http://www.cnblogs.com/rhcad/archive/2011/12/21/2295507.html 这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方 ...

  8. 我和小美的撸码日记(2)之第一个基于MVC+Jqgrid的列表页面

    一.前言 “尼玛哥,上周你教我改了下OA系统UI,黄总看了很满意呀.”    “不错不错,看来小美进步很大,可以提前结束试用期,到时候加工资别忘了请我吃饭呀!”    “尼玛哥,你有女朋友了吗?” “ ...

  9. iOS 的 APP 在系统中如何适配不同的屏幕的尺寸

    iOS 的 APP 在系统中如何适配不同的屏幕的尺寸 标签: 2007年,初代iPhone发布,屏幕的宽高是 320 x 480 像素.下文也是按照宽度,高度的顺序排列.这个分辨率一直到iPhone ...

  10. pfsense下的流量管理(转)

    http://www.pppei.net/blog/post/331 在作流量管理时,这些概念很重要,不要迷失.. 这里再对Limiter 的源地址和目的地址做个说明,因为limiter是被应用在La ...