无法使用vb.net将数据导入到hana模式表

2020-08-16 16:19发布

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

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


专家们,

我想将Excel工作表直接导入SAP Business One 9.3 For Hana使用的SAP HANA 1.0的HANA模式的内部表中。 Excel工作表包含一些数据。 只有一张纸,有20列。

Excel表格是通过使用vs的 vb.net 开发的应用程序从mysql导出的 。2015或2010,然后将其导入到hana模式表中。 在hana模式和mysql模式中,表名称为Invoice_AR。

进行导入时,系统提示错误。 错误消息的屏幕截图如下:

我在mysql模式表和hana模式表之间创建了相同的列类型。 我没有在mysql模式表字段中使用double。 我也不使用列类型'system.init32'。

在系统中导入excel数据期间是否有任何变化?

这是代码 我正在使用:

私有子ImportToHana(FullFileName作为字符串)

         Dim filenam作为字符串
         filenam = FullFileName
         将ExcelConnection设置为新的System.Data.OleDb.OleDbConnection(" Provider = Microsoft.ACE.OLEDB.12.0; Data Source =" + filenam +";扩展属性="" Excel 12.0 Xml; HDR = Yes""")
         ExcelConnection.Open()
         Dim expr As String =" SELECT * FROM [Sheet1 $]"
         Dim objCmdSelect As OleDbCommand =新的OleDbCommand(expr,ExcelConnection)
         昏暗的objDR作为OleDbDataReader

         昏暗的SQLconn作为新的HanaConnection()
         Dim sConn As String =""
         sConn =" Server ="&sSAPServerName&_
                                 "; Current Schema ="&sSAPDbName&_
                                 "; UseTrusted = False"&_
                                 "; UserID ="&sSAPDbUserName&_
                                 "; Password ="&sSAPDbPassword

         SQLconn.ConnectionString = sConn
         SQLconn.Open()

         将bulkCopy用作HanaBulkCopy = New HanaBulkCopy(SQLconn)
             bulkCopy.DestinationTableName =" AR_Invoice"

             尝试
                 objDR = objCmdSelect.ExecuteReader
                 bulkCopy.WriteToServer(objDR)
                 objDR.Close()
                 SQLconn.Close()
                 MsgBox("数据已成功导入到SQL",MsgBoxStyle.Information)
             异常捕获
                 MsgBox(例如ToString)
             结束尝试
         最终使用
     结束

请帮助解决此问题。

谢谢。

Rgds

史蒂夫

(13.7 kB)

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

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


专家们,

我想将Excel工作表直接导入SAP Business One 9.3 For Hana使用的SAP HANA 1.0的HANA模式的内部表中。 Excel工作表包含一些数据。 只有一张纸,有20列。

Excel表格是通过使用vs的 vb.net 开发的应用程序从mysql导出的 。2015或2010,然后将其导入到hana模式表中。 在hana模式和mysql模式中,表名称为Invoice_AR。

进行导入时,系统提示错误。 错误消息的屏幕截图如下:

我在mysql模式表和hana模式表之间创建了相同的列类型。 我没有在mysql模式表字段中使用double。 我也不使用列类型'system.init32'。

在系统中导入excel数据期间是否有任何变化?

这是代码 我正在使用:

私有子ImportToHana(FullFileName作为字符串)

         Dim filenam作为字符串
         filenam = FullFileName
         将ExcelConnection设置为新的System.Data.OleDb.OleDbConnection(" Provider = Microsoft.ACE.OLEDB.12.0; Data Source =" + filenam +";扩展属性="" Excel 12.0 Xml; HDR = Yes""")
         ExcelConnection.Open()
         Dim expr As String =" SELECT * FROM [Sheet1 $]"
         Dim objCmdSelect As OleDbCommand =新的OleDbCommand(expr,ExcelConnection)
         昏暗的objDR作为OleDbDataReader

         昏暗的SQLconn作为新的HanaConnection()
         Dim sConn As String =""
         sConn =" Server ="&sSAPServerName&_
                                 "; Current Schema ="&sSAPDbName&_
                                 "; UseTrusted = False"&_
                                 "; UserID ="&sSAPDbUserName&_
                                 "; Password ="&sSAPDbPassword

         SQLconn.ConnectionString = sConn
         SQLconn.Open()

         将bulkCopy用作HanaBulkCopy = New HanaBulkCopy(SQLconn)
             bulkCopy.DestinationTableName =" AR_Invoice"

             尝试
                 objDR = objCmdSelect.ExecuteReader
                 bulkCopy.WriteToServer(objDR)
                 objDR.Close()
                 SQLconn.Close()
                 MsgBox("数据已成功导入到SQL",MsgBoxStyle.Information)
             异常捕获
                 MsgBox(例如ToString)
             结束尝试
         最终使用
     结束

请帮助解决此问题。

谢谢。

Rgds

史蒂夫

(13.7 kB)
付费偷看设置
发送
4条回答
南山jay
1楼-- · 2020-08-16 17:10

您好,史蒂夫

您可以删除hanabulkcopy并改用其他方法。

