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. ORA-00031: session marked for kill 处理Oracle中杀不掉的锁

    一些ORACLE中的进程被杀掉后,状态被置为"killed",但是锁定的资源很长时间不释放,有时实在没办法,只好重启数据库.现在提供一种方法解决这种问题,那就是在ORACLE中杀不 ...

  2. PowerDesigner英文字段转换中文字段显示

    get_comments.vbs代码如下点击Run Option Explicit ValidationMode = True InteractiveMode = im_Batch Dim mdl ' ...

  3. Semantic UI 使用回调函数

    html代码: <div class="ui dropdown item" id="region"> <div class="tex ...

  4. mac ping ip地址

    Mac下有个类似于Windows下CMD的模式叫做终端,但是这个模式和Windows下的CMD有着很大的差别. 工具/原料 Mac电脑一台 方法/步骤   首先通过菜单栏的搜索功能找到“终端”,也可以 ...

  5. Windowsphone本地应用信息与市场信息的获取

    本地信息都存放在 WMAppManifest 里面,获取就不用说了...知道位置 就知道怎么获取了.. 主要是讲那个 市场上面的详情怎么获取,就是API调用显示在这个页面里面的详情: public v ...

  6. 遇到困难 jsp代码onclick="javascript:return(checklogin());"报错

    <script language="javascript"> function checklogin() { if (document.getElementById(& ...

  7. WWDC————苹果全球开发者大会

    WWDC:Apple Worldwide Developers Conference(苹果全球开发者)的简称,每年定期由苹果公司(Apple Inc.)在美国举办.大会主要的目的是让苹果公司向研发者们 ...

  8. 【转】准确理解CSS clear:left/right的含义及实际用途

    零.说点什么 好久没更新了.并不是在折腾什么大作,而是广度学习与实践中,加上婚礼等诸多大事,所以产出较少. 今天这篇也只是小作,博客是自己很好的学习工具,只要我学习不止,博客也会不断更新的. 我们平时 ...

  9. sql,插入最大值加1

    insert into aa (id,name) values((select case when max(id) is null then 1 else max(id)+1 end from aa) ...

  10. Linux忘记密码的解救方法

    Linux版本 centos5.6 64bit 环境 vmware 忘记密码 解决方法1: 重启系统, 一.重启系统,在系统引导前按任意键进入菜单.如图:GRUB: 在引导装载程序菜单上,用上下方向键 ...