首页 文章

使用SSDT / SSIS的SAP HANA ODBC连接

提问于
浏览
0

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

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

第一个错误:使用.Net Provider for ODBC conncections
.NET ODBC

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

验证失败?这是授权问题吗?没有
User PW

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

我收到以下错误:

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

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

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

连接管理器也取得了相同的成功:
success 1

第三个错误:使用安装HANA客户端时提供的.NET HANA Provider
enter image description here

我甚至没有看到32位DSN的选项 . 仅显示64位DSN,当输入用户和通行证时,它会抛出异常 .

64位DSN:
enter image description here

32位DSN:
enter image description here

可以连接和查询来自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();                                       
                }
            }
        }
    }
}

Console

堆栈问题:Hana and SSIS有答案,但答案中的链接已经死了 .

任何有关这个问题的帮助将不胜感激!!

1 回答

  • 1

    造成这种情况的根本原因是HANA ODBC的32位驱动程序上的注册表项不正确 . 正确的条目应如下所示:

    64位:计算机\ HKEY_LOCAL_MACHINE \ SOFTWARE \ ODBC \ ODBCINST.INI \ HDBODBC
    64bit Driver

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

    32bit Driver

相关问题