您可以尝试使用此示例(在C#中):

使用System.IO;
 使用System.Data;
 使用System.Data.OleDb;
 使用System.Data.HanaClient;
 使用System.Configuration;

 受保护的void Upload(对象发送者,EventArgs e)
 {
 //上传并保存文件
   字符串excelPath = Server.MapPath("〜/Files/")+
   Path.GetFileName(FileUpload1.PostedFile.FileName);
   FileUpload1.SaveAs(excelPath);

 字符串conString = string.Empty;
 字符串扩展名= Path.GetExtension(FileUpload1.PostedFile.FileName);
 开关(扩展名)
 {
     case" .xls"://Excel 97-03
         conString = ConfigurationManager.ConnectionStrings [" Excel03ConString"]。ConnectionString;
         打破;
     case" .xlsx"://Excel 07或更高版本
         conString =


 ConfigurationManager.ConnectionStrings [" Excel07 + ConString"]。ConnectionString;
         打破;

 }
 conString = string.Format(conString,excelPath);
 使用(OleDbConnection excel_con = new OleDbConnection(conString))
 {
     excel_con.Open();
     字符串sheet1 = excel_con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,
     null).Rows [0] [" TABLE_NAME"]。ToString();
     DataTable dtExlData = new DataTable();

    //[可选]:建议使用此数据,否则将考虑数据
     默认为字符串。
     dtExlData.Columns.AddRange(new DataColumn [3] {new DataColumn(" Id",
     typeof(int)),
             新的DataColumn(" Name",typeof(string)),
             new DataColumn(" Salary",typeof(decimal))});

     使用(OleDbDataAdapter oda = new OleDbDataAdapter(" SELECT * FROM [" +
    sheet1 +"]",excel_con))
     {
         oda.Fill(dtExlData);
     }
     excel_con.Close();

     字符串consString =
     ConfigurationManager.ConnectionStrings [" constr"]。ConnectionString;
     使用(HanaConnection con = new HanaConnection(consString))
     {
         使用(HanaBulkCopy HanaBulkCopy = new HanaBulkCopy(con))
         {
            //设置数据库表名
             HanaBulkCopy.DestinationTableName =" dbo.AR_Invoice";

            //[可选]:将Excel列与数据库表的列进行映射
             HanaBulkCopyColumnMappings.Equal(" EntryId"," EntryId");
             HanaBulkCopyColumnMappings.Equal(" CardCode"," CardCode");
             HanaBulkCopyColumnMappings.AddEqualPriceTotal"," PriceTotal");
             con.Open();
             HanaBulkCopy.WriteToServer(dtExlData);
             con.Close();
         }
     }
 }
  } 

祝你好运

Rgds

吉米

打一壶酱油
2楼-- · 2020-08-16 17:15

你好杰夫,

感谢您的回复。 我已经使用此链接引用的查询在hana studio中创建了一个架构:

https ://answers.sap.com/questions/9629291/creating-a-schemadatabase-on-hana-simple-please.html

模式名称是DB_ARINV。 我在DB_ARINV模式中创建的表名称是AR_Invoice。
Excel文件是从mysql导出的。 源中使用的数据字段已与Hana AR_Invoice表中的数据字段相同。

这是我用来创建它的查询:

使用DbSQL
 创建表AR_发票
 (
 id int
 LineNo int,
 WksCode NCHAR(20),
 ARType nchar(20),
 ARId NChar(20),
 ARInvAll NChar(20),
 FedTaxNo NChar(20),
 项目名称NCHAR(100),
 ItemGroup NCHAR(100),
 TotalAmnt十进制(8,2),
 邀请日期时间,
 OcrCode NCHAR(20),
 OcrCode2 NCHAR(20),
 RegToSAP tinyint(1),
 RegFromSql tinyint(1),
 DateExpToSql日​​期时间,
 DateExpToHana日期时间,
 ExpDocNum NCHAR(20),
 ExpNote NCHAR(100),
 ExpStatus NCHAR(20))
 

在Hana Schema中,我使用此查询来创建表AR_Invoice并授予访问权限:

设置模式DB_ARINV;
 创建表AR_Invoice(Id int,LineNo int,WksCode CHAR(20),ARType CHAR(20),ARId CHAR(20),ARInvAll CHAR(20),
 FedTaxNo VARCHAR(20),ItemName CHAR(100),ItemGroup CHAR(100),TotalAmnt DECIMAL(8,2),邀请SECONDDATE,OcrCode CHAR(20),
 OcrCode2 CHAR(20),RegToSAP tinyint,RegFromSql tinyint,
 DateExpToSql SECONDDATE,DateExpToHana SECONDDATE,ExpDocNum CHAR(20),ExpNote CHAR(100),ExpStatus CHAR(20))

在excel文件中,除了日期列之外,这些列(从mysql导出)均没有特定格式。 格式是自定义的。 其他列格式是常规格式。

请帮助我解决此问题。 预先感谢。

Rgds

Steve

me_for_i
3楼-- · 2020-08-16 17:04

在创建数据类型为double的hana模式表后,我再次发现错误消息:

我不知道hanabulkcopy是否仍然存在错误或在使用时可能不匹配。 之前测试过吗? 是否可以通过QC Check才能在sap hana中使用?

clasier
4楼-- · 2020-08-16 16:51

有人可以解决此问题吗? 我需要你的帮助。

除了使用hanabulkcopy之外,还有其他解决方案吗? 您能否共享示例代码以将excel导入sap hana 1.0中的hana模式表? 预先感谢

一周热门 更多>