开发环境
名称 | 版本 |
---|---|
操作系统 | Windows 10 X64 |
Oracle | win64_11gR2_database |
PLSQL Developer | 11.0.4.1788(64 bit)01.179332 - Unlimited user license |
Visual Studio | 2010 |
问题描述
程序中有一个上传 Excel 表,替换某张表所有数据的功能
由于是全量替换,所以使用 DataTable
直接把数据添加到表,代码如下
/// <summary>
/// 批量插入DataTable数据到目标表
/// </summary>
public bool BulkInsertToDB(DataTable dt, string tableName)
{
if (dt == null || dt.Rows.Count == 0)
{
return false;
}
string connStr = GetDBConnectionStr();
OracleConnection conn = new OracleConnection(connStr);
OracleBulkCopy bulkCopy = new OracleBulkCopy(connStr, OracleBulkCopyOptions.UseInternalTransaction);
bulkCopy.BulkCopyTimeout = 260;
bulkCopy.DestinationTableName = tableName; // 目标表的名称
bulkCopy.BatchSize = dt.Rows.Count; // 每一批次中的行数
try
{
conn.Open();
bulkCopy.WriteToServer(dt); // 将DataTable中的数据复制到目标表
return true;
}
catch (Exception ex)
{
Log.Info("Repository-批量插入DataTable数据到目标表:" + ex);
throw ex;
}
finally
{
conn.Close();
if (bulkCopy != null)
{
bulkCopy.Close();
}
}
}
掉用此方法报错 oracle 'uid' 是无效的连接字符串属性
问题分析
我猜测是连接字符串的问题,我的连接字符串是
<add name="TPS.ConnectionString2" connectionString="data source=luoma_db;uid=luoma;pwd=luoma_PS;Max Pool Size=100;Min Pool Size=5;" providerName="System.Data.OracleClient" />
问题解决
其实上面的连接字符串没有问题,平常使用的增删查改都是使用这个连接字符串,但是在这里出现了问题,于是我把这个连接字符串修改为
<add name="TPS.ConnectionString2" connectionString="Data Source=luoma_db;User Id=luoma;Password=luoma_PS;" providerName="System.Data.OracleClient"/>
问题解决
测试结果
再次运行程序,没有报错,调用也成功了。