[编程笔记] 从 bcp 客户端收到一个对 colid 7 无效的列长度

news/2024/9/20 22:46:58/文章来源:https://www.cnblogs.com/sunshine-wy/p/18394264

    最近在做一个工具改造,实现A库数据导B库的功能。今天遇到一个奇怪问题,“从 bcp 客户端收到一个对 colid 7 无效的列长度”。

    代码是从A库执行SELECT语句到本地DataTable,再将DataTable插入到B库,插入的过程是通过SqlBulkCopy实现的,这样做的好处是不用写INSERT语句,只要DataTable的列名和B库表中列名一致,则传入DataTable直接插入即可。

    这里贴一下工具方法,有需要的可以参考一下:

public class DataHandler
{/// <summary>/// 把DataTable中数据快速插入指定表中/// </summary>/// <param name="connectionString">目标连接字符</param>/// <param name="tableName">目标表(数据库表名)</param>/// <param name="dataSource">源数据</param>public void SqlBulkCopyByDatatable(string connectionString, string tableName, DataTable dataSource, ref string msg){SqlTransaction tran = null;//声明一个事务对象using (SqlConnection conn = new SqlConnection(connectionString)){conn.Open();using (tran = conn.BeginTransaction()){using (SqlBulkCopy sqlbulkcopy = new SqlBulkCopy(conn, SqlBulkCopyOptions.Default, tran)){try{sqlbulkcopy.DestinationTableName = tableName;sqlbulkcopy.BatchSize = 100;// 这里的Dt处理一下,删掉RID,避免列不一致导致插入失败if (dataSource.Columns.Contains("RID")){dataSource.Columns.Remove("RID");}// 设置列映射for (int i = 0; i < dataSource.Columns.Count; i++){sqlbulkcopy.ColumnMappings.Add(dataSource.Columns[i].ColumnName, dataSource.Columns[i].ColumnName);}sqlbulkcopy.WriteToServer(dataSource);tran.Commit();}catch (Exception ex) {msg = ex.Message;tran.Rollback();}}}}}
}

    dt有个RID,是因为外层我的查询字符串处理了根据RID处理了分页,所以这里插入前处理下这个列,下面的设置列映射很好用,如果不映射的话默认是一列一列对齐插入的,遇到表字段非常多的情况,写起来很麻烦。

    言归正传,“从 bcp 客户端收到一个对 colid 7 无效的列长度”,这个错误是怎么来的呢?看现象是DataTable和表之间数据长度不一致,我的DataTable如下:

    colid 7,我原本一位是d_branch_no字段,因为从0开始数的话,索引为7的刚好是d_branch_no,所以分析是这个列没有值导致报错。后面发现不是。

    colid 7是指DataTable的第7列,从1开始数!初看branch_no是没有问题的,我们数据库这个字段在我现在要用的表里就是6位,那为什么报错呢?

    眼睛看了好久看不出来,把查DataTable的语句在查询分析器中通过INSERT INTO ... SELECT ... FROM 的形式执行是正常的,这可就难到我了。这种问题一般就是某个细节没注意到,和预期不一致导致问题产生。

    果然,我想起我们系统里的“历史债务”,很多表的字段用的char类型,char类型当位数不足时自动用空格补齐内容。

    比如field字段设计的是char(6),如果field存进去的是00,那么这个字段在数据库的值是 “00    ”,而非 “00”,所以查询的时候如果没有考虑空格,那么就会出现和预期不一致的现象,一些奇怪的bug由此而生!

    在前面的笔记中提到过,数据库字段设计为char类型是历史债务,现在不适合改类型,影响面太广。因此这里的做法是查询的时候使用rtrim把空格去掉,这样DataTable没有空格后,数据就可以正常插入了。

 

    小结:空格防不胜防,只能自己多加小心了。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/791543.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

毕设开发日记第一阶段

