zoukankan      html  css  js  c++  java
  • 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之类的,使程序员更专注于业务逻辑代码的编写,少死掉点脑细胞,另外,统一了数据操作层的数据操作代码的风格和格式,维护起来很方便的撒~~~
  • 相关阅读:
    LeetCode 32. 最长有效括号(Longest Valid Parentheses)
    LeetCode 141. 环形链表(Linked List Cycle)
    LeetCode 160. 相交链表(Intersection of Two Linked Lists)
    LeetCode 112. 路径总和(Path Sum)
    LeetCode 124. 二叉树中的最大路径和(Binary Tree Maximum Path Sum)
    LightGBM新特性总结
    sql service 事务与锁
    C#泛型实例详解
    C# 中的委托和事件(详解)
    C# DateTime日期格式化
  • 原文地址:https://www.cnblogs.com/bluedy1229/p/1333446.html
Copyright © 2011-2022 走看看