c#using Oracle.ManagedDataAccess.Client 批量保存数据

在C#中使用Oracle.ManagedDataAccess.Client来批量保存数据是一种高效的方法,尤其是在需要插入大量数据时。Oracle.ManagedDataAccess.Client是Oracle提供的官方.NET数据访问库,它支持ADO.NET接口。以下是一些常用的方法来实现批量插入数据:

方法1:使用OracleBulkCopy

OracleBulkCopy是Oracle提供的一个专门用于批量插入数据的类。使用此方法可以显著提高数据插入的性能。

步骤:
  1. 添加必要的命名空间引用。
  2. 创建OracleConnection对象并打开连接。
  3. 创建OracleBulkCopy对象并配置目标表和映射。
  4. 调用WriteToServer方法执行批量插入。
示例代码:

using System;

using System.Data;

using Oracle.ManagedDataAccess.Client;

class Program

{

static void Main()

{

string connString = "User Id=yourUsername;Password=yourPassword;Data Source=yourDataSource";

using (OracleConnection conn = new OracleConnection(connString))

{

conn.Open();

using (OracleBulkCopy bulkCopy = new OracleBulkCopy(conn))

{

bulkCopy.DestinationTableName = "your_table_name"; // 设置目标表名

DataTable table = new DataTable();

table.Columns.Add("column1", typeof(string)); // 添加列和类型

table.Columns.Add("column2", typeof(int)); // 根据你的表结构添加列和类型

// 添加数据行

table.Rows.Add("value1", 1);

table.Rows.Add("value2", 2);

// 更多数据行...

bulkCopy.WriteToServer(table); // 执行批量插入

}

}

}

}

方法2:使用OracleCommandOracleTransaction进行批量插入

如果不想使用OracleBulkCopy,你也可以通过手动构建SQL语句和事务来批量插入数据。这种方法提供了更高的灵活性,但性能可能不如使用OracleBulkCopy

示例代码:

using System;

using System.Data;

using Oracle.ManagedDataAccess.Client;

class Program

{

static void Main()

{

string connString = "User Id=yourUsername;Password=yourPassword;Data Source=yourDataSource";

using (OracleConnection conn = new OracleConnection(connString))

{

conn.Open();

OracleCommand cmd = new OracleCommand("INSERT INTO your_table_name (column1, column2) VALUES (:column1, :column2)", conn);

cmd.Parameters.Add("column1", OracleDbType.Varchar2, 50, "column1", ParameterDirection.Input);

cmd.Parameters.Add("column2", OracleDbType.Int32, "column2", ParameterDirection.Input);

cmd.BindByName = true; // 使用参数名绑定参数,而不是位置绑定

using (OracleTransaction trans = conn.BeginTransaction())

{

try

{

cmd.Transaction = trans; // 将命令与事务关联起来

// 批量插入数据,这里以循环插入为例,实际应用中可以根据需要调整逻辑以批量处理数据集。

for (int i = 0; i < 1000; i++) // 假设我们要插入1000条数据

{

cmd.Parameters["column1"].Value = $"value{i}"; // 设置参数值

cmd.Parameters["column2"].Value = i; // 设置参数值

cmd.ExecuteNonQuery(); // 执行插入命令,但不提交事务,等待所有数据插入后一起提交。

}

trans.Commit(); // 提交事务,完成批量插入操作。

}

catch (Exception ex)

{

trans.Rollback(); // 出错时回滚事务。

Console.WriteLine(ex.Message);

}

}

}

}

}

注意:

  • 确保你的表名、列名和连接字符串是正确的。
  • 对于大量数据的批量操作,建议先测试性能,并根据实际需要选择合适的批量大小。例如,在某些情况下,一次性插入几千到几万条记录可能更合适。调整批量大小可以优化性能和内存使用。
  • 使用事务可以确保数据的完整性和一致性,特别是在出现错误时能够回
相关推荐
偶遇急雨洗心尘16 分钟前
记录一次服务器迁移时,数据库版本不一致导致sql函数报错和系统redirect重定向丢失域名问题
运维·服务器·数据库·sql
Arva .38 分钟前
MySQL 的存储引擎
数据库·mysql
Logic10144 分钟前
《Mysql数据库应用》 第2版 郭文明 实验5 存储过程与函数的构建与使用核心操作与思路解析
数据库·sql·mysql·学习笔记·计算机网络技术·形考作业·国家开放大学
小二·1 小时前
MyBatis基础入门《十六》企业级插件实战:基于 MyBatis Interceptor 实现 SQL 审计、慢查询监控与数据脱敏
数据库·sql·mybatis
bing.shao1 小时前
Golang WaitGroup 踩坑
开发语言·数据库·golang
专注VB编程开发20年1 小时前
C#内存加载dll和EXE是不是差不多,主要是EXE有入口点
数据库·windows·microsoft·c#
小二·1 小时前
MyBatis基础入门《十二》批量操作优化:高效插入/更新万级数据,告别慢 SQL!
数据库·sql·mybatis
何中应1 小时前
【面试题-6】MySQL
数据库·后端·mysql·面试题
路遥_131 小时前
银河麒麟 V10 安装部署瀚高数据库 HighGoDB 4.5 全流程(统信UOS Server 20同理)
数据库
TDengine (老段)1 小时前
从关系型数据库到时序数据库的思维转变
大数据·数据库·mysql·时序数据库·tdengine·涛思数据·非关系型数据库