我试图将数据从.DAT文件(从Server输出)大容量加载到SQLCE4.0文件。我一直在使用ErikEJ的SqlCeBulkCopy类完美地从Server加载数据,但是从.DAT加载数据是一个问题。
我创建了一个实现IDataReader以从.DAT读取的类,以便将读取器传递给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。有人知道我哪里出问题了吗?
这是异常的堆栈跟踪:
在System.Number.StringToNumber(String,NumberStyles options,NumberBuffer& NumberBuffer,NumberFormatInfo info,布尔parseDecimal) 在System.Data.SqlServerCe.SqlCeUpdatableRecord.SetClrTypeValue(Int32序号处的System.Number.ParseInt32(String s,NumberStyles style,NumberFormatInfo info) at System.Byte.Parse(String s,NumberStyles style,NumberFormatInfo info) at System.Convert.ToByte(String value,IFormatProvider provider),对象值,String方法),( ErikEJ.SqlCe.SqlCeBulkCopy.WriteToServer(ISqlCeBulkCopyInsertAdapter适配器))(在ErikEJ.SqlCe.SqlCeBulkCopy.WriteToServer(IDataReader阅读器))在MySoftware.Modules.Analysis.SqlCeFileConfiguration.SqlCeBulkDataStreamer.CopyFromReader(IDataReader阅读器,字符串destinationConnectionString,字符串tableName)在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,E:\Code\Desktop MySoftware\software\desktop_and_web\MySoftware\MySoftware.Analysis\Services\SqlCeDataManagerService.cs:line 742中的TableInfo tableInfo)
发布于 2013-11-14 12:22:20
原来问题是我漏掉的;源不是null,它实际上是一个空字符串。当我从.DAT文件中读取时,似乎是在错误的地方进行转换。
发布于 2013-11-14 11:37:23
您的导入中有数字值吗?听起来好像它试图转换/解析一个int,而它失败了。
https://stackoverflow.com/questions/19976582
复制相似问题