C#和Oracle的交互

1. 安装Oracle,略。

2. (非必要,全局用户也可)在sys下创建用户并授权session、create table, create tablespace, create view, unlimited tablespace。

3. 在Visual Studio 创建项目,并将Oracle本地目录下的文件 Oracle.DataAccess.dll 复制到项目的 exe所在目录下(bin/Debug/*)。

4. 调试->添加引用->浏览->找到Oracle.DataAccess.dll 选中然后勾选 确定。然后就可以在项目中 using Oracle.DataAccess.Client 了。

 

数据表的定义:

我的数据表定义为

-- create table
CREATE TABLE COURSE
(
    course_id   number(4) primary key,
    course_name VARCHAR2(16) NOT NULL,
    course_subject VARCHAR2(16) NOT NULL
)

其中 course_id 有一个通过Trigger 定义的 Sequence 作为自增主键约束。

C#程序:

using Oracle.DataAccess.Client;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace OracleCommands
{
    class Program
    {
        #region connect to oracle datebase
        public static string ConnectString =
            "Data Source=(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =127.0.0.1)(PORT =1521))" +
            " (CONNECT_DATA = (SID=****))); User Id=****;Password=****;";  // 这里填写你自己的SID、User Id、Password

        public static OracleConnection DBConn()
        {
            OracleConnection conn;
            conn = new OracleConnection(ConnectString);
            try
            {
                conn.Open();

                string sql = "SELECT * FROM course";
                using (OracleCommand comm = new OracleCommand(sql, conn))
                {
                    using (OracleDataReader rdr = comm.ExecuteReader())
                    {
                        while (rdr.Read())
                        {
                            Console.WriteLine(rdr.GetInt16(0)); // Number(4)
                            Console.WriteLine(rdr.GetString(1)); // varchar(16)
                            Console.WriteLine(rdr.GetString(2)); // varchar(16) } } } Console.WriteLine(
"Connect and Read Success."); } catch (Exception ex) { Console.WriteLine(ex.ToString()); return null; } finally { conn.Close(); } return conn; } #endregion static void Main(string[] args) { DBConn(); Console.ReadKey(); } } }

二、定义单例连接池访问Oracle。

参考博客:https://blog.csdn.net/Andrewniu/article/details/73497063,对该博客的程序小做修改。

修改为 采用Oracle.DataAccess.Client; 以及Oracle数据库的连接字符串,添加线程池参数。其他地方不做修改即可。

// 修改1,DBConnectSingleton类的Create函数,该文件内所有的conn都如此修改
        protected override object Create()
        {
            // SqlConnection conn = new SqlConnection(connectionString);
            OracleConnection conn = new OracleConnection(connectString);
            conn.Open();
            return conn;
        }

// 修改2:主程序内的连接串
        static void Main(string[] args)
        {
            // DBConn();
            // Console.ReadKey();

            // ----pool----
            DBConnSingleton pool = DBConnSingleton.Instance;
            string pool_params = "Pooling=true;Min Pool Size=5;Incr pool size=3;Max Pool Size=10;Connect Timeout=15;";
            DBConnSingleton.ConnectionString = ConnectString+pool_params;
            OracleConnection conn = pool.BorrowDBConnection();
            pool.ReturnDBConnection(conn);
            Console.WriteLine("successful.");
            Console.ReadKey();
        }

三、多线程访问

咱略

posted @ 2023-08-21 19:22  倦鸟已归时  阅读(88)  评论(0编辑  收藏  举报