EnterpriseLibrary企业库中数据库封装
来源:互联网 发布:linux关闭selinux 编辑:程序博客网 时间:2024/05/17 04:38
/* 创建者:[曾伟强]
* 创建时间:2011年5月4日
* 类名: Bosera.Common.DB.DBCommon
* 用途:数据库通用操作
*/
using System;
using System.Data;
using System.Data.Common;
using System.Collections.Generic;
using Microsoft.Practices.EnterpriseLibrary.Data;
using Microsoft.Practices.EnterpriseLibrary.Data.Oracle;
namespace Bosera.Common.DB
{
/// <summary>
/// 数据库操作通用类
/// </summary>
public static class DBCommon
{
private readonly static string connString = "data source=;user id=;password=;";
#region 创建DataBase
/// <summary>
/// 创建DataBase数据操作对象
/// </summary>
/// <returns>数据操作对象实例</returns>
public static Database GetDataBase()
{
//return DatabaseFactory.CreateDatabase();
//创建一个默认的数据库实例
return new OracleDatabase(connString);
}
#endregion
#region DataSet
/// <summary>
/// 执行查询语句
/// </summary>
/// <param name="sqlText">查询语句</param>
/// <param name="parameters">参数数组</param>
/// <returns>数据表</returns>
public static DataSet GetDataSet(string sqlText)
{
//创建一个默认的数据库实例
Database db = GetDataBase();
DbCommand dbCommand = db.GetSqlStringCommand(sqlText);
return db.ExecuteDataSet(dbCommand);
}
#endregion
#region GetDataTable 返回数据表
/// <summary>
/// 执行查询语句
/// </summary>
/// <param name="sqlText">查询语句</param>
/// <returns>数据表</returns>
public static DataTable GetDataTable(string sqlText)
{
return ExecuteDataSet(sqlText, null);
}
/// <summary>
/// 执行查询语句
/// </summary>
/// <param name="sqlText">查询语句</param>
/// <param name="parameters">参数数组</param>
/// <returns>数据表</returns>
public static DataTable GetDataTable(string sqlText, DBParameter[] parameters)
{
return ExecuteDataSet(sqlText, parameters);
}
/// <summary>
/// 公用执行查询语句
/// </summary>
/// <param name="sqlText">查询语句</param>
/// <param name="parameters">参数数组</param>
/// <returns>数据表</returns>
private static DataTable ExecuteDataSet(string sqlText, DBParameter[] parameters)
{
//创建一个默认的数据库实例
Database db = GetDataBase();
DbCommand dbCommand = db.GetSqlStringCommand(sqlText);
if (parameters != null)
{
//添加输入参数
foreach (DBParameter p in parameters)
{
db.AddInParameter(dbCommand, p.Name, p.DbType, p.Value);
}
}
DataSet dataSet = db.ExecuteDataSet(dbCommand);
if (dataSet != null && dataSet.Tables.Count > 0)
{
return dataSet.Tables[0];
}
else
{
return null;
}
}
#endregion
#region ExecuteReader 返回结果集
/// <summary>
/// 执行查询语句
/// </summary>
/// <param name="sqlText">查询语句</param>
/// <returns>结果集</returns>
public static IDataReader ExecuteReader(string sqlText)
{
return GetDataReader(sqlText, null);
}
/// <summary>
/// 执行查询语句
/// </summary>
/// <param name="sqlText">查询语句</param>
/// <param name="inParameters">输入参数数组</param>
/// <returns>结果集</returns>
public static IDataReader ExecuteReader(string sqlText, DBParameter[] parameters)
{
return GetDataReader(sqlText, parameters);
}
/// <summary>
/// 执行查询语句
/// </summary>
/// <param name="sqlText">查询语句</param>
/// <param name="inParameters">输入参数</param>
/// <returns>结果集</returns>
private static IDataReader GetDataReader(string sqlText, DBParameter[] parameters)
{
//创建一个默认的数据库实例
Database db = GetDataBase();
DbCommand dbCommand = db.GetSqlStringCommand(sqlText);
if (parameters != null)
{
//添加输入参数
foreach (DBParameter p in parameters)
{
db.AddInParameter(dbCommand, p.Name, p.DbType, p.Value);
}
}
IDataReader dataReader = db.ExecuteReader(dbCommand);
return dataReader;
}
#endregion
#region ExecuteNonQuery返回影响行数
/// <summary>
/// 执行增、删、改语句
/// </summary>
/// <param name="sqlText">增、删、改语句</param>
/// <returns>影响行数</returns>
public static int ExecuteNonQuery(string sqlText)
{
return GetNonQuery(sqlText, null);
}
/// <summary>
/// 执行增、删、改语句
/// </summary>
/// <param name="sqlText">增、删、改语句</param>
/// <param name="parameters">输入参数数组</param>
/// <returns>影响行数</returns>
public static int ExecuteNonQuery(string sqlText, DBParameter[] parameters)
{
return GetNonQuery(sqlText, parameters);
}
/// <summary>
/// 公用执行增、删、改语句
/// </summary>
/// <param name="sqlText">增、删、改语句</param>
/// <param name="parameters">输入参数数组</param>
/// <returns>影响行数</returns>
private static int GetNonQuery(string sqlText, DBParameter[] parameters)
{
//创建一个默认的数据库实例
Database db = GetDataBase();
DbCommand dbCommand = db.GetSqlStringCommand(sqlText);
if (parameters != null)
{
//添加输入参数
foreach (DBParameter p in parameters)
{
db.AddInParameter(dbCommand, p.Name, p.DbType, p.Value);
}
}
return db.ExecuteNonQuery(dbCommand);
}
#endregion
#region ExecuteScalar返回单值
/// <summary>
/// 执行查询语句
/// </summary>
/// <param name="sqlText">查询语句</param>
/// <returns>单个值</returns>
public static object ExecuteScalar(string sqlText)
{
return GetScalar(sqlText, null);
}
/// <summary>
/// 执行查询语句
/// </summary>
/// <param name="sqlText">查询语句</param>
/// <param name="parameters">输入参数数组</param>
/// <returns>单个值</returns>
public static object ExecuteScalar(string sqlText, DBParameter[] parameters)
{
return GetScalar(sqlText, parameters);
}
/// <summary>
/// 执行查询语句
/// </summary>
/// <param name="sqlText">查询语句</param>
/// <param name="parameters">输入参数数组</param>
/// <returns>单个值</returns>
private static object GetScalar(string sqlText, DBParameter[] parameters)
{
//创建一个默认的数据库实例
Database db = GetDataBase();
DbCommand dbCommand = db.GetSqlStringCommand(sqlText);
if (parameters != null)
{
//添加输入参数
foreach (DBParameter p in parameters)
{
db.AddInParameter(dbCommand, p.Name, p.DbType, p.Value);
}
}
return db.ExecuteScalar(dbCommand);
}
#endregion
#region ExecuteNonQueryProc 返回影响行数
/// <summary>
/// 执行增、删、改存储过程
/// </summary>
/// <param name="procName">存储过程名</param>
/// <returns>影响行数</returns>
public static Dictionary<string, string> ExecuteNonQueryProc(string procName)
{
return GetNonQueryProc(procName, null);
}
/// <summary>
/// 执行增、删、改存储过程
/// </summary>
/// <param name="procName">存储过程名</param>
/// <param name="parameters">参数数组</param>
/// <returns>影响行数</returns>
public static Dictionary<string, string> ExecuteNonQueryProc(string procName, DBParameter[] parameters)
{
return GetNonQueryProc(procName, parameters);
}
/// <summary>
/// 公用执行增、删、改存储过程
/// </summary>
/// <param name="procName">存储过程名</param>
/// <param name="parameters">参数数组</param>
/// <returns>影响行数</returns>
private static Dictionary<string, string> GetNonQueryProc(string procName, DBParameter[] parameters)
{
//创建一个默认的数据库实例
Database db = GetDataBase();
DbCommand dbCommand = db.GetStoredProcCommand(procName);
if (parameters != null)
{
foreach (DBParameter p in parameters)
{
if (p.IsOutput)
{
db.AddOutParameter(dbCommand, p.Name, p.DbType, p.Size);//添加输出参数
}
else
{
db.AddInParameter(dbCommand, p.Name, p.DbType, p.Value);//添加输入参数
}
}
}
db.ExecuteNonQuery(dbCommand);
Dictionary<string, string> htOupParam = new Dictionary<string, string>();
if (parameters != null)
{
//得到输出参数的值
object key = db.GetParameterValue(dbCommand, "po_Errcode");
object value = db.GetParameterValue(dbCommand, "po_Errmsg");
if (key != null && value != null)
{
htOupParam.Add(key.ToString(), value.ToString());
}
}
return htOupParam;
}
#endregion
#region ExecuteScalarProc 返回单值
/// <summary>
/// 执行查询存储过程
/// </summary>
/// <param name="procName">存储过程名</param>
/// <returns>单个值</returns>
public static Dictionary<string, string> ExecuteScalarProc(string procName)
{
return GetScalarProc(procName, null);
}
/// <summary>
/// 执行查询存储过程
/// </summary>
/// <param name="procName">存储过程名</param>
/// <param name="parameters">输入参数数组</param>
/// <returns>单个值</returns>
public static Dictionary<string, string> ExecuteScalarProc(string procName, DBParameter[] parameters)
{
return GetScalarProc(procName, parameters);
}
/// <summary>
/// 执行查询存储过程
/// </summary>
/// <param name="procName">存储过程名</param>
/// <param name="parameters">参数数组</param>
/// <returns>单个值</returns>
private static Dictionary<string, string> GetScalarProc(string procName, DBParameter[] parameters)
{
//创建一个默认的数据库实例
Database db = GetDataBase();
DbCommand dbCommand = db.GetStoredProcCommand(procName);
if (parameters != null)
{
foreach (DBParameter p in parameters)
{
if (p.IsOutput)
{
db.AddOutParameter(dbCommand, p.Name, p.DbType, p.Size);//添加输出参数
}
else
{
db.AddInParameter(dbCommand, p.Name, p.DbType, p.Value);//添加输入参数
}
}
}
db.ExecuteScalar(dbCommand);
Dictionary<string, string> htOupParam = new Dictionary<string, string>();
if (parameters != null)
{
//得到输出参数的值
foreach (DBParameter p in parameters)
{
if (p.IsOutput)
{
string value = db.GetParameterValue(dbCommand, p.Name).ToString();
htOupParam.Add(p.Name, value);
}
}
}
return htOupParam;
}
#endregion
#region ExecuteNonQuery 多记录操作带事务
/// <summary>
/// 带事务执行增、删、改操作
/// </summary>
/// <param name="procName">存储过程名</param>
/// <param name="inParameters">输入参数</param>
public static void ExecuteNonQuery(string procName, List<DBParameter[]> inParameters)
{
//创建一个默认的数据库实例
Database db = GetDataBase();
DbCommand dbCommand = db.GetStoredProcCommand(procName);
using (DbConnection conn = db.CreateConnection())
{
//打开连接
conn.Open();
//创建事务
DbTransaction trans = conn.BeginTransaction();
try
{
foreach (DBParameter[] inParas in inParameters)
{
dbCommand.Parameters.Clear();
//添加输入参数
foreach (DBParameter p in inParas)
{
db.AddInParameter(dbCommand, p.Name, p.DbType, p.Value);
db.ExecuteNonQuery(dbCommand);
}
}
//都执行成功则提交事务
trans.Commit();
}
catch (Exception)
{
//发生异常,事务回滚
trans.Rollback();
}
finally
{
//关闭连接
conn.Close();
}
}
}
#endregion
#region 用DataSet批量的添加,修改,删除数据,预留方法
/// <summary>
/// 用DataSet批量的添加,修改,删除数据
/// <param name="dataSet">数据集对象</param>
/// <param name="tableName">数据集中表名</param>
/// <param name="procName">存储过程名</param>
/// <param name="pkParameter">主键参数</param>
/// <param name="parameters">其它参数</param>
/// <returns>影响的行数</returns>
/// </summary>
public static int Update(DataSet dataSet, string tableName, string procName, DBParameter pkParameter, DBParameter[] parameters)
{
Database db = GetDataBase();
// 下面分别创建添加,修改,删除的操作
DbCommand insertCommand = db.GetStoredProcCommand(procName);
DbCommand updateCommand = db.GetStoredProcCommand(procName);
DbCommand deleteCommand = db.GetStoredProcCommand(procName);
db.AddInParameter(insertCommand, pkParameter.Name, pkParameter.DbType, pkParameter.Value.ToString(), DataRowVersion.Current);
db.AddInParameter(updateCommand, pkParameter.Name, pkParameter.DbType, pkParameter.Value.ToString(), DataRowVersion.Current);
db.AddInParameter(deleteCommand, pkParameter.Name, pkParameter.DbType, pkParameter.Value.ToString(), DataRowVersion.Current);
if (parameters != null)
{
foreach (DBParameter p in parameters)
{
db.AddInParameter(insertCommand, p.Name, p.DbType, p.Value.ToString(), DataRowVersion.Current);
db.AddInParameter(updateCommand, p.Name, p.DbType, p.Value.ToString(), DataRowVersion.Current);
}
}
// 提交对DataSet的修改,并返回影响的行数
return db.UpdateDataSet(dataSet, tableName, insertCommand, updateCommand, deleteCommand, Microsoft.Practices.EnterpriseLibrary.Data.UpdateBehavior.Standard);
}
#endregion
}
}
- EnterpriseLibrary企业库中数据库封装
- 企业库EnterpriseLibrary学习笔记之--通过企业库Microsoft.Practices.EnterpriseLibrary,实现调用存储过程的封装
- 企业库数据库封装类使用
- .net企业库中数据库联接操作
- enterpriseLibrary连接MySQL数据库
- EnterpriseLibrary 微软企业库 使用存储过程,参数及事务
- 企业库缓存封装
- 在数据库访问项目中使用微软企业库Enterprise Library,实现多种数据库的支持
- 企业库
- 企业库中 DatabaseFactory.CreateDatabase 方法创建数据库实例的 逻辑过程
- 企业库中 DatabaseFactory.CreateDatabase 方法创建数据库实例的 逻辑过程(转)
- 微软企业库中DbDataAdapter使用
- 使用microsoft EnterpriseLibrary连接不同数据库简单应用
- EnterpriseLibrary数据访问 使用存储过程访问数据库
- EnterpriseLibrary的DAAB如何灵活配置数据库的笔记
- 系统中数据库操作封装
- WCF-004:WCF中也可以使用Microsoft.Practices.EnterpriseLibrary
- 企业库数据通用操作封装中的参数类
- atl-ActiveX-dll-inf-cab-web调用(总结篇)
- 巧用搜索语法搜索外文文献
- 最长回文子串
- web高性能开发系列随笔
- 解决"error C4430: missing type specifier - int assumed. Note: C++ does not support default-int"
- EnterpriseLibrary企业库中数据库封装
- Oracle诊断案例-Sql_trace
- 用ado连接oracle的几种方法
- debug文件夹内部分文件说明?
- strlen高效实现
- 企业库数据通用操作封装中的参数类
- jxl 导出Excel
- 应用程序开发者关于MeeGo平台的2010总结
- 企业库数据库封装类使用