using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Common;
using System.Data;
using System.Collections;
using System.Reflection;
using System.Collections.Specialized;
using System.Configuration;
using System.ComponentModel;
using System.IO;
using System.Text.RegularExpressions;
using CP.Utility; namespace CP.DBService
{
public class DBHelper
{
protected string ConnectionString { get; set; }
protected DataBaseType DBType { get; set; }
private static DBHelper helper;
private static bool hasRead = false;
private static DBHelper gpmHelper;
protected DBHelper() { }
/// <summary>
/// 创建单例模式
/// </summary>
/// <param name="connectionString"></param>
/// <param name="dbType"></param>
/// <returns></returns>
public static DBHelper CreateInstance()
{
if (helper == null)
{
helper = new DBHelper();
helper.ConnectionString = EncryptHelper.DecryptDES(ConfigurationManager.ConnectionStrings["BizConnectionString"].ConnectionString, "masicsyc");
//helper.ConnectionString = ConfigurationManager.ConnectionStrings["BizConnectionString"].ConnectionString;
helper.DBType = DataBaseType.Oracle;
}
return helper;
} public static DBHelper GPMCreateInstance()
{
if (gpmHelper == null)
{
gpmHelper = new DBHelper();
gpmHelper.ConnectionString = EncryptHelper.DecryptDES(ConfigurationManager.ConnectionStrings["GPMConnectionString"].ConnectionString, "masicgpm");
//helper.ConnectionString = ConfigurationManager.ConnectionStrings["GPMConnectionString"].ConnectionString;
gpmHelper.DBType = DataBaseType.Oracle;
}
return gpmHelper;
} public static DBHelper CreateNonSingleTonInstance()
{
helper = new DBHelper();
helper.ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
helper.DBType = DataBaseType.Oracle;
return helper; } DbTransaction transaction = null;
public DbTransaction Transaction
{
get { return transaction; }
set { transaction = value; }
}
public void Commit()
{
Transaction.Commit();
Transaction = null;
GC.Collect();
}
public void Rollback()
{
Transaction.Rollback();
Transaction = null;
GC.Collect();
}
public virtual void BeginTransaction()
{
DbConnection transConnection = CreateConnection();
DbTransaction transaction = transConnection.BeginTransaction();
Transaction = transaction;
}
public virtual void CloseConnection(DbConnection connection)
{
if (Transaction == null)
connection.Close();
}
/// <summary>
/// 创建连接
/// </summary>
/// <returns></returns>
protected DbConnection CreateConnection()
{
if (Transaction != null) return Transaction.Connection;
DbConnection connection = null;
switch (DBType)
{
case DataBaseType.Access:
connection = new System.Data.OleDb.OleDbConnection(ConnectionString);
break;
case DataBaseType.MySql:
connection = new System.Data.OleDb.OleDbConnection(ConnectionString);
break;
case DataBaseType.Oracle:
connection = new System.Data.OracleClient.OracleConnection(ConnectionString);
break;
case DataBaseType.SqlServer:
connection = new System.Data.SqlClient.SqlConnection(ConnectionString);
break;
}
connection.Open();
return connection;
}
public DbCommand CreateCommand()
{
DbCommand command = CreateConnection().CreateCommand();
command.Transaction = Transaction;
return command;
}
/// <summary>
/// 创建命令
/// </summary>
/// <param name="connection"></param>
/// <param name="sqlSegment"></param>
/// <param name="parameters"></param>
/// <returns></returns>
protected DbCommand CreateCommand(DbConnection connection, string sqlSegment, IDataParameter[] parameters, CommandType commandType)
{
DbCommand command = connection.CreateCommand();
command.CommandText = sqlSegment;
command.CommandType = commandType;
if (parameters != null)
command.Parameters.AddRange(parameters);
command.Transaction = Transaction;
return command;
}
/// <summary>
/// 创建适配器
/// </summary>
/// <param name="connection"></param>
/// <param name="sqlSegment"></param>
/// <param name="parameters"></param>
/// <returns></returns>
protected DbDataAdapter CreateAdapter(DbConnection connection, string sqlSegment, IDataParameter[] parameters, CommandType commandType)
{
DbCommand command = CreateCommand(connection, sqlSegment, parameters, commandType);
command.CommandText = sqlSegment;
//command.CommandType = commandType;
//if (parameters != null)
// command.Parameters.AddRange(parameters); DbDataAdapter adapter = null;
switch (DBType)
{
case DataBaseType.Access:
adapter = new System.Data.OleDb.OleDbDataAdapter((System.Data.OleDb.OleDbCommand)command);
break;
case DataBaseType.MySql:
adapter = new System.Data.OleDb.OleDbDataAdapter((System.Data.OleDb.OleDbCommand)command);
break;
case DataBaseType.Oracle:
adapter = new System.Data.OracleClient.OracleDataAdapter((System.Data.OracleClient.OracleCommand)command);
break;
case DataBaseType.SqlServer:
adapter = new System.Data.SqlClient.SqlDataAdapter((System.Data.SqlClient.SqlCommand)command);
break;
}
return adapter;
} public virtual T ExecuteScalar<T>(string sqlSegment)
{
return ExecuteScalar<T>(sqlSegment, null);
}
public virtual T ExecuteScalar<T>(string sqlSegment, IDataParameter[] parameters)
{
return ExecuteScalar<T>(sqlSegment, null, CommandType.Text);
}
public virtual T ExecuteScalar<T>(string sqlSegment, CommandType commandType)
{
return ExecuteScalar<T>(sqlSegment, null, commandType);
}
public virtual T ExecuteScalar<T>(string sqlSegment, IDataParameter[] parameters, CommandType commandType)
{
T result = default(T);
object value = ExecuteScalar(sqlSegment, parameters, commandType); if (value != null && value != DBNull.Value)
{
result = (T)TypeDescriptor.GetConverter(typeof(T)).ConvertFrom(value.ToString());
}
return result;
} public virtual object ExecuteScalar(string sqlSegment)
{
return ExecuteScalar(sqlSegment, null);
}
public virtual object ExecuteScalar(string sqlSegment, IDataParameter[] parameters)
{
return ExecuteScalar(sqlSegment, null, CommandType.Text);
}
public virtual object ExecuteScalar(string sqlSegment, CommandType commandType)
{
return ExecuteScalar(sqlSegment, null, commandType);
}
public virtual object ExecuteScalar(string sqlSegment, IDataParameter[] parameters, CommandType commandType)
{
DbConnection connection = CreateConnection();
DbCommand command = CreateCommand(connection, sqlSegment, parameters, commandType); object result = command.ExecuteScalar();
command.Parameters.Clear();
CloseConnection(connection);
return result;
} /// <summary>
/// 执行SQL语句,返回影响的记录数,用于增/删/改数据
/// </summary>
/// <param name="sqlSegment"></param>
/// <param name="parameters"></param>
/// <returns></returns>
public virtual int ExecuteNonQuery(string sqlSegment)
{
return ExecuteNonQuery(sqlSegment, null, CommandType.Text);
}
public virtual int ExecuteNonQuery(string sqlSegment, IDataParameter[] parameters)
{
return ExecuteNonQuery(sqlSegment, null, CommandType.Text);
}
public virtual int ExecuteNonQuery(string sqlSegment, CommandType commandType)
{
return ExecuteNonQuery(sqlSegment, null, commandType);
}
public virtual int ExecuteNonQuery(string sqlSegment, IDataParameter[] parameters, CommandType commandType)
{
DbConnection connection = CreateConnection();
DbCommand command = CreateCommand(connection, sqlSegment, parameters, commandType);
int result = command.ExecuteNonQuery();
command.Parameters.Clear();
CloseConnection(connection);
return result;
} /// <summary>
/// 执行SQL语句,返回一张表,用于查询数据
/// </summary>
/// <param name="sqlSegment"></param>
/// <param name="parameters"></param>
/// <returns></returns>
public virtual DataTable ExecuteDataTable(string sqlSegment)
{
return ExecuteDataTable(sqlSegment, null);
}
public virtual DataTable ExecuteDataTable(string sqlSegment, IDataParameter[] parameters)
{
return ExecuteDataTable(sqlSegment, null, CommandType.Text);
}
public virtual DataTable ExecuteDataTable(string sqlSegment, IDataParameter[] parameters, CommandType commandType)
{ DataTable dataTable = new DataTable();
DbConnection connection = CreateConnection();
DbDataAdapter adapter = CreateAdapter(connection, sqlSegment, parameters, commandType);
adapter.Fill(dataTable);
adapter.SelectCommand.Parameters.Clear();
CloseConnection(connection);
return dataTable; } /// <summary>
/// 执行SQL语句,返回一个Reader对象,用于查询数据
/// </summary>
/// <param name="sqlSegment"></param>
/// <param name="parameters"></param>
/// <returns></returns>
//public virtual DbDataReader ExecuteReader(string sqlSegment)
//{
// return ExecuteReader(sqlSegment, null);
//}
//public virtual DbDataReader ExecuteReader(string sqlSegment, IDataParameter[] parameters)
//{
// return ExecuteReader(sqlSegment, null,CommandType.Text);
//}
//public virtual DbDataReader ExecuteReader(string sqlSegment, IDataParameter[] parameters,CommandType commandType)
//{
// DbConnection connection = CreateConnection();
// DbCommand command = CreateCommand(connection, sqlSegment, parameters,commandType);
// DbDataReader reader = command.ExecuteReader();
// return reader;
//} public virtual IList<T> ExecuteObject<T>(string sqlSegment)
{
return ExecuteObject<T>(sqlSegment, null);
}
public virtual IList<T> ExecuteObject<T>(string sqlSegment, IDataParameter[] parameters)
{
return ExecuteObject<T>(sqlSegment, parameters, CommandType.Text);
}
public virtual IList<T> ExecuteObject<T>(string sqlSegment, IDataParameter[] parameters, CommandType commandType)
{
return ExecuteObject<T>(sqlSegment, parameters, commandType, null);
}
public virtual IList<T> ExecuteObject<T>(string sqlSegment, IDataParameter[] parameters, CommandType commandType, string entity_type)
{
DbConnection connection = CreateConnection();
DbCommand command = CreateCommand(connection, sqlSegment, parameters, commandType); IList<T> entities = new List<T>();
try
{
using (DbDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
T entity = Activator.CreateInstance<T>();
if (!string.IsNullOrEmpty(entity_type))
{
entity = (T)PortalService.CreateEntity(entity_type);
} var properties = entity.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (var property in properties)
{
object value = reader[property.Name];
object new_value = null;
if (value == null || value == DBNull.Value)
{
if (property.PropertyType == typeof(int) ||
property.PropertyType == typeof(Int32))
new_value = ;
if (property.PropertyType == typeof(decimal))
new_value = 0m;
if (property.PropertyType == typeof(float))
new_value = 0f;
if (property.PropertyType == typeof(double))
new_value = 0d;
if (property.PropertyType == typeof(bool))
new_value = false;
if (property.PropertyType == typeof(DateTime))
new_value = DateTime.MinValue;
}
else
{
if (property.PropertyType == value.GetType())
new_value = value;
else if (property.PropertyType == typeof(DateTime?))
new_value = value;
else if (property.PropertyType == typeof(bool))
new_value = value.ToString() == "" ? false : true;
else if (property.PropertyType == typeof(byte[]))
new_value = (byte[])value;
else
new_value = TypeDescriptor.GetConverter(property.PropertyType).ConvertFrom(value.ToString()); //if (new_value != null)
//{
// //if (new_value.GetType() == typeof(string) && new_value.ToString() == " ")
// // new_value = "";
// if (new_value.GetType() == typeof(decimal) && (decimal)new_value != 0m && new_value.ToString().IndexOf(".") > 0)
// {
// string str_new_value = new_value.ToString();
// str_new_value = Regex.Replace(str_new_value, "0+$", "");
// new_value = decimal.Parse(str_new_value);
// }
//}
} property.SetValue(entity, new_value, null);
}
entities.Add(entity);
}
reader.Close(); }
}
catch (Exception ex)
{
throw new Exception("执行SQL语句发生错误:" + sqlSegment + ".详细描述" + ex.Message, ex);
}
finally
{
CloseConnection(connection);
}
command.Parameters.Clear();
return entities; } public virtual T ExecuteSingleObject<T>(string sqlSegment)
{
return ExecuteSingleObject<T>(sqlSegment, null);
}
public virtual T ExecuteSingleObject<T>(string sqlSegment, IDataParameter[] parameters)
{
return ExecuteSingleObject<T>(sqlSegment, parameters, CommandType.Text);
}
public virtual T ExecuteSingleObject<T>(string sqlSegment, IDataParameter[] parameters, CommandType commandType)
{
return ExecuteSingleObject<T>(sqlSegment, parameters, commandType, null);
}
public virtual T ExecuteSingleObject<T>(string sqlSegment, IDataParameter[] parameters, CommandType commandType, string entity_type)
{
DbConnection connection = CreateConnection();
DbCommand command = CreateCommand(connection, sqlSegment, parameters, commandType); T entity = Activator.CreateInstance<T>();
try
{
using (DbDataReader reader = command.ExecuteReader())
{
if (reader.Read())
{
if (!string.IsNullOrEmpty(entity_type))
{
entity = (T)PortalService.CreateEntity(entity_type);
} var properties = entity.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (var property in properties)
{
object value = reader[property.Name];
object new_value = null;
if (value == DBNull.Value)
{
if (property.PropertyType == typeof(int) ||
property.PropertyType == typeof(Int32))
new_value = ;
if (property.PropertyType == typeof(decimal))
new_value = 0m;
if (property.PropertyType == typeof(float))
new_value = 0f;
if (property.PropertyType == typeof(double))
new_value = 0d;
if (property.PropertyType == typeof(bool))
new_value = false;
if (property.PropertyType == typeof(DateTime))
new_value = DateTime.MinValue;
}
else
{
if (property.PropertyType == value.GetType())
new_value = value;
else if (property.PropertyType == typeof(DateTime?))
new_value = value;
else if (property.PropertyType == typeof(bool))
new_value = value.ToString() == "" ? false : true;
else if (property.PropertyType == typeof(byte[]))
new_value = (byte[])value;
else
new_value = TypeDescriptor.GetConverter(property.PropertyType).ConvertFrom(value.ToString());
} property.SetValue(entity, new_value, null);
}
reader.Close();
}
}
}
catch (Exception ex)
{
throw new Exception("执行SQL语句发生错误:" + sqlSegment + ".详细描述" + ex.Message, ex);
}
finally
{
CloseConnection(connection);
}
command.Parameters.Clear();
return entity;
} public virtual IList<T> ExecuteSimpleTypeList<T>(string sqlSegment)
{
return ExecuteSimpleTypeList<T>(sqlSegment, null);
}
public virtual IList<T> ExecuteSimpleTypeList<T>(string sqlSegment, IDataParameter[] parameters)
{
return ExecuteSimpleTypeList<T>(sqlSegment, parameters, CommandType.Text);
}
public virtual IList<T> ExecuteSimpleTypeList<T>(string sqlSegment, IDataParameter[] parameters, CommandType commandType)
{
DbConnection connection = CreateConnection();
DbCommand command = CreateCommand(connection, sqlSegment, parameters, commandType); IList<T> entities = new List<T>();
try
{
using (DbDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
T result = default(T);
object value = reader[];
if (value == null || value == DBNull.Value)
continue;
result = (T)TypeDescriptor.GetConverter(typeof(T)).ConvertFrom(value.ToString());
entities.Add(result);
}
reader.Close();
}
}
catch (Exception ex)
{
throw new Exception("执行SQL语句发生错误:" + sqlSegment + ".详细描述" + ex.Message, ex);
}
finally
{
CloseConnection(connection);
}
command.Parameters.Clear();
return entities;
} } public enum DataBaseType
{
Access,
SqlServer,
Oracle,
MySql
}
}
  

