2016-01-14 3 views
0

Я настраиваю приложение базы данных для агностики базы данных, а при тестировании с postgresql получаю стандартную ошибку dsn:Ошибка драйвера Postgresql odbc C# [IM002] [Microsoft] [ODBC Driver Manager] Имя источника данных не найдено

[IM002] [Microsoft][ODBC Driver Manager] Data source name not found

Я обычно использую сервер SQL и MySQL, так что я новичок в Postgres, я попробовал стандартный рекомендуемый строку соединения:

"Driver = {PostgreSQL}; Server = localhost; Database = postgres; Port = 5432; Uid = postgres; Pwd = XXXXXX;" 

Я также попробовал имя драйвера ODBC, который я установил после установки postrgesql :

"Driver = {PostgreSQL ODBC Driver(UNICODE)}; Server = localhost; Database = postgres; Port = 5432; Uid = postgres; Pwd = XXXXXX;" 

Настройка DSN в менеджере odbc также отлично работает с использованием драйвера unicode, поэтому я не могу понять, почему я не могу подключиться в своем приложении, есть ли ошибка в имени драйвера, которое я использую в строке подключения?

ответ

0

Ваше сообщение об ошибке выглядит очень странно. Он рассказывает о том, что DSN не найден. Вы уверены, что используете строку подключения с Driver=...?

Вы можете использовать строку подключения ODBC в нескольких формах. Сначала вы создали DSN, так что вы можете использовать его:

DSN=mn_test; Uid=postgres; Pwd=postgres; 

Затем вы можете использовать другую форму строки подключения:

Driver={PostgreSQL UNICODE};Server=127.0.0.1; Port=5493; Database=mn_test; Uid=postgres; Pwd=postgres; 

Оба работают на моем старом 32 разрядной среде Windows. Я проверить их с простым сценарием Python (я использую ActiveState Python, в котором есть простой odbc модуль):

import odbc 

def test_odbc(connect_string): 
    print(connect_string) 
    db = odbc.odbc(connect_string) 
    c = db.cursor() 
    rs = c.execute("SELECT version()") 
    for txt in c.fetchall(): 
     print('%s' % (txt[0])) 
    print('-----') 

test_odbc('Driver={PostgreSQL UNICODE};Server=127.0.0.1; Port=5493; Database=mn_test; Uid=postgres; Pwd=postgres;') 
test_odbc('DSN=mn_test; Uid=postgres; Pwd=postgres;') 
+0

Теперь он работает после перезагрузки, и я скопировал письмо с именем драйвера для письма из реестра, я использовал суффикс (x64), как это было предложено на некоторых других сайтах для имени драйвера, но на самом деле это не требуется на стандартный драйвер odbc, который поставляется с пакетом postgresql, и, вероятно, это вызвало мою проблему, также ссылаясь только на драйвер, поскольку {PostgreSQL} также не работает со стандартным драйвером ODBC. – sjwbond

0

При создании источника данных, вы создали его с правильным инструментом odbcad? С 64-битной версией, найденной в C:\Windows\System32, если ваше приложение имеет 64-битную версию и с 32-разрядной версией, найденной в C:\Windows\SysWOW64, если ваше приложение 32-битное?

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