c# .net oracle连接工具类

该类为本人项目使用中的oracle连接工具类

1.先引入OraOps10.dll

2.将该类加入项目中

dll及源码下载地址

https://pan.baidu.com/s/1aoFHKG5C1iQThC4rpZ6M_w

源码如下

using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using System.Data;
using System.Data.OracleClient;
namespace TImageEdit
{
    public class OracleHelperMS
    {
        /// 
        /// 数据库连接字符串
        /// 
        public static readonly string Constr = "Data Source=xxxx;User Id=xxxx;Password=xxx;Min Pool Size=10;Connection Lifetime=120;";

        /// 
        /// 定义hashtable表
        /// 
        private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());

        /// 基于参数的准备命令对象
        /// SqlTransaction是c#类里面的事务对象,能保持数据库的数据统一性。如果出错则回滚
        /// 
        /// OracleCommand对象
        /// OracleConnection对象
        /// sqltransaction对象
        /// 命令类型
        /// sql命令或者是存储过程名
        /// 执行命令用的sqlparamter数组
        private static void PrepareCommand(OracleCommand cmd, OracleConnection conn, OracleTransaction trans, CommandType cmdType, string cmdText, OracleParameter[] cmdParms)
        {
            if (conn.State != ConnectionState.Open)
                conn.Open();
            cmd.Connection = conn;
            cmd.CommandText = cmdText;
            //if (trans != null)
                //cmd.Transaction = trans;
            cmd.CommandType = cmdType;
            if (cmdParms != null)
            {
                foreach (OracleParameter parm in cmdParms)
                    cmd.Parameters.Add(parm);
                OracleConnection cn = new OracleConnection();

            }
        }

        /// 
        /// 基于连接字符串的数据库执行一个非查询的SQL命令
        /// 可以使用参数集传入命令参数
        /// 例子:int result =ExcuteNonQuery(connstring,cmmandType.storedprocedure,"publishOrders",new OracleParameter("@prodid",24));
        /// 为OracleConnection提供的连接字符串
        /// 命令类型(commandtype.storedprocedure,commandtype.text....)
        /// 存储过程名或者是T-SQL命令
        /// 执行命令所使用的OracleParameters数组
        ///  返回命令所影响的行数

