整理了一个多数据库通用操作类

来源:互联网 发布:数据库系统实现 公开课 编辑:程序博客网 时间:2024/05/19 19:14

DataBase.cs

[csharp] view plaincopyprint?
  1. using System;    
  2. using System.Collections.Generic;    
  3. using System.Web;    
  4. using System.Configuration;    
  5. using System.Data.Common;    
  6. using System.Data;    
  7. using System.Data.SqlClient;    
  8. using System.Collections;    
  9.     
  10. public enum MyDbType    
  11. {    
  12.     MSSQL,    
  13.     ORACLE,    
  14.     MYSQL,    
  15.     ACCESS    
  16. }    
  17. public class DataBase    
  18. {    
  19.     private DbConnection cnn;//抽象类型    
  20.     private DbCommand cmd;//抽象类型    
  21.     private DbProviderFactory provider;    
  22.     private string providerName;    
  23.     private string connectionString;    
  24.     public DataBase() : this(MyDbType.MSSQL)    
  25.     {    
  26.     }    
  27.     public DataBase(MyDbType dbType)    
  28.     {    
  29.         providerName = ConfigurationManager.ConnectionStrings[dbType.ToString()].ProviderName;    
  30.         provider = DbProviderFactories.GetFactory(providerName);    
  31.         cnn = provider.CreateConnection();    
  32.         cnn.ConnectionString = ConfigurationManager.ConnectionStrings[dbType.ToString()].ConnectionString;    
  33.         cmd = provider.CreateCommand();    
  34.         cmd.Connection = cnn;    
  35.     }    
  36.     #region 执行不带参数的SQL语句    
  37.     /// <summary>    
  38.     /// 执行SQL语句,返回影响的记录数    
  39.     /// </summary>    
  40.     public int ExecuteSQL(string sql)    
  41.     {    
  42.         return ExecuteSQL(sql, null);    
  43.     }    
  44.     /// <summary>    
  45.     /// 执行多条SQL语句,实现数据库事务。    
  46.     /// </summary>    
  47.     public int ExecuteSqlTran(List<string> sqlList)    
  48.     {    
  49.         int count = -1;    
  50.         cnn.Open();    
  51.         DbTransaction tx = cnn.BeginTransaction();    
  52.         try    
  53.         {    
  54.             cmd.Transaction = tx;    
  55.             for (int n = 0; n < sqlList.Count; n++)    
  56.             {    
  57.                 string strsql = sqlList[n].ToString();    
  58.                 if (strsql.Trim().Length > 1)    
  59.                 {    
  60.                     cmd.CommandText = strsql;    
  61.                     count = cmd.ExecuteNonQuery();    
  62.                 }    
  63.             }    
  64.             tx.Commit();    
  65.         }    
  66.         catch (SqlException e)    
  67.         {    
  68.             tx.Rollback();    
  69.             cnn.Close();    
  70.             throw new Exception(e.Message);    
  71.         }    
  72.         return count;    
  73.     }    
  74.     
  75.     /// <summary>    
  76.     /// 执行一条计算查询结果语句,返回查询结果(object)。    
  77.     /// </summary>    
  78.     public int ExecuteScalar(string sql)    
  79.     {    
  80.         return ExecuteScalar(sql, null);    
  81.     }    
  82.     /// <summary>    
  83.     /// 执行查询语句,返回DataSet    
  84.     /// </summary>    
  85.     public DataSet GetDataSet(string sql)    
  86.     {    
  87.         return GetDataSet(sql, null);    
  88.     }    
  89.     /// <summary>    
  90.     /// 执行查询语句,返回DataSet    
  91.     /// </summary>    
  92.     public DataTable GetDataTable(string sql)    
  93.     {    
  94.         return GetDataSet(sql).Tables[0];    
  95.     }    
  96.     /// <summary>    
  97.     /// 执行查询语句,返回DataReader(使用该方法切记要手工关闭DataReader和连接)    
  98.     /// </summary>    
  99.     public DbDataReader ExecuteReader(string sql)    
  100.     {    
  101.         return ExecuteReader(sql, null);    
  102.     }    
  103.     #endregion    
  104.       
  105.   
  106.     #region 执行带参数的SQL语句    
  107.     /// <summary>    
  108.     /// 执行SQL语句,返回影响的记录数    
  109.     /// </summary>    
  110.     public int ExecuteSQL(string sql, params DbParameter[] cmdParms)    
  111.     {    
  112.         try    
  113.         {    
  114.             CreateCommand(sql, cmdParms);    
  115.             int rows = cmd.ExecuteNonQuery();    
  116.             cmd.Parameters.Clear();    
  117.             return rows;    
  118.         }    
  119.         catch (SqlException e)    
  120.         {    
  121.             cnn.Close();    
  122.             throw new Exception(e.Message);    
  123.         }    
  124.     }    
  125.     /// <summary>    
  126.     /// 执行多条SQL语句,实现数据库事务。    
  127.     /// </summary>    
  128.     public int ExecuteSqlTran(Hashtable sqlList)    
  129.     {    
  130.         int count = -1;    
  131.         cnn.Open();     
  132.         DbTransaction tx = cnn.BeginTransaction();    
  133.         try    
  134.         {    
  135.             cmd.Transaction = tx;    
  136.             foreach (DictionaryEntry myDE in sqlList)    
  137.             {    
  138.                 string cmdText = myDE.Key.ToString();    
  139.                 DbParameter[] cmdParms = (DbParameter[])myDE.Value;    
  140.                 CreateCommand(cmdText, cmdParms);    
  141.                 count = cmd.ExecuteNonQuery();                    
  142.             }    
  143.             tx.Commit();    
  144.         }    
  145.         catch (SqlException e)    
  146.         {    
  147.             tx.Rollback();    
  148.             cnn.Close();    
  149.             throw new Exception(e.Message);    
  150.         }    
  151.         return count;    
  152.     }    
  153.     
  154.     /// <summary>    
  155.     /// 执行一条计算查询结果语句,返回查询结果(object)。    
  156.     /// </summary>    
  157.     public int ExecuteScalar(string sql, params DbParameter[] cmdParms)    
  158.     {    
  159.         try    
  160.         {    
  161.             CreateCommand(sql, cmdParms);    
  162.             object o = cmd.ExecuteScalar();    
  163.             return int.Parse(o.ToString());    
  164.         }    
  165.         catch (SqlException e)    
  166.         {    
  167.             cnn.Close();    
  168.             throw new Exception(e.Message);    
  169.         }    
  170.     }    
  171.     /// <summary>    
  172.     /// 执行查询语句,返回DataSet    
  173.     /// </summary>    
  174.     public DataSet GetDataSet(string sql, params DbParameter[] cmdParms)    
  175.     {    
  176.         DataSet ds = new DataSet();    
  177.         try    
  178.         {    
  179.             CreateCommand(sql, cmdParms);    
  180.             DbDataAdapter adapter = provider.CreateDataAdapter();    
  181.             adapter.SelectCommand = cmd;    
  182.             adapter.Fill(ds);    
  183.         }    
  184.         catch (SqlException e)    
  185.         {    
  186.             cnn.Close();    
  187.             throw new Exception(e.Message);    
  188.         }    
  189.         return ds;    
  190.     }    
  191.     /// <summary>    
  192.     /// 执行查询语句,返回DataTable    
  193.     /// </summary>    
  194.     public DataTable GetDataTable(string sql, params DbParameter[] cmdParms)    
  195.     {    
  196.         return GetDataSet(sql, cmdParms).Tables[0];    
  197.     }    
  198.     /// <summary>    
  199.     /// 执行查询语句,返回DataReader(使用该方法切记要手工关闭DataReader和连接)    
  200.     /// </summary>    
  201.     public DbDataReader ExecuteReader(string sql, params DbParameter[] cmdParms)    
  202.     {    
  203.         try    
  204.         {    
  205.             CreateCommand(sql, cmdParms);    
  206.             DbDataReader myReader = cmd.ExecuteReader();    
  207.             return myReader;    
  208.         }    
  209.         catch (SqlException e)    
  210.         {    
  211.             cnn.Close();    
  212.             throw new Exception(e.Message);    
  213.         }    
  214.     }    
  215.     public DbParameter MakeParam(string ParamName, DbType DbType, Int32 Size, object Value)    
  216.     {    
  217.         DbParameter Param = cmd.CreateParameter();    
  218.         Param.ParameterName = ParamName;    
  219.         Param.DbType = DbType;    
  220.         if(Size > 0)    
  221.             Param.Size = Size;    
  222.         if (Value != null)    
  223.             Param.Value = Value;    
  224.         return Param;    
  225.     }    
  226.     private DbCommand CreateCommand(string cmdText, DbParameter[] Prams)    
  227.     {    
  228.         return CreateCommand(CommandType.Text, cmdText, Prams);    
  229.     }    
  230.     private DbCommand CreateCommand(CommandType cmdType, string cmdText, DbParameter[] Prams)    
  231.     {    
  232.         if (cnn.State != ConnectionState.Open)    
  233.             cnn.Open();    
  234.         cmd.CommandType = cmdType;    
  235.         cmd.CommandText = cmdText;    
  236.         if (Prams != null)    
  237.         {    
  238.             cmd.Parameters.Clear();    
  239.             foreach (DbParameter Parameter in Prams)    
  240.                 cmd.Parameters.Add(Parameter);    
  241.         }    
  242.         return cmd;    
  243.     }    
  244.     public DataSet GetDataSetByProc(string ProcName, DbParameter[] Params)    
  245.     {    
  246.         cnn.Open();    
  247.         DbCommand cmd = CreateCommand(CommandType.StoredProcedure, ProcName, Params);    
  248.         DbDataAdapter adapter = provider.CreateDataAdapter();    
  249.         adapter.SelectCommand = cmd;    
  250.         DataSet ds = new DataSet();    
  251.         adapter.Fill(ds);    
  252.         cnn.Close();    
  253.         return ds;    
  254.     }    
  255.     #endregion    
  256.     
  257. }    
Web.config
[html] view plaincopyprint?
  1. <appSettings/>    
  2.     <connectionStrings>    
  3.           <!--添加引用System.Data.OracleClient-->  
  4.         <add name="ORACLE" connectionString="Data Source=TestSer;User ID=user1; Password=pwd1; Omit Oracle Connection Name=True; enlist=false" providerName="System.Data.OracleClient"/>  
  5.         <add name="MSSQL" connectionString="Data Source=TestSer;Initial Catalog=forum;Integrated Security=True" providerName="System.Data.SqlClient"/>    
  6.         <add name="ACCESS" connectionString="Provider=Microsoft.Jet.Oledb.4.0;Data Source=|DataDirectory|db1.mdb" providerName="System.Data.OleDb"/>    
  7.         <add name="MYSQL" connectionString="Data Source=192.168.0.2;Initial Catalog=test;Persist Security Info=True;User ID=user1;Password=pass1" providerName="MySql.Data.MySqlClient"/>    
  8.     </connectionStrings>    
  9.     <system.data>    
  10.         <DbProviderFactories>    
  11.             <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=5.2.1.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />    
  12.         </DbProviderFactories>    
  13.     </system.data>   
0 0
原创粉丝点击