• DbHelper数据操作类


    using System;
        
    using System.Data;
        
    using System.Data.Common;
        
    using System.Configuration;

        
    public class DbHelper
        
    {
            
    private static string dbProviderName = ConfigurationManager.AppSettings["DbHelperProvider"];
            
    private static string dbConnectionString = ConfigurationManager.AppSettings["DbHelperConnectionString"];

            
    private DbConnection connection;
            
    public DbHelper()
            
    {
                
    this.connection = CreateConnection(DbHelper.dbConnectionString);
            }

            
    public DbHelper(string connectionString)
            
    {
                
    this.connection = CreateConnection(connectionString);
            }

            
    public static DbConnection CreateConnection()
            
    {
                DbProviderFactory dbfactory 
    = DbProviderFactories.GetFactory(DbHelper.dbProviderName);
                DbConnection dbconn 
    = dbfactory.CreateConnection();
                dbconn.ConnectionString 
    = DbHelper.dbConnectionString;
                
    return dbconn;
            }

            
    public static DbConnection CreateConnection(string connectionString)
            
    {
                DbProviderFactory dbfactory 
    = DbProviderFactories.GetFactory(DbHelper.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;
            }


            
    增加参数

            
    执行        

            
    执行事务
        }


        
    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 
    = DbHelper.CreateConnection();
                conn.Open();
                dbTrans 
    = conn.BeginTransaction();
            }

            
    public Trans(string connectionString)
            
    {
                conn 
    = DbHelper.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();
                }

            }

        }

    那么如何使用它呢?下面我给出一些基本的使用示例,基本能满足你大部分的数据库操作需要了.
    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之类的,使程序员更专注于业务逻辑代码的编写,少死掉点脑细胞,另外,统一了数据操作层的数据操作代码的风格和格式,维护起来很方便的撒~~~
  • 相关阅读:
    Python 的编码格式
    Python import其他层级的模块
    自己写ORM框架 DBUtils_DG Java(C#的写在链接里)
    C#对象深度克隆
    SpringMVC文件上传下载
    HttpRuntime.Cache .Net自带的缓存类
    Winform跨窗体操作控件(使用委托)
    Winform调用WebKitBrowser,基于chrome内核WebKit的浏览器控件
    ORM框架 EF code first 的封装 优化一
    Go Language 开发环境搭建
  • 原文地址:https://www.cnblogs.com/bluedy1229/p/1333446.html
Copyright © 2020-2023  润新知