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(); }
三、多线程访问
咱略