2016-12-15 2 views
0

Я пытаюсь получить доступ к серверу Netezza из C# .net 4.5 VS2013 на победу 7.не может получить доступ к серверу IBM Netezza из C# VS2013, но работал хорошо в IBM Aginity верстаке

using System.Data.Odbc; 
    string connstring = "Driver={NetezzaSQL};Server=MyServerIP;Database=MyDBName;Uid=MyID;Pwd=myPWD;ReadOnly=true;"; 
    using (OdbcConnection conn = new OdbcConnection(connstring)) 
    { 
      conn.ConnectionTimeout = 120; 
      conn.Open(); // error 08001 
      Console.WriteLine("OK"); 
    } 

    An unhandled exception of type 'System.Data.Odbc.OdbcException' occurred in System.Data.dll 

    Additional information: ERROR [08001] Client unable to establish connection 

От https://msdn.microsoft.com/en-us/library/ms715433%28v=vs.85%29.aspx, я вижу эту ошибку 08001 является

The driver was unable to establish a connection with the data source. 

С панели управления -> адм инструменты -> Источники данных (ODBC), я проверил, что я установил NetezzaSQL 7.01.00.3553

это должен быть 64 бита, потому что нет драйвера NetezzaSQL в источниках данных (ODBC - 32 бит).

Мой код C# построен для любого процессора. Хотя я изменил сборку на 64 бита, я получил ту же ошибку. Кажется, что код C# не может найти драйвер?

Я могу получить доступ к тому же серверу и БД из верстака IBM Netezza Aginity с тем же идентификатором и паролем без каких-либо проблем.

Любые идеи?

UPDATE

я могу получить доступ к одному серверу и базе данных с таким же Uid и PWD от сервера исследователя в VS2013. Но почему я не могу получить к нему доступ из кода C#? В проводнике сервера я щелкнул правой кнопкой мыши подключенный сервер и в окне «Изменить соединение» я скопировал «использовать строку подключения» в свой код на C#. Но это не сработает!

NEW UPDATE Кроме того, я использовал ту же строку, вызвав пакет «pypyodbc» в Python 3.4.1 (32 и 64 бит) на той же машине, он работал хорошо.

Это означает, что в библиотеке nsqlodbc.dll 32 и 64 бит нет проблем.

Я думаю, проблема в C# или VS2013.

Кроме того, в VS2013-сервере Explorer может принимать только 32 бит nsqlodbc.dll и устанавливать соединение. Например, если я установил только 64 бит nsqlodbc.dll, серверный проводник также не сможет подключить сервер Netezza.

+0

Хотя копирование строки соединения обязательно должна работать, возможно, попробовать класс 'OdbcConnectionStringBuilder' и добавить ключи, что путь? –

+0

Кроме того, большинство примеров строк подключения, которые я видел, используют 'servername', а не' server'. Я знаю, что вы скопировали строку, но стоит дважды проверить, что это имя используемого свойства. –

+0

@JeremyFortune, я пробовал OdbcConnectionStringBuilder, я получил ту же ошибку. Также см. Новое обновление. – Lily

ответ

0

Попробуйте строки соединения:

Driver=NetezzaSQL; Server=MyServerIP; Port=5480; Database=MyDBName; Persist Security Info=true; UID=MyID; PWD=myPWD 
+0

Нет, это не сработает. Я установил 32-разрядный и 64-разрядный драйвер ODBC и проверил reg kys и папку C: \ Windows \ SysWOW64 для «odbc32.dll» и панель управления -> инструменты adm -> драйвер ODBC для 64 бит. Они выглядят нормально. Я также проверил строку подключения в OP из диалогового окна «ODBC Data Spurce Adm» в окне UserDNS и System DNS, попытки подключения успешны! почему я не могу получить к нему доступ с C#? – Lily

Смежные вопросы