使用 SSDT/SSIS 的 SAP HANA ODBC 连接

SAP HANA ODBC Connections using SSDT/SSIS

我们正在将我们的 SAP BW 实例从 MSSQL 迁移到 HANA DB,并且需要在系统外使用 SSIS。使用 SSDT(VS2010),我在尝试从 HANA 读取数据时遇到各种错误。我安装了驱动程序,可以在我编写的小型 C# 应用程序中连接和查询数据(post 下面的代码)。

类似堆栈问题here:我的设置是:

第一个错误: 使用 .Net Provider 进行 ODBC 连接

我收到以下错误: [SSIS.Pipeline] 错误:ADO NET 源验证失败并返回错误代码 0xC0208449。 [SSIS.Pipeline]错误:ADO NET 源验证失败并返回错误代码 0xC0208449。

验证失败?这是授权问题吗?不

第二个错误:使用直接 ODBC 连接

我收到以下错误:

[ODBC 源 4] 错误:对连接管理器 HANA_ODBC 的 AcquireConnection 方法调用失败,错误代码为 0xC0014009。在此之前可能有错误消息 posted,其中包含有关 AcquireConnection 方法调用失败原因的更多信息。

[SSIS.Pipeline] 错误:ODBC 源验证失败并返回错误代码 0x80004005。

[连接管理器“HANA_ODBC”]错误:尝试与数据库服务器建立开放式数据库连接 (ODBC) 连接时出错。

连接管理器同样成功:

第三个错误:使用安装 HANA 客户端时提供的 .NET HANA 提供程序

我什至没有看到 32 位 DSN 的选项。仅显示 64 位 DSN,当输入用户名和密码时会抛出异常。

64 位 DSN:

32 位 DSN:

可以从 HANA 连接和查询数据的 C#:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.Odbc;
using System.Data;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            using (OdbcConnection myConnection = new OdbcConnection())
            {
                string myConnectionString;                
                myConnectionString = "DSN=HANA32;SERVERNODE=MyHana:30015;UID=SYSTEM;PWD=MyPW;DATABASENAME=DB";
                myConnection.ConnectionString = myConnectionString;
                
                try
                {
                    myConnection.Open();
                }
                catch (System.Data.Odbc.OdbcException ex)
                {
                    Console.Error.WriteLine(ex);               
                }
                if (myConnection.State == ConnectionState.Open)
                {
                    Console.Write("Connection Open");
                    Console.WriteLine();
                    OdbcCommand DbCommand = myConnection.CreateCommand();
                    DbCommand.CommandText = "SELECT \"BATCH\" FROM \"_SYS_BIC\".\"ZBW/ZBATCH_ATTRS\" LIMIT 10";
                    OdbcDataReader DbReader = DbCommand.ExecuteReader();
                    while (DbReader.Read())
                    {
                        Console.WriteLine(DbReader["BATCH"].ToString());

                    }        
                    DbReader.Close();
                    DbCommand.Dispose();
                    myConnection.Close();
                    Console.ReadLine();                    
                }
                else
                {
                    Console.Write("Failure");
                    Console.ReadLine();                                       
                }
            }
        }
    }
}

此处堆放问题:Hana and SSIS 有答案,但答案中的 link 已死。

非常感谢对此问题的任何帮助!!

根本原因是 HANA ODBC 的 32 位驱动程序上的错误注册表项。正确的条目应如下所示:

64 位: Computer\HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\HDBODBC

32 位: Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBCINST.INI\SAP 用于 MS 的 HANA Excel