以下代码片段,用于将数据从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();
发生了'System.InvalidCastException'类型的异常 Oracle.DataAccess.dll但未在用户代码中处理
附加信息:无法投射类型的对象 键入'System.Collections.Generic.List`1 [System.Int32]' '的System.Array'
答案 0 :(得分:1)
问题似乎是.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();
未在动物身上进行测试 - 您将成为第一个! : - )