我試圖批量加載數據從一個.DAT文件(輸出從SQL Server)到一個SQL CE 4.0文件。我一直在使用ErikEJ的SqlCeBulkCopy類從SQL Server完全加載數據,但是.DAT一直是個問題。SqlCeBulkCopy IDataReader實施失敗
我創建了一個實現IDataReader從.DAT讀取的類,所以我可以將讀取器傳入SqlCeBulkCopy.WriteToServer方法。讀者似乎很好,但我遇到了空值的問題;從.DAT文件讀取空值並將其插入到目標表中的可空字段時,會引發異常。
我很想相信我已經在某種方式實現了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信息) at System.Convert.ToByte(String value,IFormatProvider provider) at System.Data.SqlServerCe.SqlCeUpdatableRecord.SetClrTypeValue(Int32 ordinal,Object value,String method) at System.Data.SqlServerCe.SqlCeUpdatableRecord。 SetValue(Int32序數,對象值) 在ErikEJ.SqlCe.SqlCeBulkCopy.WriteToServer(ISqlCeBulkCopyInsertAdapter適配器) 在ErikEJ.SqlCe.SqlCeBulkCopy.WriteToServer(IDataReader的讀取器) 在MySoftware.Modules.Analysis.SqlCeFileConfiguration.SqlCeBulkDataStreamer.CopyFromReader(IDataReader的讀取器,字符串destinationConnectionString,字符串表名)在E:\ Code \ Desktop MySoftware \ software \ desktop_and_web \ MySoftware \ MySoftware.Analysis \ SqlCeFileConfiguration \ SqlCeBulkDataStreamer.cs:line 42 at MySoftware.Modules.Analysis.Services.SqlCeDataManagerService.InsertData(String connectionString,String tempWorkFolder,TableInfo tableInfo)in E:\ Code \ Desktop MySoftware \ software \ desktop_and_web \ MySoftware \ MySoftware.Analysis \ Services \ SqlCeDataManagerService.cs:line 742
使用堆棧跟蹤找出拋出異常的位置。它不會從您發佈的代碼中拋出。 – Joe
我已經添加了堆棧跟蹤。我可以看到它試圖將一個字符串解析爲一個字節,但爲什麼同樣的方法對SqlDataReader工作正常,而不是我自己的實現? – MrShoes