SqlBulkCopyを実行して200k +レコードをOracleからSQLに移動します。 WriteToServerの実行時にguidを文字列に変換する際にエラーが発生しました。 Oracleでは、テーブルはGUIDをnvarchar(50)として保存します。 SQLは一意の識別子です。 SQL文は、Oracleソース表からすべてのデータを選択するだけで何も気にしません。
public void BulkCopyFromOrl(OracleDataReader rdr, string targetTableName)
{
// open Sql connection
var _con = GetConnection();
// Sql Bulk Copy instance
var _bc = new SqlBulkCopy(_con);
// set destination table
_bc.DestinationTableName = targetTableName;
// set batch size (optional)
_bc.BatchSize = 10000;
// set time out (optional)
_bc.BulkCopyTimeout = 600;
// write to server
_bc.WriteToServer(rdr);
// close and dispose
_bc.Close();
// close and dispose
Terminate(null, _con);
}
public SqlDataReader GetSourceData(string tableName)
{
// todo: should be parameterized but for demonstration in the console app,
// just add columns and table name
var sql = string.Format("SELECT {0} FORM {1}", MappedColumns(), tableName);
return ExecuteReader(sql);
}
それはFROMではなく、FORMであると私は考える:
public SqlDataReader GetSourceData(string tableName)
{
// todo: should be parameterized but for demonstration in the console app,
// just add columns and table name
var sql = string.Format("SELECT {0} FROM {1}", MappedColumns(), tableName);
return ExecuteReader(sql);
}