第一阶段完成任务其实很简单,但是因为是第一次使用Unity,美术方面也可以说是零基础,我还是花费了好几天的时间在第一阶段的开发上面。 首先我确定是做一个2D的人物移动自由世界的游戏,所以我这边采用Unity作为游戏开发引擎,aseprite作为美术开发工具。 人物动画我刚开始尝…

Dubbo学习圣经:从入门到精通 Dubbo3.0 + SpringCloud Alibaba 微服务基础框架

文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 :《尼恩Java面试宝典》 持续更新+ 史上最全 + 面试必备 2000页+ 面试必备 + 大厂必备 +涨薪必备 免费赠送 :《尼恩技术圣经+高并发系列PDF》 ,帮你 实现技术自由,…

【日记】领导和领导之间差距还挺大(1223 字)

正文今天属实体验到了一波领导和领导之间的差距。7,8,9,10 号公休,今天省分行突然发通知,说信贷人员上岗资格考试 9.7 号下午考。我上午 10:30 从成都飞哈尔滨的机票。假条都批了。我跑去跟副行长汇报,副行长直接跟我说,那你能克服的还是克服一下,改签吧,考完再去公休。我…

2024Hvv漏洞汇总(128个POC)

2024年9月3日 Hvv情报搜集,漏洞合集全部都有POC(128个POC),可成功复现。2024Hvv漏洞整理(128个POC) ​(网上漏洞零零散散)下面是收集到的且有POC的漏洞整理合集,鄙人分了三种格式供各位提取,下面贴上目录与图片,由于字数有点大,各位请移步网盘自行提取。按照Hvv时间…

Spring boot 2.x集成swagger

1、官方文档2、历史版本安装 如果使用的不是最新的spring boot版本,则进入红框链接,打开历史版本列表。图片中也说明了springdoc-openapi v1.8.0 is the latest Open Source release supporting Spring Boot 2.x and 1.x.3、2.x版本文档 https://springdoc.org/v1/

初赛模拟题一

初赛模拟题一 T1 (C++ %)C++ "%" 的规则 \[a \% b = c \]\[c = a - \lfloor \frac{a}{b} \rfloor * b \]\(\lfloor \rfloor\) 的规则: 向 0 取整, 如 \((-9) / 5 = -1\),\(9 / 5 = 1\)T3 (GDB)GDB 全称“GNU symbolic debugger”,从名称上不难看出,它诞生于 GNU…

地理围栏,打造智能生活新边界

随着智能手机和其他移动设备的普及,用户对基于位置获取个性化服务的需求大幅增加,例如用户进入商圈范围并停留操作一段时间后,智能触发向用户推送该商圈吃、喝、玩、乐的优惠活动消息;又如当用户到达非常驻地的机场时触发围栏,向用户推送询问是否需要预定机场附近的酒店的…

K8s使用cephfs(静态和动态两种)

一、K8s节点安装 ceph-common CephFS是 Ceph 中基于RADOS(可扩展分布式对象存储)构建,通过将文件数据划分为对象并分布到集群中的多个存储节点上来实现高可用性和可扩展性。 首先所有 k8s 节点都需要安装 ceph-common 工具: yum -y install epel-release ceph-common二、静…

Vue3+NestJS+Vite4+TS4+Mysql8+Nginx全栈开发企业级管理后台

Vue3+NestJS+Vite4+TS4+Mysql8+Nginx全栈开发企业级管理后台vite打包快的原因:冷启动1.esbuild构建依赖,go语言编写多线程打包。2.原生的esm方式提供源码,浏览器分担了一部分工作。 HMR热更新1.缓存机制,利用浏览器http头部,源码模块请求根据304协商缓存和依赖模块请求通过…

CUDA常见驱动程序兼容性问题一览

CUDA常见驱动程序兼容性问题一览关注TechLead,复旦博士,分享云服务领域全维度开发技术。拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,复旦机器人智能实验室成员,国家级大学生赛事评审专家,发表多篇SCI核心期刊学术论文,阿里云认证的资深架构师,上亿营收AI产…