我正在开发一个用 C# 编写的 ASP.NET Core MVC 应用程序,其中的
.cshtml
视图中有 2 个 jQuery 数据表。我想将这 2 个 jQuery 数据表中的大量数据添加并更新到 Oracle 数据库。
Oracle数据库中有2个存储过程。我想调用这 2 个存储过程来将记录添加和更新到 Oracle 数据库中。我想将数据插入到 Oracle DB 中的一个表中,并将数据更新到 Oracle DB 中的另一个表中(一次 2 个不同的操作)。
Oracle中是否有使用C#代码进行批量复制或批量插入或批量更新的操作?在一些帖子中,它说批量复制/插入不是执行此操作的正确方法。这是正确的吗?
OracleConnection con = new OracleConnection(ConnectionString);
con.Open();
OracleCommand cmd = new OracleCommand(con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "procedure name";
cmd.ExecuteNonQuery();
如果向 Oracle 发送超过 1000 条记录,我会收到超时异常。有什么办法可以做到吗?
假设您有一个用户列表
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
}
您可以将批量插入与人员对象列表(列表)一起使用,并通过事务将这些人员批量插入或更新到您的 Oracle 数据库中
using Oracle.ManagedDataAccess.Client;
using System;
using System.Collections.Generic;
using System.Data;
public class OracleBulkOperations
{
private readonly string connectionString = "your_connection_string";
public void BulkInsertAndUpdate(List<Person> people)
{
using (var connection = new OracleConnection(connectionString))
{
connection.Open();
using (var transaction = connection.BeginTransaction())
{
try
{
// Bulk Insert using stored procedure
using (var cmdInsert = new OracleCommand("YourInsertStoredProcedure", connection))
{
cmdInsert.BindByName = true;
cmdInsert.CommandType = CommandType.StoredProcedure;
// Set the number of records being processed
cmdInsert.ArrayBindCount = people.Count;
// Bind arrays for insert
cmdInsert.Parameters.Add("p_ids", OracleDbType.Int32, people.Select(t=>t.ID).ToArray(), ParameterDirection.Input);
cmdInsert.Parameters.Add("p_names", OracleDbType.Varchar2, people.Select(t=>t.Name).ToArray(), ParameterDirection.Input);
// Execute bulk insert
cmdInsert.ExecuteNonQuery();
}
// Commit the transaction
transaction.Commit();
}
catch (Exception ex)
{
transaction.Rollback();
Console.WriteLine($"An error occurred: {ex.Message}");
}
}
}
}
}