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

2020-09-18 02:32发布

         点击此处--->   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。

         点击此处--->   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
1楼-- · 2020-09-18 02:47

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

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

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

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

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

HTH

Avinash

野沐沐
2楼-- · 2020-09-18 02:48

SAP Sybase Mainframe Connect 不是此问题的正确标记。
正确的标记应为 SAP Adaptive Server Enterprise
这将使正确的受众了解您的问题
谢谢

追夢秋陽
3楼-- · 2020-09-18 02:40

嗨,

我记得几年前这个确切的问题。 这是CR 678477,将EnableBulkLoad = 0与Identity列一起使用会导致错误。 在15.7 ESD#5及更高版本中已修复此问题。

您是否要在连接字符串中添加enablebulkload = 1?

我还记得一个身份列损坏的问题导致了同样的问题,身份值已更改,并且ASE无法正确映射更改,如果我没记错的话,这是一些ASE错误。

谢谢,
黎明金

一周热门 更多>