zoukankan      html  css  js  c++  java
  • DbHelper SQL数据操作类【DBHelper.CS】

    其实,微软的企业库中有一个非常不错的数据操作类了.但是,不少公司(起码我遇到的几个...),对一些"封装"了些什么的东西不太敢用,虽然我推荐过微软的企业库框架了...但是还是要"评估"...一评就是几个月...而且,一些公司有的根本就是裸ado.net开发,或者自己封装的数据库操作类非常别扭,很不好用.
          这里我给大家共享一个我参照企业库中的数据操作组件编码风格写的数据库操作类,对使用它的程序员来说,编码是很舒服滴(起码我觉得很好撒).以下是代码,很简单的,没有做任何多余的封装,只是改变了ADO.NET的编码步骤,方便了具体开发数据库操作代码的程序员.
        using System;
        
    using System.Data;
        
    using System.Data.Common;
        
    using System.Configuration;

        
    public class DbHelper
        


        
    public class Trans : IDisposable
        

    那么如何使用它呢?下面我给出一些基本的使用示例,基本能满足你大部分的数据库操作需要了.
    1)直接执行sql语句

            DbHelper db = new DbHelper();
            DbCommand cmd 
    = db.GetSqlStringCommond("insert t1 (id)values('haha')");
            db.ExecuteNonQuery(cmd);

    2)执行存储过程

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

    3)返回DataSet

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

    4)返回DataTable

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

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

            DbHelper db = new DbHelper();
            DbCommand cmd 
    = db.GetStoredProcCommond("t2_insert");
            db.AddInParameter(cmd, 
    "@timeticks", DbType.Int64, DateTime.Now.Ticks);
            db.AddOutParameter(cmd, 
    "@outString", DbType.String, 20);
            db.AddReturnParameter(cmd, 
    "@returnValue", DbType.Int32);

            db.ExecuteNonQuery(cmd);

            
    string s = db.GetParameter(cmd, "@outString").Value as string;//out parameter
            int r = Convert.ToInt32(db.GetParameter(cmd, "@returnValue").Value);//return value

    6)DataReader使用

          DbHelper db = new DbHelper();
            DbCommand cmd 
    = db.GetStoredProcCommond("t2_insert");
            db.AddInParameter(cmd, 
    "@timeticks", DbType.Int64, DateTime.Now.Ticks);
            db.AddOutParameter(cmd, 
    "@outString", DbType.String, 20);
            db.AddReturnParameter(cmd, 
    "@returnValue", DbType.Int32);

            
    using (DbDataReader reader = db.ExecuteReader(cmd))
            
    {
                dt.Load(reader);
            }
            
            
    string s = db.GetParameter(cmd, "@outString").Value as string;//out parameter
            int r = Convert.ToInt32(db.GetParameter(cmd, "@returnValue").Value);//return value

    7)事务的使用.(项目中需要将基本的数据库操作组合成一个完整的业务流时,代码级的事务是必不可少的哦)
        pubic void DoBusiness()
        
    {
            
    using (Trans t = new Trans())
            
    {
                
    try
                
    {
                    D1(t);
                    
    throw new Exception();//如果有异常,会回滚滴
                    D2(t);
                    t.Commit();
                }

                
    catch
                
    {
                    t.RollBack();
                }

            }

        }

        
    public void D1(Trans t)
        
    {
            DbHelper db 
    = new DbHelper();
            DbCommand cmd 
    = db.GetStoredProcCommond("t2_insert");
            db.AddInParameter(cmd, 
    "@timeticks", DbType.Int64, DateTime.Now.Ticks);
            db.AddOutParameter(cmd, 
    "@outString", DbType.String, 20);
            db.AddReturnParameter(cmd, 
    "@returnValue", DbType.Int32);

            
    if (t == null) db.ExecuteNonQuery(cmd);
            
    else db.ExecuteNonQuery(cmd,t);

            
    string s = db.GetParameter(cmd, "@outString").Value as string;//out parameter
            int r = Convert.ToInt32(db.GetParameter(cmd, "@returnValue").Value);//return value
        }

        
    public void D2(Trans t)
        
    {
            DbHelper db 
    = new DbHelper();
            DbCommand cmd 
    = db.GetSqlStringCommond("insert t1 (id)values('..')");        
            
    if (t == null) db.ExecuteNonQuery(cmd);
            
    else db.ExecuteNonQuery(cmd, t);
        }

    以上我们好像没有指定数据库连接字符串,大家如果看下DbHelper的代码,就知道要使用它必须在config中配置两个参数,如下:
        <appSettings>
            
    <add key="DbHelperProvider" value="System.Data.SqlClient"/>
            
    <add key="DbHelperConnectionString" value="Data Source=(local);Initial Catalog=DbHelperTest;Persist Security Info=True;User ID=sa;Password=sa"/>
        
    </appSettings>
    其实,DbHelper需要的仅仅是两个字符串,你可以自己修改,作成加密什么的...

    好了,就这样,DbHelper的代码是非常简单和透明的,只是在ado.net上做了一点小包装,改变了一下使用它的程序员的编码方式,去除掉一些比较"物理级"的编程概念,如connection的open和close之类的,使程序员更专注于业务逻辑代码的编写,少死掉点脑细胞,另外,统一了数据操作层的数据操作代码的风格和格式,维护起来很方便的撒~~~

    另:以上代码大家可以随意使用, 不需要给我版权费的啦,嘿嘿.如果大家发现有什么BUG,或者有更好的数据操作类的实现方式,请联系我哦.
    0
    0
  • 相关阅读:
    把office文档转换为html过程中的一些坑
    JAVA运行时问题诊断-工具应用篇
    转:IT公司的十大内耗,别说你公司没有!
    安装storm的一些很乱的笔记
    航伴项目介绍
    centos7防火墙操作
    MySQL 截取字符串
    redis客户端介绍及php客户端的下载安装
    vscode 连接远程服务器 sftp
    redis主从复制
  • 原文地址:https://www.cnblogs.com/ceci/p/1551493.html
Copyright © 2011-2022 走看看