using System;
using System.Configuration;
using System.Data;
using System.Data.Common;
using System.Data.OleDb;
using System.Data.SqlClient; namespace JADAY.Frame.DbHelper
{
/// <summary>
/// 数据库助手类
/// </summary>
public class DbUtility
{
private static string dbProviderName = ConfigurationSettings.AppSettings["DbProviderName"];
private static string dbConnectionString = ConfigurationManager.AppSettings["TaxInvoiceConn"]; private DbConnection connection; public DbUtility()
{
this.connection = CreateConnection(DbUtility.dbConnectionString);
} public DbUtility(string connectionString)
{
this.connection = CreateConnection(connectionString);
} public static DbConnection CreateConnection()
{
DbProviderFactory dbfactory = DbProviderFactories.GetFactory(DbUtility.dbProviderName);
DbConnection dbconn = dbfactory.CreateConnection();
dbconn.ConnectionString = DbUtility.dbConnectionString;
return dbconn;
} public static DbConnection CreateConnection(string connectionString)
{
DbProviderFactory dbfactory = DbProviderFactories.GetFactory(DbUtility.dbProviderName);
DbConnection dbconn = dbfactory.CreateConnection();
dbconn.ConnectionString = connectionString;
return dbconn;
} public DbCommand GetStoredProcCommond(string storedProcedure)
{
DbCommand dbCommand = connection.CreateCommand();
dbCommand.CommandText = storedProcedure;
dbCommand.CommandType = CommandType.StoredProcedure;
return dbCommand;
} public DbCommand GetSqlStringCommond(string sqlQuery)
{
DbCommand dbCommand = connection.CreateCommand();
dbCommand.CommandText = sqlQuery;
dbCommand.CommandType = CommandType.Text;
return dbCommand;
} #region 增加参数 public void AddParameterCollection(DbCommand cmd, DbParameterCollection dbParameterCollection)
{
foreach (DbParameter dbParameter in dbParameterCollection)
{
cmd.Parameters.Add(dbParameter);
}
} public void AddOutParameter(DbCommand cmd, string parameterName, DbType dbType, int size)
{
DbParameter dbParameter = cmd.CreateParameter();
dbParameter.DbType = dbType;
dbParameter.ParameterName = parameterName;
dbParameter.Size = size;
dbParameter.Direction = ParameterDirection.Output;
cmd.Parameters.Add(dbParameter);
} public void AddInParameter(DbCommand cmd, string parameterName, DbType dbType, object value)
{
DbParameter dbParameter = cmd.CreateParameter();
dbParameter.DbType = dbType;
dbParameter.ParameterName = parameterName;
dbParameter.Value = value;
dbParameter.Direction = ParameterDirection.Input;
cmd.Parameters.Add(dbParameter);
} public void AddReturnParameter(DbCommand cmd, string parameterName, DbType dbType)
{
DbParameter dbParameter = cmd.CreateParameter();
dbParameter.DbType = dbType;
dbParameter.ParameterName = parameterName;
dbParameter.Direction = ParameterDirection.ReturnValue;
cmd.Parameters.Add(dbParameter);
} public DbParameter GetParameter(DbCommand cmd, string parameterName)
{
return cmd.Parameters[parameterName];
} #endregion #region 执行 public DataSet ExecuteDataSet(DbCommand cmd)
{
DbProviderFactory dbfactory = DbProviderFactories.GetFactory(DbUtility.dbProviderName);
DbDataAdapter dbDataAdapter = dbfactory.CreateDataAdapter();
dbDataAdapter.SelectCommand = cmd;
DataSet ds = new DataSet();
dbDataAdapter.Fill(ds);
return ds;
} public DataTable ExecuteDataTable(DbCommand cmd)
{
DbProviderFactory dbfactory = DbProviderFactories.GetFactory(DbUtility.dbProviderName);
DbDataAdapter dbDataAdapter = dbfactory.CreateDataAdapter();
dbDataAdapter.SelectCommand = cmd;
DataTable dataTable = new DataTable();
dbDataAdapter.Fill(dataTable);
return dataTable;
} public DbDataReader ExecuteReader(DbCommand cmd)
{
cmd.Connection.Open();
DbDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
return reader;
} public int ExecuteNonQuery(DbCommand cmd)
{
cmd.Connection.Open();
int ret = cmd.ExecuteNonQuery();
cmd.Connection.Close();
return ret;
} public object ExecuteScalar(DbCommand cmd)
{
cmd.Connection.Open();
object ret = cmd.ExecuteScalar();
cmd.Connection.Close();
return ret;
} #endregion #region 执行事务 public DataSet ExecuteDataSet(DbCommand cmd, Trans t)
{
cmd.Connection = t.DbConnection;
cmd.Transaction = t.DbTrans;
DbProviderFactory dbfactory = DbProviderFactories.GetFactory(DbUtility.dbProviderName);
DbDataAdapter dbDataAdapter = dbfactory.CreateDataAdapter();
dbDataAdapter.SelectCommand = cmd;
DataSet ds = new DataSet();
dbDataAdapter.Fill(ds);
return ds;
} public DataTable ExecuteDataTable(DbCommand cmd, Trans t)
{
cmd.Connection = t.DbConnection;
cmd.Transaction = t.DbTrans;
DbProviderFactory dbfactory = DbProviderFactories.GetFactory(DbUtility.dbProviderName);
DbDataAdapter dbDataAdapter = dbfactory.CreateDataAdapter();
dbDataAdapter.SelectCommand = cmd;
DataTable dataTable = new DataTable();
dbDataAdapter.Fill(dataTable);
return dataTable;
} public DbDataReader ExecuteReader(DbCommand cmd, Trans t)
{
cmd.Connection.Close();
cmd.Connection = t.DbConnection;
cmd.Transaction = t.DbTrans;
DbDataReader reader = cmd.ExecuteReader();
DataTable dt = new DataTable();
return reader;
} public int ExecuteNonQuery(DbCommand cmd, Trans t)
{
cmd.Connection.Close();
cmd.Connection = t.DbConnection;
cmd.Transaction = t.DbTrans;
int ret = cmd.ExecuteNonQuery();
return ret;
} public object ExecuteScalar(DbCommand cmd, Trans t)
{
cmd.Connection.Close();
cmd.Connection = t.DbConnection;
cmd.Transaction = t.DbTrans;
object ret = cmd.ExecuteScalar();
return ret;
} #endregion
} public class Trans : IDisposable
{
private DbConnection conn;
private DbTransaction dbTrans;
public DbConnection DbConnection
{
get { return this.conn; }
} public DbTransaction DbTrans
{
get { return this.dbTrans; }
} public Trans()
{
conn = DbUtility.CreateConnection();
conn.Open();
dbTrans = conn.BeginTransaction();
} public Trans(string connectionString)
{
conn = DbUtility.CreateConnection(connectionString);
conn.Open();
dbTrans = conn.BeginTransaction();
} public void Commit()
{
dbTrans.Commit();
this.Colse();
} public void RollBack()
{
dbTrans.Rollback();
this.Colse();
} public void Dispose()
{
this.Colse();
} public void Colse()
{
if (conn.State == System.Data.ConnectionState.Open)
{
conn.Close();
}
}
}
}

