我正在尝试从.DAT 文件(从 SQL Server 输出)到 SQL CE 4.0 文件。我一直在使用ErikEJ的SqlCeBulkCopy类从SQL Server完美地加载数据,但是从.DAT一直是一个问题。
我创建了一个实现 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)
at 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) at System.Data.SqlServerCe.SqlCeUpdatableRecord.SetClrTypeValue(Int32 ordinal, Object value, String method) at System.Data.SqlServerCe.SqlCeUpdatableRecord.SetValue(Int32 ordinal, Object value) at ErikEJ.SqlCe.SqlCeBulkCopy.WriteToServer(ISqlCeBulkCopyInsertAdapter adapter) at ErikEJ.SqlCe.SqlCeBulkCopy.WriteToServer(IDataReader reader) at MySoftware.Modules.Analysis.SqlCeFileConfiguration.SqlCeBulkDataStreamer.CopyFromReader(IDataReader reader, String destinationConnectionString, String tableName) in 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
导入中是否有任何数值? 听起来它试图转换/解析一个 int 并且它失败了。
事实证明,问题是我错过的; 源不是空的,它实际上是一个空字符串。似乎当我从.我在错误的地方转换的 DAT 文件。