C# 连接 Oracle数据库增删改查,事务
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C# 连接 Oracle数据库增删改查,事务,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含6776字,纯文字阅读大概需要10分钟。
内容图文
![C# 连接 Oracle数据库增删改查,事务](/upload/InfoBanner/zyjiaocheng/880/69344618a27b4eb1859eff0d820a1f49.jpg)
一. 前情提要
一般.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
/// <summary>
/// 查询表数据(单表)
/// </summary>
/// <param name="sql">sql语句</param>
/// <returns></returns>
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
/// <summary>
/// 查询表数据(单表)
/// </summary>
/// <param name="sql">sql语句</param>
/// <returns></returns>
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
/// <summary>
/// 查询表数据(单表)
/// </summary>
/// <param name="sql">sql语句</param>
/// <returns></returns>
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则表示有数据收到影响
/// <summary>
/// 执行sql 语句
/// </summary>
/// <param name="sql"></param>
/// <returns>返回影响的行数</returns>
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集合中,传到方法中即可
/// <summary>
/// 执行sql List语句
/// </summary>
/// <param name="sqlText">需要执行的List</param>
/// <returns>返回true/false</returns>
public static Boolean ExeTransaction(List<string> 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
<connectionStrings>
<add name="Conn_DB" connectionString="Data Source=(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =
(PROTOCOL = TCP)(HOST = 192.168.1.13)(PORT=8686)))(CONNECT_DATA =(SERVER = DEDICATED)
(SERVICE_NAME = STUTEST)));User Id=WMSTEST;Password=WMSTEST;" providerName="Oracle.DataAccess.Client" />
</connectionStrings>
下面分几种情况:
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文件)
<oracle.manageddataaccess.client>
<version number="*">
<dataSources>
<dataSource alias="orcl" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME = orcl)))"/>
</dataSources>
</version>
</oracle.manageddataaccess.client>
使用 TNS_ADMIN目录:
<oracle.manageddataaccess.client>
<version number="*">
<settings>
<setting name="TNS_ADMIN" value="C:\app\oracle\product\12.1.0\client_1\Network\Admin\"/>
</settings>
</version>
</oracle.manageddataaccess.client>
2. ASP.NET Core,我这边使用 Mongodb演示
appsetting.json
"MongodbHost": {
"Connection": "mongodb://127.0.0.1:27017",
"DataBase": "Blog_Server",
"Table": ""
}
MongodbHostOptions.cs 既然是面向对象的语言,最好是定义一个实体类
public class MongodbHostOptions
{
/// <summary>
/// 连接字符串
/// </summary>
public string Connection { get; set; }
/// <summary>
/// 库
/// </summary>
public string DataBase { get; set; }
/// <summary>
/// 表
/// </summary>
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<MongodbHostOptions>(Configuration.GetSection("MongodbHost"));
}
...
注入示例
// MongodbHost信息,类对象之下
private readonly MongodbHostOptions _mongodbHostOptions;
// 构造函数,注入一下
public BlogController(IOptions<MongodbHostOptions> mongodbHostOptions)
{
_mongodbHostOptions = mongodbHostOptions.Value;
}
本文参考以下两位大佬,感谢:
springsnow:https://www.cnblogs.com/springsnow/p/11393678.html
withJoy:https://www.cnblogs.com/xqz0618/p/Oracle.html
内容总结
以上是互联网集市为您收集整理的C# 连接 Oracle数据库增删改查,事务全部内容,希望文章能够帮你解决C# 连接 Oracle数据库增删改查,事务所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。