mvc5连接oracle,C# 连接 Oracle数据库增删改查,事务

一. 前情提要

一般.NET环境连接Oracle数据库,是通过 TNS/SQL.NET 配置文件,而 TNS 必须要 Oracle 客户端(如果连接的是服务器的数据库,本地还要装一个 client ,还要把 TNS 文件放进去安装路径里面)

1. Using System.Data.OracleClient

微软自带的,据说已经不维护了,总之是需要客户端的。

2. Oracle.DataAccess.dll

一般在 Oracle 安装目录下 product\11.2.0\dbhome_1\ODP.NET\bin\2.x 里面。但是我碰到的问题就是:

Oracle.DataAccess.Client.OracleException: The provider is not compatible with the version of Oracle client

无论是换 2.112.1 的 Oracle.DataAccess.x86 还是 4.112.3 的 Oracle.DataAccess.x86.4 ,怎么都找不到原因。

没错,Oracle.DataAccess.dll 是分32为和64位的,主要看你的客户端版本

3. Oracle.ManagedDataAccess.dll(极力推荐)

Oracle官网为C#提供的全新ODP.NET方式的全托管驱动,并且还支持EF,支持分布式事务。

NuGet搜索一下就能找到,ASP.NET Core 版的也是有。

这三个 dll 使用的方式我觉得是没有什么不同的(至少我还没接触到不同的地方)

但是这个 dll 的使用方法有些不同,后续讲到

二. 操作类

1. 获取连接字符串

// 从 web.config 拿,MVC

static string connString = ConfigurationManager.ConnectionStrings["Conn_DB"].ToString();

// 直接写,不需要配置文件

static string connString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=118.31.20.98)(PORT=33602))(CONNECT_DATA=(SERVICE_NAME=STUTEST)));Persist Security Info=True;User ID=WMSTEST;Password=WMSTEST;";

// 还有就是 ASP.NET Core 的注入构造函数,这个在文章最后

2. 查询表数据

DataSet

///

/// 查询表数据(单表)

///

/// sql语句

///

public static DataSet SelectData(string sql)

{

DataSet ds = new DataSet();

try

{

using (OracleConnection conn = new OracleConnection(connString))

{

OracleCommand cmd = new OracleCommand(sql, conn);

OracleDataAdapter adapter = new OracleDataAdapter(cmd);

adapter.Fill(ds);

return ds;

}

}

catch (Exception e)

{

Console.Write(e);

}

return null;

}

DataTable

///

/// 查询表数据(单表)

///

/// sql语句

///

public static DataTable SelectData(string sql)

{

DataTable dt = new DataTable();

try

{

using (OracleConnection conn = new OracleConnection(connString))

{

OracleCommand cmd = new OracleCommand(sql, conn);

OracleDataAdapter adapter = new OracleDataAdapter(cmd);

adapter.Fill(dt);

return dt;

}

}

catch (Exception e)

{

Console.Write(e);

}

return null;

}

DataView

///

/// 查询表数据(单表)

///

/// sql语句

///

public static DataView SelectData(string sql)

{

DataTable dt = new DataTable();

try

{

using (OracleConnection conn = new OracleConnection(connString))

{

OracleCommand cmd = new OracleCommand(sql, conn);

OracleDataAdapter adapter = new OracleDataAdapter(cmd);

adapter.Fill(dt);

return dt.DefaultView;

}

}

catch (Exception e)

{

Console.Write(e);

}

return null;

}

3. 增/删/改

插入,删除,修改都可用一个方法,执行语句相同,返回true则表示有数据收到影响

///

/// 执行sql 语句

///

///

/// 返回影响的行数

public static Boolean AddUpDelData(string sql)

{

try

{

using (OracleConnection conn = new OracleConnection(connString))

{

conn.Open();

OracleCommand cmd = new OracleCommand(sql, conn);

int row = cmd.ExecuteNonQuery();

conn.Close();

if (row > 0)

{

return true;

}

}

}

catch (Exception e)

{

Console.Write(e);

}

return false;

}

4. 批量 增/删/改(事务)

事务,事务是多条SQL语句一起执行,如果一条错误,那么将会回滚。这个在表之间主外键关系是有必要同时生效。只要把SQL语句放在List集合中,传到方法中即可

///

/// 执行sql List语句

///

/// 需要执行的List

/// 返回true/false

public static Boolean ExeTransaction(List sqlText)

{

using (OracleConnection conn = new OracleConnection(connString))

{

conn.Open();

OracleTransaction tran = conn.BeginTransaction();

try

{

OracleCommand cmd = new OracleCommand();

cmd.Transaction = tran;

cmd.Connection = conn;

foreach(string item in sqlText)

{

cmd.CommandText = item;

cmd.ExecuteNonQuery();

}

tran.Commit();

return true;

}

catch (Exception et)

{

tran.Rollback();

return false;

}

finally

{

conn.Close();

}

}

}

三. 配置项(这里我使用的是 Oracle.ManagedDataAccess.dll)

1. ASP.NET MVC

web.config

下面分几种情况:

1) 无配置文件,直接连接DB

无SQL*Net 配置文件tnsnames.ora

string conString = "User Id=hr; password=hr;Data Source=localhost:1521/orcl; Pooling=false;";

2) 使用配置文件方式

使用 tnsnames.ora文件,此放置在应用程序同目录,至于代码中怎么引用 同目录下的 TNS 我也没尝试过。tnsnames.ora内容:

ORCL =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = orcl)

)

)

使用 App\web.config配置文件定义别名(无tnsnames.ora文件)

使用 TNS_ADMIN目录:

2. ASP.NET Core,我这边使用 Mongodb演示

appsetting.json

"MongodbHost": {

"Connection": "mongodb://127.0.0.1:27017",

"DataBase": "Blog_Server",

"Table": ""

}

MongodbHostOptions.cs 既然是面向对象的语言,最好是定义一个实体类

public class MongodbHostOptions

{

///

/// 连接字符串

///

public string Connection { get; set; }

///

/// 库

///

public string DataBase { get; set; }

///

/// 表

///

public string Table { get; set; }

}

Startup.cs

// 首先 using 一下命名空间

using Microsoft.Extensions.Configuration;

// 后面的就是在 Startup 中的配置

...

public Startup(IConfiguration configuration)

{

Configuration = configuration;

}

public IConfiguration Configuration { get; }

public void ConfigureServices(IServiceCollection services)

{

services.AddControllers();

// MongodbHost信息 依赖注入一下,这样就可以在别的 类 的构造函数中注入

services.Configure(Configuration.GetSection("MongodbHost"));

}

...

注入示例

// MongodbHost信息,类对象之下

private readonly MongodbHostOptions _mongodbHostOptions;

// 构造函数,注入一下

public BlogController(IOptions mongodbHostOptions)

{

_mongodbHostOptions = mongodbHostOptions.Value;

}

标签:C#,cmd,改查,sql,Oracle,new,public,conn

来源: https://www.cnblogs.com/dylan1iu/p/12026056.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值