SqlHelper include Transaction的更多相关文章

  1. 微软版的SqlHelper.cs类

    一,微软SQLHelper.cs类 中文版: using System; using System.Data; using System.Xml; using System.Data.SqlClien ...

  2. SqlHelper类

    using System; using System.Collections; using System.Collections.Generic; using System.Data; using S ...

  3. 【2016-11-2】【坚持学习】【Day17】【微软 推出的SQLHelper】

    从网络上找到 微软原版本的SQLHelper,很多行代码.认真看了,学习了.  代码:  using System; using System.Data; using System.Xml; usin ...

  4. SqlHelper c#

    using System; using System.Data; using System.Xml; using System.Data.SqlClient; using System.Collect ...

  5. SQLHelper

    今天学习了.net后,经过老师的一番讲解,似乎对它越来越渴望了,希望自己在接下来的学习当中,能很好的驾驭.net,加油吧, 下面我分享一个操作SQL数据库的代码大全,谢谢观赏.嘿嘿,还是比较长的哦, ...

  6. C#版SQLHelper.cs类

    using System; using System.Data; using System.Xml; using System.Data.SqlClient; using System.Collect ...

  7. 微软SQLHelper.cs类 中文版

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Co ...

  8. 万能的SQLHelper帮助类

    /// <summary> /// 数据库帮助类 /// </summary> public class SQLHelper { private static string c ...

  9. 微软原版SQLHelper类

    代码 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-- ...

