我尝试将数据从.DAT文件(从SQL Server输出)批量加载到SQL CE 4.0文件。我一直在使用ErikEJ的SqlCeBulkCopy类从SQL Server中完美地加载数据,但是从.DAT开始就是一个问题。
我创建了一个实现IDataReader的类来读取.DAT,所以我可以将读者传递给SqlCeBulkCopy.WriteToServer方法。读者大多似乎很好,但我有空的问题;从.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)
at System.Number.ParseInt32(String s,NumberStyles style,NumberFormatInfo info) 在System.Byte.Parse(String s,NumberStyles style,NumberFormatInfo info) at System.Convert.ToByte(String value,IFormatProvider provider) 在System.Data.SqlServerCe.SqlCeUpdatableRecord.SetClrTypeValue(Int32 ordinal,Object value,String method) 在System.Data.SqlServerCe.SqlCeUpdatableRecord.SetValue(Int32 ordinal,Object value) 在ErikEJ.SqlCe.SqlCeBulkCopy.WriteToServer(ISqlCeBulkCopyInsertAdapter适配器) 在ErikEJ.SqlCe.SqlCeBulkCopy.WriteToServer(IDataReader阅读器) 在E:\ Code \ Desktop中的MySoftware.Modules.Analysis.SqlCeFileConfiguration.SqlCeBulkDataStreamer.CopyFromReader(IDataReader reader,String destinationConnectionString,String tableName)MySoftware \ software \ desktop_and_web \ MySoftware \ MySoftware.Analysis \ SqlCeFileConfiguration \ SqlCeBulkDataStreamer.cs:第42行 在E:\ Code \ Desktop中的MySoftware.Modules.Analysis.Services.SqlCeDataManagerService.InsertData(String connectionString,String tempWorkFolder,TableInfo tableInfo)MySoftware \ software \ desktop_and_web \ MySoftware \ MySoftware.Analysis \ Services \ SqlCeDataManagerService.cs:line 742 < / p>
答案 0 :(得分:0)
导入中是否有任何数值?听起来它试图转换/解析int及其失败。
答案 1 :(得分:0)
事实证明问题是我错过的;源不是null,它实际上是一个空字符串。当我从.DAT文件中读取时,我似乎在错误的位置进行转换。