簡體   English   中英

使用 C#.NET 從 SQL 向 Oracle 批量插入數據

[英]Bulk data insert from SQL to Oracle using C#.NET

以下代碼片段用於將數據從 SQL DB 批量插入 Oracle 數據庫。

我在 oracle 數據庫中使用了帶有 2 個參數(int 和 string)的存儲過程

執行查詢時出現以下錯誤。 請幫我解決這個問題。 或為批量數據插入提出任何好的解決方案。

我的查詢:

List<int> arrPersonId = new List<int>();

        foreach (DataRow row in ds.Tables[0].Rows)
        {
            arrPersonId.Add(Convert.ToInt32(row["USER_ID"]));

        }

        List<string> arrPersonName = new List<string>();

        foreach (DataRow row in ds.Tables[0].Rows)
        {
            arrPersonName.Add(row["USERNAME"].ToString());
        }

        OracleConnection connection = new OracleConnection();
        connection.ConnectionString = DAKObj.GetOraConnectionString();

        OracleCommand command = new OracleCommand();
        command.Connection = connection;

        command.CommandType = CommandType.StoredProcedure;
        command.CommandText = "sp_InsertByODPNET";

        command.Parameters.Add("@PersonId", OracleDbType.Int32);
        command.Parameters[0].Value = arrPersonId;
        command.Parameters.Add("@PersonName", OracleDbType.Varchar2, 100);
        command.Parameters[1].Value = arrPersonName;
       command.ArrayBindCount = arrPersonId.Count;

       connection.Open();
       command.ExecuteNonQuery();
       connection.Close();

錯誤:-

Oracle.DataAccess.dll 中發生了“System.InvalidCastException”類型的異常,但未在用戶代碼中處理

附加信息:無法將“System.Collections.Generic.List`1[System.Int32]”類型的對象轉換為“System.Array”

問題似乎是 .Net 提供者不喜歡List<int> ,並且不夠聰明(或沒有足夠的信息)來調用ToArray來獲取數組。 您可以嘗試以下操作:

List<int> lstPersonId = new List<int>();

foreach (DataRow row in ds.Tables[0].Rows)
  {
  lstPersonId.Add(Convert.ToInt32(row["USER_ID"]));
  }

List<string> lstPersonName = new List<string>();

foreach (DataRow row in ds.Tables[0].Rows)
  {
  lstPersonName.Add(row["USERNAME"].ToString());
  }

int[] arrPersonId = lstPersonId.ToArray();
string[] arrPersonName = lstPersonName.ToArray();

OracleConnection connection = new OracleConnection();
connection.ConnectionString = DAKObj.GetOraConnectionString();

OracleCommand command = new OracleCommand();
command.Connection = connection;

command.CommandType = CommandType.StoredProcedure;
command.CommandText = "sp_InsertByODPNET";

command.Parameters.Add("@PersonId", OracleDbType.Int32);
command.Parameters[0].Value = arrPersonId;
command.Parameters.Add("@PersonName", OracleDbType.Varchar2, 100);
command.Parameters[1].Value = arrPersonName;
command.ArrayBindCount = arrPersonId.Length;

connection.Open();
command.ExecuteNonQuery();
connection.Close();

未在動物身上進行測試 - 您將是第一個! :-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM