首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用IDataReader实现SqlCeBulkCopy失败

用IDataReader实现SqlCeBulkCopy失败
EN

Stack Overflow用户
提问于 2013-11-14 11:33:42
回答 2查看 275关注 0票数 1

我试图将数据从.DAT文件(从Server输出)大容量加载到SQLCE4.0文件。我一直在使用ErikEJ的SqlCeBulkCopy类完美地从Server加载数据,但是从.DAT加载数据是一个问题。

我创建了一个实现IDataReader以从.DAT读取的类,以便将读取器传递给SqlCeBulkCopy.WriteToServer方法。读取器似乎很好,但我在使用null时遇到了问题;当从.DAT文件读取null并将其插入目标表中的可空列时,会引发异常。

我很想相信我在某种程度上实现了IDataReader接口错误。我将值存储在System.Object数组中,方法IsDBNull是以这种方式实现的:

代码语言:javascript
复制
public bool IsDBNull(int i)
{
   return Values[i] == null;
}

值得注意的是,我已经在这里放置了一个断点,并且没有调用该方法。

否则,我的相关方法是:

代码语言:javascript
复制
    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)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-14 12:22:20

原来问题是我漏掉的;源不是null,它实际上是一个空字符串。当我从.DAT文件中读取时,似乎是在错误的地方进行转换。

票数 0
EN

Stack Overflow用户

发布于 2013-11-14 11:37:23

您的导入中有数字值吗?听起来好像它试图转换/解析一个int,而它失败了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19976582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档