を使用して、Oracle から SQL Server にデータをコピーしようとしていますbulkcopy
。問題は、Oracle のブール データは として格納さvarchar2(1)
れt
、f
SQL Server のブール データ型はおよびbit
として格納されることです。したがって、次のエラーが発生しました。1
0
データ ソースからの String 型の指定された値を、指定されたターゲット列の bit 型に変換できません。
System.InvalidOperationException: データ ソースからの String 型の指定された値を、指定されたターゲット列の bit 型に変換できません。
System.FormatException: パラメータ値を文字列からブール値に変換できませんでした。
System.FormatException: 文字列が有効なブール値として認識されませんでした。
この問題を解決する方法はありますか?
using (OracleConnection srcConn = new OracleConnection())
using (SqlConnection destConn = new SqlConnection())
{
srcConn.ConnectionString = AppInfo.SrcConnStr;
srcConn.Open();
destConn.ConnectionString = AppInfo.DestConnStr;
destConn.Open();
using (SqlCommand destCmd = new SqlCommand("SET DATEFORMAT mdy;", destConn))
using (OracleCommand srcCmd = new OracleCommand("ALTER SESSION SET NLS_DATE_FORMAT = 'yyyy-mm-dd hh24:mi:ss'", srcConn))
{
srcCmd.CommandText = "select * from test";
rd = srcCmd.ExecuteReader();
SqlBulkCopy copy = new SqlBulkCopy(destConn);
// ColumnMappings property is used to map column positions, not data type
copy.DestinationTableName = "test";
copy.NotifyAfter = 2000;
copy.SqlRowsCopied += new SqlRowsCopiedEventHandler(OnSqlRowsCopied);
copy.BulkCopyTimeout = 10000000;
try { copy.WriteToServer((IDataReader)rd); }
TargetCount = (Int32)(typeof(SqlBulkCopy).GetField("_rowsCopied", BindingFlags.NonPublic | BindingFlags.GetField | BindingFlags.Instance)).GetValue(copy);
copy.Close();
rd.Close();
}
}
SqlDataReader
キャストが T を 1 に、F を 0 に変換することを期待して、 toをキャストしたことに注意してくださいIDataReader
。明らかにそうではありません。
どんな助けでも大歓迎です。
ありがとう、