SqlHelper include Transaction
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的更多相关文章
- 微软版的SqlHelper.cs类
一,微软SQLHelper.cs类 中文版: using System; using System.Data; using System.Xml; using System.Data.SqlClien ...
- SqlHelper类
using System; using System.Collections; using System.Collections.Generic; using System.Data; using S ...
- 【2016-11-2】【坚持学习】【Day17】【微软 推出的SQLHelper】
从网络上找到 微软原版本的SQLHelper,很多行代码.认真看了,学习了. 代码: using System; using System.Data; using System.Xml; usin ...
- SqlHelper c#
using System; using System.Data; using System.Xml; using System.Data.SqlClient; using System.Collect ...
- SQLHelper
今天学习了.net后,经过老师的一番讲解,似乎对它越来越渴望了,希望自己在接下来的学习当中,能很好的驾驭.net,加油吧, 下面我分享一个操作SQL数据库的代码大全,谢谢观赏.嘿嘿,还是比较长的哦, ...
- C#版SQLHelper.cs类
using System; using System.Data; using System.Xml; using System.Data.SqlClient; using System.Collect ...
- 微软SQLHelper.cs类 中文版
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Co ...
- 万能的SQLHelper帮助类
/// <summary> /// 数据库帮助类 /// </summary> public class SQLHelper { private static string c ...
- 微软原版SQLHelper类
代码 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-- ...
随机推荐
- 阿里 Java面试 知识点
摘自: http://blog.csdn.net/wtyvhreal/article/details/45291835 =================================== 基础知识 ...
- leetcode 104
104. Maximum Depth of Binary Tree Given a binary tree, find its maximum depth. The maximum depth is ...
- 去HTML代码
Code: public static string NoHTML(string Htmlstring) { //删除脚本 Htmlstring = Regex.Replace(Htmlstring, ...
- 五、Eclipse编写struts.xml没有提示的问题
五.Eclipse编写struts.xml没有提示的问题 原因:找不到约束文件 解决: 联网 手工配 a.eclipse的菜单:window\preferences
- Spring Richclient — 企业级富客户端开发框架介绍,第 1 部分
Spring Richclient — 企业级富客户端开发框架介绍,第 1 部分 http://www.ibm.com/developerworks/cn/java/j-lo-spring-richc ...
- freefilesync 7 使用
官方下载地址:http://www.freefilesync.org/download.php 1.打开FreeFileSync 设置左右的文件夹,设置过滤规则,设置同步方式(双向.单向),执行同步 ...
- SQLite中命令行程序(CLP)的使用
SQLite CLP是使用和管理SQLite数据库最常用的工具.它在所有平台上的操作方式相同.CLP其实是两个程序,它可以运行在Shell模式下以交互的方式执行查询操作,也可以运行在命令行模式下完成各 ...
- rails devise使用
gem 'devise'rails g devise:install Userrails g devise Userrails g devise:views
- javascript中方法调用与方括号[]
看jquery时遇到一行: $(this)["removeClass"]("selected"); 这一行等同于下面的一行: $(this).removeCla ...
- 关于消除超长的case列表的一个思路
最近项目里面涉及和低层通信的一个模块,因为需要定义通信协议,然后一大堆指令,定义一个枚举的话就能看到几十上百的数据项,匹配操作的时候,那么问题来了,尼玛,这么多的case看着就头晕,就有了一个想法:怎 ...