2、直接执行sql语句


  1. DbHelper db = new DbHelper();
  2. DbCommand cmd = db.GetSqlStringCommond("insert t1 (id)values(‘?haha‘?)");
  3. db.ExecuteNonQuery(cmd);

3、执行存储过程


  1. DbHelper db = new DbHelper();
  2. DbCommand cmd = db.GetStoredProcCommond("t1_insert");
  3. db.AddInParameter(cmd, "@id", DbType.String, "heihei");
  4. db.ExecuteNonQuery(cmd);

4、返回DataSet


  1. DbHelper db = new DbHelper();
  2. DbCommand cmd = db.GetSqlStringCommond("select * from t1");
  3. DataSet ds = db.ExecuteDataSet(cmd);

5、返回DataTable


  1. DbHelper db = new DbHelper();
  2. DbCommand cmd = db.GetSqlStringCommond("t1_findall");
  3. DataTable dt = db.ExecuteDataTable(cmd);


6、输入参数/输出参数/返回值的使用(比较重要哦)


  1. DbHelper db = new DbHelper();
  2. DbCommand cmd = db.GetStoredProcCommond("t2_insert");
  3. db.AddInParameter(cmd, "@timeticks", DbType.Int64, DateTime.Now.Ticks);
  4. db.AddOutParameter(cmd, "@outString", DbType.String, 20);
  5. db.AddReturnParameter(cmd, "@returnValue", DbType.Int32);
  6. db.ExecuteNonQuery(cmd);
  7. string s = db.GetParameter(cmd, "@outString").Value as string;
  8. int r = Convert.ToInt32(db.GetParameter(cmd, "@returnValue").Value);


