.DAT ファイル (SQL Server からの出力) から SQL CE 4.0 ファイルにデータを一括ロードしようとしています。私は ErikEJ の SqlCeBulkCopy クラスを使用して SQL Server から完全にデータをロードしましたが、.DAT からは問題がありました。
.DAT から読み取る IDataReader を実装するクラスを作成したので、リーダーを SqlCeBulkCopy.WriteToServer メソッドに渡すことができます。リーダーはほとんど問題ないようですが、ヌルに問題があります。NULL が .DAT ファイルから読み取られ、宛先テーブルの NULL 許容列に挿入されると、例外がスローされます。
私は IDataReader インターフェイスを何らかの方法で間違って実装したと信じたくなりました。System.Object の配列に格納されている値があり、IsDBNull メソッドは次のように実装されています。
public bool IsDBNull(int i)
{
return Values[i] == null;
}
ここにブレークポイントを設定し、メソッドが呼び出されていないことに注意してください。
それ以外の場合、関連する方法は次のとおりです。
public object GetValue(int i)
{
return Values[i] ?? DBNull.Value;
}
object IDataRecord.this[int i]
{
get { return GetValue(i); }
}
object IDataRecord.this[string name]
{
get
{
return GetValue(GetOrdinal(name));
}
}
私が受け取る例外は、「入力文字列が正しい形式ではありませんでした」というメッセージを含む FormatException です。私がどこで間違っているのか誰にも分かりますか?
これは、例外からのスタック トレースです。
at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
System.Number.ParseInt32 (文字列 s、NumberStyles スタイル、NumberFormatInfo 情報) で System.Byte.Parse (文字列 s、NumberStyles スタイル、NumberFormatInfo 情報) で System.Convert.ToByte (文字列値、IFormatProvider プロバイダー) で System.Data. ErikEJ.SqlCe.SqlCeBulkCopy.WriteToServer(ISqlCeBulkCopyInsertAdapter アダプタ) の System.Data.SqlServerCe.SqlCeUpdatableRecord.SetValue(Int32 序数、オブジェクト値) の SqlServerCe.SqlCeUpdatableRecord.SetClrTypeValue(Int32 序数、オブジェクト値、文字列メソッド) ErikEJ.SqlCeBu.SqlCeBu.SqlCeBulk E:\Code\Desktop MySoftware\software\desktop_and_web\MySoftware\MySoftware.Analysis\SqlCeFileConfiguration\SqlCeBulkDataStreamer.cs: E:\Code\Desktop MySoftware\software\desktop_and_web\MySoftware\MySoftware.Analysis の MySoftware.Modules.Analysis.Services.SqlCeDataManagerService.InsertData(String connectionString, String tempWorkFolder, TableInfo tableInfo) の 42 行目\Services\SqlCeDataManagerService.cs:742行目