        public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params OracleParameter[] commandParameters)
        {
            using (OracleCommand cmd = new OracleCommand())
            {
                using (OracleConnection coon = new OracleConnection(connectionString))
                {
                    PrepareCommand(cmd, coon, null, cmdType, cmdText, commandParameters);
                    //OracleTransaction myTrans=coon.BeginTransaction();
                    int val = cmd.ExecuteNonQuery();
                    //myTrans.Commit();
                    cmd.Parameters.Clear();
                    return val;
                }

            }
        }
        /// 
        /// 基于连接对象的数据库执行一个非查询的SQL命令
        /// 可以使用参数集传入命令参数
        /// 例子:int result=ExcuteNonQuery(conn,commandtype.storedprocedure,"publishorders",new OracleParameter("@prodid",24));
        /// 
        /// 一个存在的连接对象
        /// 命令类型(commandtype.storedprocedure,commandtype.text....)
        /// 存储过程名或者是T-SQL命令
        /// 执行命令所使用的OracleParameters数组
        ///  返回命令所影响的行数
        public static int ExcuteNonQuery(OracleConnection connection, CommandType cmdType, string cmdText, params OracleParameter[] commandParameters)
        {

            using (OracleCommand cmd = new OracleCommand())
            {
                PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
                int val = cmd.ExecuteNonQuery();
                cmd.Parameters.Clear();
                return val;
            }
        }

        /// 
        /// 基于事务对象的数据库执行一个非查询SQL语句
        ///  可以使用参数集传入命令参数
        /// 例子:int result=ExcuteNonQuery(trans,commandtype.storedprocedure,"publishorders",new OracleParameter("@prodid",24));
        /// 
        /// 
        /// 一个存在的事务对象
        /// 命令类型(commandtype.storedprocedure,commandtype.text....)
        /// 存储过程名或者是T-SQL命令
        /// 执行命令所使用的OracleParameters数组
        ///  返回命令所影响的行数
        public static int ExecuteNonQuery(OracleTransaction trans, CommandType cmdType, string cmdText, params OracleParameter[] commandParameters)
        {
            using (OracleCommand cmd = new OracleCommand())
            {

                PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, commandParameters);
                int val = cmd.ExecuteNonQuery();
                cmd.Parameters.Clear();
                return val;
            }

        }
        /// 
        ///  基于连接字符串的数据库执行一个查询,返回数据流sqldatareader
        ///  可以使用参数集传入命令参数
        ///  例子:SqldataReader r=ExecuteReader(connstring,commandtype.storedprocedure,"publishorders",new OracleParameter("@prodid",24));
        ///  
        /// 
        /// 为OracleConnection提供连接的字符串
        /// 命令类型(commandtype.storedprocedure,commandtype.text,...)
        /// T-SQL命令存储过程名或者是
        /// 执行命令所用的sqlparamters
        /// 
        public static OracleDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params OracleParameter[] commandParameters)
        {

            OracleCommand cmd = new OracleCommand();
            OracleConnection conn = new OracleConnection(Constr);
            try
            {
                PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
                OracleDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                cmd.Parameters.Clear();
                return rdr;
            }
            catch
            {
                conn.Close();
                throw;
            }


        }
        /// 
        /// 基于连接字符串的数据库执行一个查询,返回数据流sqldatareader
        ///  可以使用参数集传入命令参数
        /// 
        /// 
        public static DataTable PDataTable(string connectionString, CommandType cmdType, string cmdText, params OracleParameter[] commandParameters)
        {
            using (OracleConnection conn = new OracleConnection(Constr))
            {
                DataSet dataset = new DataSet();
                using (OracleCommand cmd = new OracleCommand())
                {
                    PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
                    using (OracleDataAdapter adapter = new OracleDataAdapter(cmd))
                    {

                        adapter.Fill(dataset);
                        return dataset.Tables[0];

                    }

                }

            }

        }
        /// 
        /// 获取一个数据表格
        /// 
        /// 
        public static void DoExcute(string cmdText)
        {
            OracleHelperMS.ExecuteNonQuery(OracleHelperMS.Constr, CommandType.Text, cmdText, null);
        }
        /// 
        /// 获取一个数据表格
        /// 
        /// 
        public static DataTable getDataTable(string cmdText)
        {
            return OracleHelperMS.PDataTable(OracleHelperMS.Constr, CommandType.Text, cmdText, null);
        }
        /// 
        /// 获取一行数据
        /// 
        /// 
        public static DataRow getDataRow(string cmdText)
        {
            return OracleHelperMS.PDataRow(OracleHelperMS.Constr, CommandType.Text, cmdText, null);
        }
        /// 
        /// 基于连接字符串的数据库执行一个查询,返回数据流sqldatareader
        ///  可以使用参数集传入命令参数
        /// 
        /// 
        public static DataRow PDataRow(string connectionString, CommandType cmdType, string cmdText, params OracleParameter[] commandParameters)
        {
            using (OracleConnection conn = new OracleConnection(Constr))
            {
                DataSet dataset = new DataSet();
                using (OracleCommand cmd = new OracleCommand())
                {
                    PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
                    using (OracleDataAdapter adapter = new OracleDataAdapter(cmd))
                    {

                        adapter.Fill(dataset);
                        if (dataset.Tables[0] != null && dataset.Tables[0].Rows.Count > 0)
                        {
                            return dataset.Tables[0].Rows[0];
                        }
                        else
                        {
                            return null;
                        }

                    }

                }

            }

        }
        /// 
        /// 基于连接字符串的数据库执一个查询,返回结果集得第一行第一列的数据对象
        /// 可以使用参数集传入命令参数
        /// 例子:object boj=ExecuteScalar(connstring,commandType.storedprocedure,"publishoreders",new OracleParameter("@prodid",24));
        /// 
        /// 
        /// 为OracleConnection提供的连接字符串
        /// 命令类型(commandType.storedprocedure,commandtype.text,......)
        /// 存储过程名或者T-SQL命令
        /// 执行命令所使用的sqlparamters数组
        /// 返回结果的第一行第一列
        public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params OracleParameter[] commandParameters)
        {
            using (OracleCommand cmd = new OracleCommand())
            {

                using (OracleConnection connection = new OracleConnection(Constr))
                {
                    PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
                    object val = cmd.ExecuteScalar();
                    cmd.Parameters.Clear();
                    return val;
                }

            }

        }
        /// 
        /// 基于连接对象的数据库执行一个查询,返回结果的第一行第一列的数据对象
        /// 可以使用参数集传入命令参数
        /// 例子:object obj =executescalar(conn,commandtype.storedprocedure,"publishOreders",new sqlparamters("@prodid",24));
        /// 
        /// 
        /// 一个存在的连接对象
        /// 命令类型(commandtype.storedprocedure,commondtype.text,....)
        /// 存储过程名或者T-SQL命令
        /// 执行命令所使用的sqlparamters数组
        /// 返回结果的第一行第一列
        public static object ExecuteScalar(OracleConnection connection, CommandType cmdType, string cmdText, params OracleParameter[] commandParameters)
        {

            using (OracleCommand cmd = new OracleCommand())
            {
                PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
                object val = cmd.ExecuteScalar();
                cmd.Parameters.Clear();
                return val;

            }


        }
        /// 
        /// 执行Insert
        /// 
        /// 
        /// 
        /// 
        /// 
        public static int DoInsert(string ATable, string[] AFields, object[] AValues)
        {
            string SQL = "Insert into " + ATable + "(";
            for (int i = 0; i < AFields.Length; i++)
            {
                SQL += AFields[i] + " ,";
            }
            SQL = SQL.Substring(0, SQL.Length - 1) + ") values (";
            string[] APs = new string[AFields.Length];

            for (int i = 0; i < AFields.Length; i++)
            {
                if (AValues[i].GetType() == typeof(System.DateTime))
                {
                    SQL += "to_date('" + AValues[i] + "','yyyy/mm/dd hh24:mi:ss') ,";
                }
                else
                {
                    SQL += "'" + AValues[i] + "' ,";
                }
            }
            SQL = SQL.Substring(0, SQL.Length - 1) + ") ";
            return ExecuteNonQuery(OracleHelperMS.Constr, CommandType.Text, SQL, null);
        }
        public static int ExecuteNonQuery(String SQL)
        {
            return ExecuteNonQuery(OracleHelperMS.Constr, CommandType.Text, SQL, null);
        }
        /// 
        /// 更新数据表
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        public static int DoUpdate(string ATable, string[] AFields, object[] AValues,
                string[] ACondFields, object[] ACondValues
            )
        {
            string SQL = "Update " + ATable + " Set ";
            for (int i = 0; i < AFields.Length; i++)
            {
                SQL += AFields[i] + " ='" + AValues[i] + "' ,";
            }
            SQL = SQL.Substring(0, SQL.Length - 1);
            if (ACondValues != null)
            {
                SQL += " where (1>0) ";
                for (int i = 0; i < ACondFields.Length; i++)
                {
                    SQL += " and " + ACondFields[i] + " ='" + ACondValues[i]+"'";
                }
            }
            return ExecuteNonQuery(OracleHelperMS.Constr, CommandType.Text, SQL, null);
        }
        /// 
        /// 向缓冲区添加参数
        /// 
        /// 参数集对象在缓冲区中的key
        /// 要缓存的参数集对象
        public static void CacheParameters(string cacheKey, params OracleParameter[] commandParamters)
        {
            parmCache[cacheKey] = commandParamters;

        }
        /// 
        /// 从缓冲区读取参数集对象
        /// 
        /// 参数集对象在缓冲区的key
        /// 被缓存的参数集对象
        public static OracleParameter[] GetCachedParameters(string cacheKey)
        {

            OracleParameter[] cachedParams = (OracleParameter[])parmCache[cacheKey];
            if (cachedParams == null)
                return null;
            OracleParameter[] clonedParms = new OracleParameter[cachedParams.Length];
            for (int i = 0, j = cachedParams.Length; i < j; i++)
                clonedParms[i] = (OracleParameter)((ICloneable)cachedParams[i]).Clone();
            return clonedParms;
        }
        /// 
        /// Oracle执行事务
        /// 
        /// 
        /// 
        public static bool RunTransaction(string connectionString, string[] sqls)
        {
            using (OracleConnection connection = new OracleConnection(connectionString))
            {
                connection.Open();
                OracleCommand command = connection.CreateCommand();
                OracleTransaction transaction;
                transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted);
                //command.Transaction = transaction;
                try
                {
                    foreach (string sql in sqls)
                    {
                        command.CommandText = sql;
                        command.ExecuteNonQuery();
                    }
                    transaction.Commit();
                    return true;
                }
                catch (Exception ex)
                {
                    transaction.Rollback();
                    return false;
                }
            }

        }
        /// 
        /// 更新datatable
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        public static void DataTableToDB(string connectionString, System.Windows.Forms.DataGridView GV, string selectTab, string cmdUpText, string uprow, params OracleParameter[] commandParameters)
        {
            using (OracleConnection conn = new OracleConnection(connectionString))
            {
                conn.Open();
                using (OracleDataAdapter sd = new OracleDataAdapter())
                {
                    sd.SelectCommand = new OracleCommand("select top 300 * from " + selectTab + "", conn);
                    DataSet dataset = new DataSet();
                    sd.Fill(dataset);
                    //sd.UpdateCommand = new SqlCommand("update tb11 "
                    //                + " set t3 = @t3,t4 = @t4 where t1 = @t1 and t2=@t2", conn);
                    sd.UpdateCommand = new OracleCommand(cmdUpText, conn);

                    if (commandParameters != null)
                    {
                        foreach (OracleParameter parm in commandParameters)
                            sd.UpdateCommand.Parameters.Add(parm);
                    }
                    //sd.UpdateCommand.Parameters.Add("@t1", SqlDbType.Int, 9, "t1");
                    //sd.UpdateCommand.Parameters.Add("@t2", SqlDbType.NVarChar, 4, "t2");
                    //sd.UpdateCommand.Parameters.Add("@t3", SqlDbType.NVarChar, 20, "t3");
                    //sd.UpdateCommand.Parameters.Add("@t4", SqlDbType.NVarChar, 20, "t4");
                    sd.UpdateCommand.UpdatedRowSource = UpdateRowSource.None;
                    sd.UpdateBatchSize = 0;

                    for (int count = 0; count < GV.RowCount - 1; )
                    {
                        int EverySec = 300;
                        int DataLeft = (GV.RowCount - 1) % 300;

                        for (int i = 0; i < EverySec; i++, count++)
                        {
                            if (count == (DataLeft - 1))
                            {
                                EverySec = DataLeft;
                            }
                            dataset.Tables[0].Rows[count].BeginEdit();
                            string[] lieming = uprow.Split(',');
                            for (int R = 0; R < lieming.Length; R++)
                            {
                                string t4 = lieming[R].ToString();
                                dataset.Tables[0].Rows[count][t4] = GV.Rows[count].Cells[t4].Value;
                            }
                            dataset.Tables[0].Rows[count].EndEdit();
                        }
                        try
                        {
                            sd.Update(dataset.Tables[0]);
                        }
                        catch (Exception exp)
                        {
                            throw new Exception(exp.Message);
                        }



                    }
                    //sd.Update(dt);
                    dataset.Tables[0].Clear();
                    sd.Dispose();
                    dataset.Dispose();
                }
            }
        }
    }
}

这是个静态类,直接类名+方法名调用就可以

如果有疑问可联系bug哥讨论

c# .net oracle连接工具类_第1张图片

你可能感兴趣的:(我的经验)