C#:ODBC连接将记录从Excel(xlsx)批量复制到Sybase Adaptive Server Enterprise?

2020-09-10 11:57发布

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

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


由于它是Adaptive Server Enterprise,因此 SqlConnection 不起作用,因此我必须使用其他内容,例如 OdbcConnection ,否则(如果有一些建议, )。

sybase数据库表(让我们说表 Customer )具有数百万条记录,并且每次运行该程序时,我都打算推送另一个 从excel到Sybase表 Customer 的数千条记录。 由于数量原因,我必须使用批量复制代码。 假设数据库表中已经有数百万条记录,并且excel文件中还有10,000条记录,那么我不能一一遍历excel记录,所以请批量复制代码。

我需要考虑的另一件事是:Sybase表可能已经在excel文件中包含一些记录,因此我不能真正只对记录使用SQL Insert Into 语句 在Sybase表 Customer 中已经存在,我可能需要使用SQL Update 语句。 excel文件中有一些可能的错误记录(Sybase表不会接受),我还需要使用 Try Catch 语句来捕获这些异常。

如何尝试将代码从Excel(xlsx)批量复制到Sybase Adaptive Server Enterprise的代码?

谢谢。

 private void importExcelStripMenuItem_Click(对象发送者,EventArgs e)
 {

     var filePath = string.Empty;
     OpenFileDialog OpenFile = new OpenFileDialog();

     OpenFile.Filter =" Excel文件| * .xl *"; //过滤excel文件
     OpenFile.Title ="选择您的文件";
     OpenFile.FilterIndex = 2;
     OpenFile.RestoreDirectory = true;

     如果(OpenFile.ShowDialog()== DialogResult.OK)
     {
        //获取指定文件的路径
         filePath = OpenFile.FileName;
     }



     Excel.Application xlApp =新的Excel.Application();
     Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(filePath);
     Excel._Worksheet xlWorksheet = xlWorkbook.Sheets [1]; //工作簿中只有一张纸





    //设置与EXCEL文件的连接。
     OdbcConnection myExcelConn =新的OdbcConnection(" Driver = {Microsoft Excel驱动程序(* .xls)}; DBQ =" + filePath +"; DriverID = 790");

     尝试
     {
         myExcelConn.Open();

        //从EXCEL表格获取数据。
        //从excel文件中选择所有字段,但最好不要使用SELECT * FROM ....,因为其他列中可能存在不等价的数据,所以我只复制了前6列,Sybase表Customer也只有这6个字段 。
         OdbcCommand ObjCmd = new OdbcCommand(" SELECT SocialSecurityNumber,FirstName,LastName,Gender,DOB,PhoneNumber FROM [" + xlWorksheet.Name +" $]",myExcelConn);

        //读取从EXCEL文件中提取的数据。
         OdbcDataReader objBulkReader = null;
         objBulkReader = ObjCmd.ExecuteReader();



        //关闭Excel文件
         xlWorkbook.Close(false);
         xlApp.Quit();


        //设置连接字符串。


         使用(OdbcConnection con = new OdbcConnection(" Sybase ASE Con​​nection String"))
         {
             con.Open();

            //最后,将数据加载到数据库表中。
            //我不知道如何编写这部分代码。
         }

         MessageBox.Show("成功加载。");

     }


     抓住(前例外)
     {

         MessageBox.Show(ex.Message);

     }

     最后
     {
            //清除。
            //清除批量复制期间发生的其他对象
             myExcelConn.Close();
             myExcelConn = null;
     }
 } 

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

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


由于它是Adaptive Server Enterprise,因此 SqlConnection 不起作用,因此我必须使用其他内容,例如 OdbcConnection ,否则(如果有一些建议, )。

sybase数据库表(让我们说表 Customer )具有数百万条记录,并且每次运行该程序时,我都打算推送另一个 从excel到Sybase表 Customer 的数千条记录。 由于数量原因,我必须使用批量复制代码。 假设数据库表中已经有数百万条记录,并且excel文件中还有10,000条记录,那么我不能一一遍历excel记录,所以请批量复制代码。

我需要考虑的另一件事是:Sybase表可能已经在excel文件中包含一些记录,因此我不能真正只对记录使用SQL Insert Into 语句 在Sybase表 Customer 中已经存在,我可能需要使用SQL Update 语句。 excel文件中有一些可能的错误记录(Sybase表不会接受),我还需要使用 Try Catch 语句来捕获这些异常。

如何尝试将代码从Excel(xlsx)批量复制到Sybase Adaptive Server Enterprise的代码?

