• 企业400电话
  • 网络优化推广
  • AI电话机器人
  • 呼叫中心
  • 全 部 栏 目

    网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    使用SqlBulkCopy时应注意Sqlserver表中使用缺省值的列
    POST TIME:2021-10-18 18:47
    SqlBulkCopy 来自数据源的 String 类型的给定值不能转换为指定目标列的类型 nvarchar。

    image

    在网上找了下,大都说是因为数据库中的字段过小(

    来自数据源的 String 类型的给定值不能转换为指定目标列的类型 nvarchar。
    ),造成截断的错误导致,仔细检查后发现我的表设计中没有字段过小的情况,也不是单引号的问题。

    后经仔细调试发现,由于使用SqlBulkCopy导入时我的文本文件与库中的表列不对应造成的。我的文本文件中有字段18个,而我的表中只使用了9个字段,且有两个是文本文件中没有的(即表结构1中的[Level]与[Cagegory]字段),由数据库填入默认值。表结构如下:

    复制代码 代码如下:

    表结构11
    CREATE TABLE [dbo].[Ryxx](
    [Name] [nvarchar](30) NOT NULL,
    [IdCardNo] [nvarchar](30) NOT NULL,
    [Sex] [nvarchar](2) NOT NULL,
    [Height] [nvarchar](5) NULL,
    [Level] [nvarchar](2) NULL, --默认为A
    [Category] [nvarchar](20) NULL, --默认为“重点管理”
    [Sponsor] [nvarchar](100) NULL,
    [Contact] [nvarchar](30) NULL,
    [Phone] [nvarchar](50) NULL,
    [Number] [nvarchar](30) NULL

    ) ON [PRIMARY]

    表结构1

    修改后的表结构如下
    复制代码 代码如下:

    CREATE TABLE [dbo].[Ryxx](
    [Name] [nvarchar](30) NOT NULL,
    [IdCardNo] [nvarchar](30) NOT NULL,
    [Sex] [nvarchar](2) NOT NULL,
    [Height] [nvarchar](5) NULL,
    [Sponsor] [nvarchar](100) NULL,
    [Contact] [nvarchar](30) NULL,
    [Phone] [nvarchar](50) NULL,
    [Number] [nvarchar](30) NULL,
    [Level] [nvarchar](2) NULL, --默认为A
    [Category] [nvarchar](20) NULL --默认为“重点管理”
    ) ON [PRIMARY]

    至此,问题解决。分析原因是因为从文本文件中获取的字段对应到表中缺省列中去了,产生了截断,想想使用bcp 时应该也会出现这样的错误。

    您可能感兴趣的文章:
    • asp.net 使用SqlBulkCopy极速插入数据到 SQL Server
    • C#中使用ADOMD.NET查询多维数据集的实现方法
    • C#数据库操作类AccessHelper实例
    • C#利用Openxml读取Excel数据实例
    • C#百万数据查询出现超时问题的解决方法
    • C#使用DataSet Datatable更新数据库的三种实现方法
    • C#应用BindingSource实现数据同步的方法
    • C#将Sql数据保存到Excel文件中的方法
    • C#中遍历DataSet数据集对象实例
    • C#使用晚绑定来实现压缩Access数据库的方法
    • C# Oracle数据库操作类实例详解
    • C#使用SqlBulkCopy批量复制数据到数据表
    上一篇:SQL Server中通过reverse取某个最后一次出现的符号后面的内容(字符串反转)
    下一篇:Sqlserver 2000/2005/2008 的收缩日志方法和清理日志方法
  • 相关文章
  • 

    关于我们 | 付款方式 | 荣誉资质 | 业务提交 | 代理合作


    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    X

    截屏,微信识别二维码

    微信号:veteran88

    (点击微信号复制,添加好友)

     打开微信