7、DataReader使用



  1. DbHelper db = new DbHelper();
  2. DbCommand cmd = db.GetStoredProcCommond("t2_insert");
  3. db.AddInParameter(cmd, "@timeticks", DbType.Int64, DateTime.Now.Ticks);
  4. db.AddOutParameter(cmd, "@outString", DbType.String, 20);
  5. db.AddReturnParameter(cmd, "@returnValue", DbType.Int32);
  6. using (DbDataReader reader = db.ExecuteReader(cmd))
  7. {
  8. dt.Load(reader);
  9. }
  10. string s = db.GetParameter(cmd, "@outString").Value as string;
  11. int r = Convert.ToInt32(db.GetParameter(cmd, "@returnValue").Value);


8、事务的使用.(项目中需要将基本的数据库操作组合成一个完整的业务流时,代码级的事务是必不可少的哦)


以上我们好像没有指定数据库连接字符串,大家如果看下DbHelper的代码,就知道要使用它必须在config中配置两个参数,如下:


  1. pubic void DoBusiness()
  2. {
  3. using (Trans t = new Trans())
  4. {
  5. try
  6. {
  7. D1(t);
  8. throw new Exception();
  9. D2(t);
  10. t.Commit();
  11. }
  12. catch
  13. {
  14. t.RollBack();
  15. }
  16. }
  17. }
  18. public void D1(Trans t)
  19. {
  20. DbHelper db = new DbHelper();
  21. DbCommand cmd = db.GetStoredProcCommond("table_insert");
  22. db.AddInParameter(cmd, "@timeticks", DbType.Int64, DateTime.Now.Ticks);
  23. db.AddOutParameter(cmd, "@outString", DbType.String, 20);
  24. db.AddReturnParameter(cmd, "@returnValue", DbType.Int32);
  25. if (t == null) db.ExecuteNonQuery(cmd);
  26. else db.ExecuteNonQuery(cmd,t);
  27. string s = db.GetParameter(cmd, "@outString").Value as string;
  28. int r = Convert.ToInt32(db.GetParameter(cmd, "@returnValue").Value);
  29. }
  30. public void D2(Trans t)
  31. {
  32. DbHelper db = new DbHelper();
  33. DbCommand cmd = db.GetSqlStringCommond("insert table (id)values(@id)");
  34. if (t == null) db.ExecuteNonQuery(cmd);
  35. else db.ExecuteNonQuery(cmd, t);
  36. }
 

