zoukankan      html  css  js  c++  java
  • .net2.0中SqlBulkCopy批量复制数据出错原因分析!

            在项目后台数据库选择SqlServer,进行批量复制数据时,.net2.0中提供的SqlBulkCopy不失为一个好的选择,性能相当可观;最近亲手实验一把,效果不错,大家可以参见http://www.cnblogs.com/webabcd/archive/2007/04/09/705165.html

            不过在使用的过程中也遇到让人抓狂的问题,最突出的就是在程序执行中提示" error: 0"错误,然后Sql服务器就被关闭.解决的方法竟然是因为一列的长度搞错了!

            问题的起因如下:项目中需要提供针对不同数据源进行数据导入操作,现提供两种:Excel,DBF.
    在用Excel为数据源,就可以直接进行数据导入! 但导入数据源用的是DBF,相关的数据信息已经读取到内存,但在执行到bulkCopy.WriteToServer(sourceData);时 就会出现如下错误:
    "在从服务器接收结果时发生传输级错误。 (provider: TCP 提供程序, error: 0 - 远程主机强迫关闭了一个现有的连接。)" 然后sqlserver的服务会被停止!

    在调试时,数据已经读到DT中,开始估计应该是列映射类型没做好的原因!但没前SqlBulkCopoy没有找到怎样映射列类型;由于SqlBulkCopy的与BCP类似,于是对问题分析的重点转向分析BCP的导入导出,在进行将DBF文件导入SqlServer时,出现了奇怪的问题,数据类型为Datetime的列竟然在导入时不能被识别,必须手动的进行设置,大家可以试一下(vfp文件导入sql2005);

    随着对上面问题的分析,没办法,服务被停止,问题太大了,只有老老实实的从头做起,先用最基本的字段测试SqlBulkCopy,DBF文件用简单的一个字段测试,通过,两个字段,也通过,加上DateTime字段,也通过,奇怪了???
    在仔细检查原来导入出错的DBF文件,原来是因为当中有一字段类型与数据库中字段长度不相同,改过来之后问题就解决了!

    为什么会这样,简单的一个小问题,会出现这么可怕的结果"sql服务被停止",是不是SqlBulkCopy的BUG呢?


  • 相关阅读:
    IIS配置桌面上的文件报错,可能是含有中文字符
    GridView序号
    图片处理函数(自适应缩略图datatable中添加缩略图像)
    linqtoobject
    数据库存取图片二进制数据
    反射
    jquery
    加干扰字符
    Doc的窗口就创建一个,如果已经存在就激活那个窗口,不存在就建立Doc(转自CSDN)
    VC++中使用内存映射文件处理大文件(转)
  • 原文地址:https://www.cnblogs.com/linfuguo/p/907666.html
Copyright © 2011-2022 走看看