当目标具有标识列时,AseBulkCopy.WriteToServer失败

2020-09-18 02:32发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)我的源有2列(Viz:ForeN...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我的源有2列(Viz:ForeName和SurName),目的地有3列,其中一列是身份列(即Id(smallint identity),Forename和Surname)。

" Id的映射"列为空(即未完成映射)

使用(AseBulkCopy blk =新的AseBulkCopy(connectionString))
  {//将超时设置为默认值30s
        blk.BulkCopyTimeout = 30;
       blk.DestinationTableName ="雇员";
       blk.ColumnMappings.Clear();
      //映射源序号和目标序号
       blk.ColumnMappings.Add(new AseBulkCopyColumnMapping(0,1));
       blk.ColumnMappings.Add(new AseBulkCopyColumnMapping(1,2));
       blk.WriteToServer(dataSource);
       blk.Close();
 } 

AseBulkCopy.WriteToServer(dataSource)引发异常Sybase.Data.AseClient.AseException:批量插入失败。 不为null的列中不允许为null。

3条回答
Climb_Ma
2020-09-18 02:47

从DBA角度来看,这对ASE实用程序bcp更加熟悉-

bcp-输入有两个选项,可在加载数据时处理标识列。

-E从输入文件中获取数据。 因此,身份列必须包含在数据中

-g <身份起始值>-数据中未包含"身份"列

在C#代码中,您是否有任何设置可以模拟上面的第二个选项,并将其初始值设置为1或适合您的要求。

HTH

Avinash

一周热门 更多>