微软DbHelper的更多相关文章

  1. 数据访问层DAL(数据库访问抽象类DataProvider)

    晒晒数据访问层DAL,看看你的项目数据访问层使用的是什么形式,数据访问性能比较 采用什么样的数据访问形式是软件编码很重要的一个环节,良好的数据访问形式不仅能够提搞代码的执行效率,协作能力,更重要的是对 ...

  2. 不该活着的SqlHelper和DBHelper

    前言: 还记得刚学ADO.NET的情景么? 还记得当年是怎么从ADO.NET被忽悠到用SqlHelper的么? 话说从入门到走上工作岗位那些年,我们就一直被纯纯地教导或引导,ADO.NET太原始,得封 ...

  3. 我的DbHelper数据操作类

    其实,微软的企业库中有一个非常不错的数据操作类了.但是,不少公司(起码我遇到的几个...),对一些"封装"了些什么的东西不太敢用,虽然我推荐过微软的企业库框架了...但是还是要&q ...

  4. DbHelper数据操作类

    摘要:本文介绍一下DbHelper数据操作类 微软的企业库中有一个非常不错的数据操作类.但是,不少公司(起码我遇到的几个...),对一些"封装"了些什么的东西不太敢用,虽然我推荐过 ...

  5. DBHelper 类(网上收集)

    这个是我网上找的,觉得不错的一个DBHelper类,下面是作者话: // 微软的企业库中有一个非常不错的数据操作类了.但是,不少公司(起码我遇到的几个...),对一些"封装"了些什 ...

  6. 我的DbHelper数据操作类(转)

    其实,微软的企业库中有一个非常不错的数据操作类了.但是,不少公司(起码我遇到的几个...),对一些"封装"了些什么的东西不太敢用,虽然我推荐过微软的企业库框架了...但是还是要&q ...

  7. 静态工厂 + DbHelper

    在 .NET 的学习过程中用过三种数据库:Sql Server.Access.SQLite.Sql Server 用得相对多一点点,但是,麻烦,每次用它都需要开服务,而且还费资源,更麻烦的是拷贝到一台 ...

  8. MVC ---- DBHelper.ttinclude

    在通过T4模版引擎之基础入门 对T4有了初步印象后,我们开始实战篇.T4模板引擎可以当做一个代码生成器,代码生成器的职责当然是用来生成代码(这不是废话吗).而这其中我们使用的最普遍的是根据数据库生成实 ...

  9. 微软企业库5.0 学习之路——第二步、使用VS2010+Data Access模块建立多数据库项目

    现在我就开始进入学习之路的第二步——Data Access模块,这个模块是企业库中被使用频率最高的模块,它很好的封装了数据库操作应用,为我们进行多数据库系统开发提供了便利,只需更改配置文件就 可以很快 ...

随机推荐

  1. 如何不切换windows登陆用户,更换用户名访问共享文件夹

    @echo offnet use * /del /ynet use \\192.168.2.1 /user:wr@echo off 先进行删除所有,然后在进行映射,按照部门来,不同的部门可能需要映射的 ...

  2. [原创]java WEB学习笔记89:Hibernate学习之路-- -Hibernate检索方式(5种),HQL介绍,实现功能,实现步骤,

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  3. ef 5 在 DropCreateDatabaseAlways 报错,the connection is currently used

    go sp_who2 -- db_id 数据库名称,查询出来的结果执行一遍就能关闭所有连接 SELECT N'kill '+ CAST(spid AS varchar) FROM master..sy ...

  4. 比较二个文件的最后修改时间FileListener

    import java.io.File; import java.text.SimpleDateFormat; import java.util.Timer; import java.util.Tim ...

  5. mysql水平拆分与垂直拆分的详细介绍(转载http://www.cnblogs.com/nixi8/p/4524082.html)

      垂直 垂直拆分是指数据表列的拆分,把一张列比较多的表拆分为多张表 通常我们按以下原则进行垂直拆分: 把不常用的字段单独放在一张表; 把text,blob等大字段拆分出来放在附表中; 经常组合查询的 ...

  6. 一个标准的ECharts代码

    <!DOCTYPE html> <head> <meta charset="utf-8"> <title>ECharts</t ...

  7. 夺命雷公狗—angularjs—9—ng-class的自定义函数的用法

    angularjs里面其实给我们留下了一个很不错的地方,他就是可以直接调用函数从而对该位置进行处理, 被点击后展示效果如下所示: 开始走代码吧.... <!doctype html> &l ...

  8. Java高效编程之三【类和接口】

    本部分包含的一些指导原则,可以帮助哦我们更好滴利用这些语言元素,以便让设计出来的类更加有用.健壮和灵活. 十二.使类和成员的访问能力最小化 三个关键词访问修饰符:private(私有的=类级别的).未 ...

  9. 【py分析网页】可能有用的-re去除网页上的杂碎

    def remove_js_css (content): """ remove the the javascript and the stylesheet and the ...

  10. C++之: CDib类

    头文件Cdib.h 源文件Cdib.cpp