[英]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.