zoukankan      html  css  js  c++  java
  • 从 bcp 客户端收到一个对 colid x 无效的列长度。

    出现场景: 批量插入数据的时候出现这个问题。

    原因分析:某个数据的长度应该是大于这个数据对应的列的定义长度。

    所以一一检查到底是那个列的长度超出了。

    第一种方法:

    ——————————2017-1-3更新——————————————

    从 bcp 客户端收到一个对 colid x 无效的列长度。colid x 是多少说明是第x+1列出了问题,比如colid 1说明是第二列。那么一一排查这列的数据就可以找到问题所在。

    如果数据太多的话可以直接修改数据库的字段,把字段的数据类型的长度增大就行了。比如原先varchar(50)那么可以变成varchar(100)再试一下。

    ——————————2017-1-3更新——————————————

    网络提供了这个种方法,可以查找具体是哪个列的长度超出了。

    public void GetFiledSizeTest()
    {
     string fileFullName = @"D:GameLogs2015-01-30_000000Login.log";
     //每列的最大长度
     Dictionary<int, int> dicFieldLength = new Dictionary<int, int>();
     //每列的最大长度所在行号
     Dictionary<int, int> dicMaxFieldLenthRowNum = new Dictionary<int, int>();
     for (int i = 0; i < 11; i++)
     {
      dicFieldLength.Add(i, 0);
      dicMaxFieldLenthRowNum.Add(i, 0);
     }
     if (new FileInfo(fileFullName).Length > 0)
     {
      using (StreamReader sr = new StreamReader(fileFullName, Encoding.UTF8))
      {
       int rowNum = 0;
       while (sr.Peek() > -1)
       {
        string strRow = sr.ReadLine();
        rowNum++;
        object[] objRow = strRow.Split(',');
        for (int i = 0; i < objRow.Length; i++)
        {
           var len=objRow[i].ToString().Length;
     
           if (dicFieldLength[i] < len)
           {
            dicFieldLength[i] = len;
            dicMaxFieldLenthRowNum[i] = rowNum;
           }
     
        }
       }
      }
     }
    }

     ——————————2017-9-4更新——————————————

    注意检查这几项:1、插入的某一列的数据的长度是否大于数据库列的定义的长度?

                                2、数据库某一列是否不为空,而插入的数据却为空

                               3、当用sqlbulkcopy批量插入数据时,内存数据表DataTable的列和数据库的列是否一致。

  • 相关阅读:
    ORACLE--Connect By、Level、Start With的使用(Hierarchical query-层次查询)
    小工具-ANT
    测试类。。。重写篇
    java代码----求最大值,平均值。。。
    java代码,输入n多个数,求其平均值,虽有重复,但是第二次,我就乱写了
    java代码求输入数的平均值~~~~
    java代码求输入的三个数的最大值
    java代码switch语句求分数等级
    java代码求分数等级的输出~~~
    java代码 求和1+1/2+1/3+1/4+1/5+1/6+.......+1/n 的值~~~~
  • 原文地址:https://www.cnblogs.com/sunxi/p/4861629.html
Copyright © 2011-2022 走看看