C# 使用OracleClient链接的新方式

目前根据网上的资料C#连Oracle数据主要有两种方式OracleClient和OleDB,不得不说这两种方式都非常古老了,更别说ADO.Net组件组件中的OracleClient已经被弃用了。

但是现在有了一种新的解决方案,那就是Oracle官方的OracleClient,而且用了它之后也不再需要单独的监听程序了。

下面是使用方法:

1.右键您的项目---管理NuGet程序包-搜索Oracle找到Oracle.ManagedDataAccess这个插件;


2.下面直接按照往常的通用方法写就可以了

           

 /// 
            /// 连接字符串
            /// 
            private static string connString = ConfigurationManager.AppSettings["DataSourceConnection"];
            /// 
            /// 执行单条sql
            /// 
            /// sql语句
            /// 参数
            public static int Execute(string sql, OracleParameter[] paras)
            {
                int i = 0;
                using (OracleConnection conn = new OracleConnection(connString))
                {
                    try { 
                    using (OracleCommand command = new OracleCommand
                    {
                        Connection = conn,
                        CommandText = sql
                    })
                    {
                        if (conn.State != System.Data.ConnectionState.Open)
                            conn.Open();

                        //添加参数
                        if (paras != null)
                        {
                            command.Parameters.AddRange(paras);
                        }

                        //这个调用将把参数数组传进SQL,同时写入数据库 
                        i = command.ExecuteNonQuery();
                        command.Parameters.Clear();
                    }
                    }
                    catch (OracleException E)
                    {
                        throw new Exception(E.Message);
                    }
                    finally
                    {
                        conn.Close();
                    }
                }
                return i;
            }

connString链接信息需要说明一下,这个地方跟SQLServer有显著不同:

Password=***;User ID=***;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=***)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=****)))



以下为执行事务的备忘:

public static bool ExecuteTran(List models)
            {
                bool issuccess = false;
                using (OracleConnection conn = new OracleConnection(connString))
                {
                    try { 
                    if (conn.State != System.Data.ConnectionState.Open)
                        conn.Open();
                    using (OracleTransaction tran = conn.BeginTransaction()) //开始数据库事务。即创建一个事务对象tran  
                    {
                        using (OracleCommand cmd = new OracleCommand())
                        {
                            cmd.Connection = conn;
                            cmd.Transaction = tran; //获取或设置将要其执行的事务  
                            try
                            {
                                foreach (var m in models)
                                {
                                    cmd.CommandText = m.sql;
                                    if (m.paras != null)
                                    {
                                        cmd.Parameters.AddRange(m.paras);
                                    }
                                    cmd.ExecuteNonQuery();
                                    cmd.Parameters.Clear();
                                }
                                tran.Commit(); //如果两条sql命令都执行成功,则执行commit这个方法来执行这些操作。 
                                issuccess = true;
                            }
                            catch (OracleException E)
                                {
                                   tran.Rollback();//如果执行不成功,发送异常,则执行rollback方法,回滚到事务操作开始之前。  
                                     issuccess = false;
                                    throw new Exception(E.Message);
                                }
                        }
                    }
                    }
                    catch (OracleException E)
                    {
                        throw new Exception(E.Message);
                    }
                    finally
                    {
                        conn.Close();
                    }
                }
                return issuccess;
            }







你可能感兴趣的:(Oracle)