谢谢。

 private void importExcelStripMenuItem_Click(对象发送者,EventArgs e)
 {

     var filePath = string.Empty;
     OpenFileDialog OpenFile = new OpenFileDialog();

     OpenFile.Filter =" Excel文件| * .xl *"; //过滤excel文件
     OpenFile.Title ="选择您的文件";
     OpenFile.FilterIndex = 2;
     OpenFile.RestoreDirectory = true;

     如果(OpenFile.ShowDialog()== DialogResult.OK)
     {
        //获取指定文件的路径
         filePath = OpenFile.FileName;
     }



     Excel.Application xlApp =新的Excel.Application();
     Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(filePath);
     Excel._Worksheet xlWorksheet = xlWorkbook.Sheets [1]; //工作簿中只有一张纸





    //设置与EXCEL文件的连接。
     OdbcConnection myExcelConn =新的OdbcConnection(" Driver = {Microsoft Excel驱动程序(* .xls)}; DBQ =" + filePath +"; DriverID = 790");

     尝试
     {
         myExcelConn.Open();

        //从EXCEL表格获取数据。
        //从excel文件中选择所有字段,但最好不要使用SELECT * FROM ....,因为其他列中可能存在不等价的数据,所以我只复制了前6列,Sybase表Customer也只有这6个字段 。
         OdbcCommand ObjCmd = new OdbcCommand(" SELECT SocialSecurityNumber,FirstName,LastName,Gender,DOB,PhoneNumber FROM [" + xlWorksheet.Name +" $]",myExcelConn);

        //读取从EXCEL文件中提取的数据。
         OdbcDataReader objBulkReader = null;
         objBulkReader = ObjCmd.ExecuteReader();



        //关闭Excel文件
         xlWorkbook.Close(false);
         xlApp.Quit();


        //设置连接字符串。


         使用(OdbcConnection con = new OdbcConnection(" Sybase ASE Con​​nection String"))
         {
             con.Open();

            //最后,将数据加载到数据库表中。
            //我不知道如何编写这部分代码。
         }

         MessageBox.Show("成功加载。");

     }


     抓住(前例外)
     {

         MessageBox.Show(ex.Message);

     }

     最后
     {
            //清除。
            //清除批量复制期间发生的其他对象
             myExcelConn.Close();
             myExcelConn = null;
     }
 } 
付费偷看设置
发送
6条回答
土豆飞人
1楼-- · 2020-09-10 12:24

SAP/Sybase的bcp实用程序是导入/导出大量数据的出色工具。

我建议您使用逗号分隔的平面文件(excecl可以轻松编写这些文件)

在C#中,只需编写一个包装程序即可调用" bcp",并提供所有必要的参数。

可以从SAP帮助门户网站/文档中的实用程序指南中找到

bcp命令和参数,以获取所需的ASE版本。

实用指南

https://help.sap.com/viewer/da6c1d172bef4597a78dc5e81a9bb947/ 16.0.3.6/zh-CN

有关在操作系统级别执行的SAP ASE实用程序的信息

这样,您将以最少的编码获得更好的性能。

HTH

Avinash

Climb_Ma
2楼-- · 2020-09-10 12:33

您好,您使用了错误的标记( SAP Sybase Mainframe Connect )。
此标记适用于大型机访问产品。
我已要求主持人将标记更改为SAP Adaptive Server Enterprise标记,以便正确的专家查看您的问题。
谢谢

SC_Yao
3楼-- · 2020-09-10 12:35

您将需要一些努力。

我不是C#专家。 因此,我无法为您编写代码,但请您提供一些指示,您可以在其中尝试一些操作。

如果您已在PC/台式机上安装了SDK,则有使用ADO net连接到的好示例 SAP/Sybase服务器。

C#示例示例在以下文件夹中,假定您已在C:\

C:\ \ DataAccess \ ADONET \ Samples中安装了SDK \ CSharp \ Simple \(32位)

C:\ \ DataAccess64 \ ADONET \ Samples \ CSharp \ Simple \(64位)

这些都是很好的起点。

如果要使用ODBC路由,请手动为SAP/Sybase服务器创建DSN,然后在C#程序中提供ODBC连接字符串。 您可以在Internet上搜索SAP/Sybase的ODBC连接字符串。

HTH

Avinash

木偶小白
4楼-- · 2020-09-10 12:46

嗨,

如果某些语句将要进行更新,那么批量将无法正常工作。 如果使用散装并进行大批量生产,那么整个批量生产不仅会失败,而且还会失败。

我同意Avinash的bcp选项很快。 同样,如果有重复项,并且如果有唯一的标识列并且您输入了重复项,则整个批次都将失败。

SQLconnect命令也应可用于ASE调用odbc驱动程序。 这只是一个编程调用。 大多数.net运营商都在ASE上工作,您会错过我们驱动程序中的某些功能,而这大部分仅适用于 ado。 网络驱动程序。

感谢,
黎明

我是小鹏鹏啊
5楼-- · 2020-09-10 12:23

如果有关更新的详细信息仍未打开,则批量复制可以选择将异常记录到插入内容中。 对于中止批处理之前记录的故障,它也具有默认设置(以前是10)。 异常将需要编码的SQL更新,或者您可以删除/插入。

jovirus
6楼-- · 2020-09-10 12:20

我已经在原始帖子中编写了一些代码,不确定如何编写与数据库交互的代码(不在IT职业领域中) ),这就是为什么我在这里发布问题。

谢谢。

使用(OdbcConnection con =新的OdbcConnection(" Sybase ASE连接字符串"))
         {
             con.Open();

            //最后,将数据加载到数据库表中。
            //*****我不知道如何编写这部分代码。*****
         } 

一周热门 更多>