随机推荐

  1. win7发送到菜单

    在文件浏览器地址栏输入 shell:sendto

  2. 条款20 STL函数对象

    继承标准STL的函数对象 1: struct PopLess : public atd::binary_function<state,state,bool> 2: { 3: bool op ...

  3. 在centos下安装django

    这里有一个不错的Django的学习资料.先收藏一下,以备后用.谢谢 http://www.ziqiangxuetang.com/django/django-install.html 在centos下安 ...

  4. 结合Git实现Mysql差异备份,可用于生产环境

    埋头苦干多年一直没写过文章,今天突发狂想,为LNMP阵营贡献一些力量.就从平时工作过程中的心得和一些技巧分享出来.今天就猿们最熟悉的Mysql开始宅鸟的开篇博客文章.欢迎猿们拍砖.转载. 注意:宅鸟的 ...

  5. c#高效比对大量图片

    比较图片的方法 以前传统的比较方式是遍历图片中的每一个像素,然后进行比对.这样的比对在少量图片的比对上虽然效率低一点,但是也没有什么不好.但是在大量图片比对的时候,过长的反应时间和对服务器比较高的消耗 ...

  6. 学习web前端开发感想

    1.学习一个技术,不是一看见源代码就是copy,而是仔细阅读后,找到自己想要的,并且自己写出来,自己理解了,下次遇到同样的问题,自己才能解决. 2.在电脑上学习的过程中,我总是先建立一个文本文档,这样 ...

  7. Hbase负载均衡流程以及源码

    hmater负责把region均匀到各个region server .hmaster中有一个线程任务是专门处理负责均衡的,默认每隔5分钟执行一次. 每次负载均衡操作可以分为两步: 生成负载均衡计划表 ...

  8. [terry笔记]更改oracle用户名

    更改oracle的用户名 之前有个需求,整理一个schema的表.索引等规划到一个表空间里,利用expdp/impdp然后remap就完成了,但是整理好的用户名remap变更了,应用又不想修改其连接信 ...

  9. ruby on rails 实战(一)

    通过ruby on rails 一步一步搭建个人站点,涉及到的技术有:ruby,rails,javascript,jquery 操作系统:win7 IDE: rubymine 5.4. 第一步,下载安 ...

  10. WPF socket通讯 UDP接收消息

    客户端: private Socket socket; private IPEndPoint ipEndPoint; private void sendMessageHandler() { //服务端 ...