LINUX.ORG.RU

установка и настройка Microsoft Linux ODBC Driver


0

1

Привет всем. Пишу программу под Unix систему. Возникла необходимость подключаться к MS SQL Server. Узнав про драйвер для Linux перешёл на RedHat 6.1. Там теперь есть уже две версии драйвера старая и новая. Я уже долго с ними мучаюсь. Установка проходит успешно. Но в программе ничего не получается. В итоге я его сейчас тестирую утилитой sqlcmd. Пока я не отрубил брендмауэр на Windows было так:

[root@localhost ~]# sqlcmd -S 192.168.0.3 -U sa -P 2ef5Fese

SqlState HYT00, Login timeout expired

A network-related or instance-specific error has occurred

while establishing a connection to SQL Server. Server is not

found or not accessible. Check if instance name is correct and

if SQL Server is configured to allow remote connections. For

more information see SQL Server Books Online.

TCP Provider: Error code 0x6E

Кстати связь есть если что:

[root@localhost ~]# ping 192.168.0.3

PING 192.168.0.3 (192.168.0.3) 56(84) bytes of data.

64 bytes from 192.168.0.3: icmp_seq=1 ttl=128 time=0.886 ms

64 bytes from 192.168.0.3: icmp_seq=2 ttl=128 time=0.336 ms

64 bytes from 192.168.0.3: icmp_seq=3 ttl=128 time=0.301 ms ^C --- 192.168.0.3 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2761ms rtt min/avg/max/mdev = 0.301/0.507/0.886/0.269 ms

Потом когда вырубил брендмауэр на windows:

[root@localhost ~]# sqlcmd -S 192.168.0.3 -U sa -P 2ef5Fese -d first

SqlState HYT00, Login timeout expired

A network-related or instance-specific error has occurred while

establishing a connection to SQL Server. Server is not found or

not accessible. Check if instance name is correct and if SQL

Server is configured to allow remote connections. For more

information see SQL Server Books Online.

TCP Provider: Error code 0x6F

Это последние результаты которых удалось достичь. До этого было много всего. Я отписывался на http://social.msdn.microsoft.com/Forums/sqlserver/en-US/0f80db87-0f6e-46c3-ac... но там что-то всё стало глухо. Есть какие-нибудь мысли???



Последнее исправление: VasiaV (всего исправлений: 6)

Узнав про драйвер для Linux перешёл на RedHat 6.1.

Давай определимся, или ты пишешь из прошлого про Red Had 6.1 или ты имеешь ввиду RHEL 6.1.

P.S. прошу прощения что так ужасно отредактировано, но здесь почему то не распознается перевод строки ENTER ENTER ENTER

www.linux.org.ru/wiki/en/Lorcode

UVV ★★★★★
()

Сервер сам только что поставил? По-умолчанию tcp отключен. Настраивай.

anonymous
()
Ответ на: комментарий от UVV

Опс..а это разные вещи...незнал..у меня Red Hat Enterprise Linux Server Release 6.1 (Santiago) Kernel Linux 2.6.32-131.0.15.el6.x86_64

На виртуалке VMware Player

VasiaV
() автор топика
Ответ на: комментарий от anonymous

да в одной... у RHEL 192.168.0.10 у винды 192.168.0.3

VasiaV
() автор топика

с пом. nmap проверь доступность tcp-порта с клиентского линукса.
nmap -sT -p 1433 192.168.0.3
если нет, проверь открытость tcp-порта на стороне sql-сервера:
netstat -an
http://support.microsoft.com/kb/823938/ru

bl ★★★
()

установка и настройка Microsoft Linux

Подавился бутербродом. Нельзя так людей пугать...

hobbit ★★★★★
()
Ответ на: комментарий от VasiaV

Из sqlcmd все проходит на ура) теперь осталось в проге. тут ошибка другого плана. вот кусок кода:

retcode = SQLDriverConnect(hdbc,NULL,string,sizeof(string),buf,sizeof(buf),&StringLength2,SQL_DRIVER_NOPROMPT);

if(retcode ==-1)

{

retcode= SQLGetDiagRec(SQL_HANDLE_DBC,hdbc,1,SQLState,&NativeErrorPtr,MessageText,BufferLength,&TextLengthPtr);

printf(«%s\n»,MessageText);

В SQLDriverConnect в string я передаю: string = «Driver={SQL Server Native Client 11.0};Server=ARTPK2\\SQLEXPRESS2;Database=Kurs;Uid=sa;Pwd=2ef5Fese;»

получаю стабильно retcode ==1 и MessageText="[unixODBC][Driver Manager]Data source name not found, and no default driver specified"

Это вообще первая ошибка с которой я столкнулся. Почему она говорит про DNS, а не юзает мой Driver?

VasiaV
() автор топика
Ответ на: комментарий от hobbit

Ничего себе! Он оказывается различает регистр! Теперь он нашёл слово DRIVER. 57 retcode = SQLDriverConnect(hdbc,NULL,string,sizeof(string),buf,sizeof(buf),&StringLength2,SQL_DRIVER_NOPROMPT); (gdb) print string $1 = 0x7fb4b3e95cb0 "DRIVER={SQL Server Native Client 11.0};SERVER=ARTPK2\\SQLEXPRESS2;DATABASE=Kurs;UID=sa;PWD=2ef5Fese;" (gdb) next Missing separate debuginfo for /opt/microsoft/sqlncli/lib64/libsqlncli-11.0.so.1790.0 Try: yum --disablerepo='*' --enablerepo='*-debuginfo' install /usr/lib/debug/.build-id/73/0128bbf278ee580bef68e8a454c519bdede9a1.debug 58 if(retcode ==-1) Missing separate debuginfos, use: debuginfo-install keyutils-libs-1.4-1.el6.x86_64 krb5-libs-1.9-9.el6.x86_64 libcom_err-1.41.12-7.el6.x86_64 libgcc-4.4.5-6.el6.x86_64 libselinux-2.0.94-5.el6.x86_64 libstdc++-4.4.5-6.el6.x86_64 libuuid-2.17.2-12.el6.x86_64 openssl-1.0.0-10.el6.x86_64 zlib-1.2.3-25.el6.x86_64 (gdb) print retcode $2 = -1 (gdb) next 60 retcode= SQLGetDiagRec(SQL_HANDLE_DBC,hdbc,1,SQLState,&NativeErrorPtr,MessageText,BufferLength,&TextLengthPtr); (gdb) next 61 printf("%s\n",MessageText); (gdb) print MessageText $3 = "[unixODBC][Microsoft][SQL Server Native Client 11.0]Neither DSN nor SERVER keyword supplied\000\000\000\000\000\000\000\000" Но почему он не нашёл SERVER? И что он мне ещё такое выдал...хм.

VasiaV
() автор топика
Ответ на: комментарий от VasiaV

прозреваю, что он хочет, чтобы ты создал запись о соответствующем DSN.

Я делал так, но у меня драйвер freetds, а не нативклиент. Нативклиент завести я не осилил.

Ivan_qrt ★★★★★
()
Ответ на: комментарий от Ivan_qrt

так зачем он ему (DSN). Он же DRIVER нашёл. А главное почему не нашёл SERVER. Ведь «Neither DSN nor SERVER keyword supplied» дословно значит «Ни DSN ни SERVER ключевое слово не поставлено»

VasiaV
() автор топика
Ответ на: комментарий от VasiaV

Хотя в описании функции есть грамматически разбор строки. В нем SERVER не фигурирует вообще. Значит SERVER не поддерживается. Все равно тогда он странное пишет. Если только supplied не перевести как поддерживается что более вероятно даже. Но что тогда. DSN не поддерживается? Но вообще он поддерживается. Не поддерживается когда написано DRIVER? Тогда как вообще делать если применять DRIVER. Как мне сервер указать? Или чисто через DSN делать. А нафига тогда DRIVER поддерживали? бррр..

VasiaV
() автор топика
Ответ на: комментарий от hobbit

Ога. глаз режет, жопу рвёт. Сам от названия топика подавился.

Alexonline ★★★★
()
Ответ на: комментарий от VasiaV

ЯННП. Много букаф. Если я правильно понял смысл вывода gdb, ты подключаешься через odbc. odbc оперирует DSN'ами. Указав название зарегистрированного DSN'а ты можешь подключится к базе. В описании DSN'a указан драйвер(в моём случае freetds, в твоём случае nativeclient). У тебя нет зареганых DSN'ов, на что он и ругается.

Ну это если я хоть что-то понял. Короче кури odbc.

Ivan_qrt ★★★★★
()
Ответ на: комментарий от hobbit

Я тож думал прикол какой-то, потом допер что такое в принципе может существовать...

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от Ivan_qrt

Блин..DNS создать не могу. хотел с помощью функций. Хотел с помощью SQLConfigDataSource или ConfigDSN, но линковщик их не находит. И вообще по-моему они нужны, чтобы конфигурировать реестр а тут реестра нет. Может урезанная библиотека. Ещё думал в odbcinst.ini или odbc.ini вписать. Но там походу только Driver вписывается. Хотя я как то видел что просто так можно вписать. Я вообще не очень в этом разбираюсь. Вписал в odbc.ini:

[MSSQL_Server]

Driver = SQL Server Native Client 11.0

ServerName = ARTPK2

Port = 1433

Database = Kurs

connection string была «DSN=MSSQL_Server;UID=sa;PWD=2ef5Fese;»

Он мне сказал:

"[unixODBC][Driver Manager]Data source name not found, and no default driver specified"

VasiaV
() автор топика
Ответ на: комментарий от VasiaV

У меня: /etc/odbcinst.ini

[FreeTDS]
Description=v0.63 with protocol v8.0
Driver=/usr/lib64/libtdsodbc.so.0
Setup=/usr/lib64/libtdsS.so.2
UsageCount=2
Threading=2

Тебе надо заменить название и либы на аналоги для nativeclient'а.

~/.odbc.ini

[fileinteg]
Driver=FreeTDS
Description=integration server.
Trace=No
Server=integsrv.domain.local\INTEG
TDS_Version=8

В /etc/odbcinst.ini - описание драйвера. В ~/.odbc.ini - DSN. В таком режиме у меня (почти) всё ок. Для проверки я пользовал isql. Подключался с помощью qsqldatabase, драйвер qodbc3.

Ivan_qrt ★★★★★
()
Ответ на: комментарий от Ivan_qrt

Что то не выходит...Делал так:

В /etc/odbcinst.ini:

[SQL Server Native Client 11.0]
Description=Microsoft SQL Server ODBC Driver V1.0 for Linux
Driver=/opt/microsoft/sqlncli/lib64/libsqlncli-11.0.so.1790.0
Threading=2
UsageCount=2

В ~/.odbc.ini (именно с точкой, нашёл его):

[MSSQLServer]
Driver=SQL Server Native Client 11.0
Description=my sql server
Trace=No
Server=ARTPK2\SQLEXPRESS2

И все равно!:

(gdb) next
63						retcode = SQLDriverConnect(hdbc,NULL,string,sizeof(string),buf,sizeof(buf),&StringLength2,SQL_DRIVER_NOPROMPT);
(gdb) next
64						if(retcode ==-1)
(gdb) next
66						retcode= SQLGetDiagRec(SQL_HANDLE_DBC,hdbc,1,SQLState,&NativeErrorPtr,MessageText,BufferLength,&TextLengthPtr);
(gdb) next
67						printf(«%s\n»,MessageText);
(gdb) print MessageText
$1 = "[unixODBC][Driver Manager]Data source name not found, and no default driver specified", '\000' <repeats 14 times>
(gdb) print string
$2 = 0x7f7f29eeacb0 «DSN=MSSQLServer;UID=sa;PWD=2ef5Fese;»

Почему именно Data source name not found, and no default driver specified???

VasiaV
() автор топика
Ответ на: комментарий от VasiaV

Я послал последнее сообщение разработчику драйвера (насколько я понял).Естественно на английском. Он ответил: I cant say, on the face of it it looks fine.

try

isql -v MSSQLServer

Also try

ldd /opt/microsoft/sqlncli/lib64/libsqlncli-11.0.so.1790.0

If the drive rlib can;t be loaded that will give the same error.

-- Nick

VasiaV
() автор топика
Ответ на: комментарий от VasiaV

Ну вроде как все библиотеки загружены.

[root@localhost Lab5UNIXadvanceg]# ldd /opt/microsoft/sqlncli/lib64/libsqlncli-11.0.so.1790.0
	linux-vdso.so.1 =>  (0x00007fff6d5ff000)
	libcrypto.so.10 => /usr/lib64/libcrypto.so.10 (0x00007fafff253000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007fafff04f000)
	librt.so.1 => /lib64/librt.so.1 (0x00007faffee46000)
	libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007faffebeb000)
	libuuid.so.1 => /lib64/libuuid.so.1 (0x00007faffe9e7000)
	libodbcinst.so.1 => /usr/lib64/libodbcinst.so.1 (0x00007faffe7cf000)
	libkrb5.so.3 => /lib64/libkrb5.so.3 (0x00007faffe4f0000)
	libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x00007faffe2af000)
	libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007faffdfa8000)
	libm.so.6 => /lib64/libm.so.6 (0x00007faffdd24000)
	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007faffdb0e000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007faffd8f0000)
	libc.so.6 => /lib64/libc.so.6 (0x00007faffd55f000)
	libz.so.1 => /lib64/libz.so.1 (0x00007faffd34a000)
	/lib64/ld-linux-x86-64.so.2 (0x0000003952e00000)
	libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007faffd146000)
	libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x00007faffcf1a000)
	libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x00007faffcd10000)
	libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007faffcb0d000)
	libresolv.so.2 => /lib64/libresolv.so.2 (0x00007faffc8f3000)
	libselinux.so.1 => /lib64/libselinux.so.1 (0x00007faffc6d3000)

Однако:

[root@localhost Lab5UNIXadvanceg]# isql -v MSSQLServer
[S1T00][unixODBC][Microsoft][SQL Server Native Client 11.0]Login timeout expired
[08001][unixODBC][Microsoft][SQL Server Native Client 11.0]A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online.
[08001][unixODBC][Microsoft][SQL Server Native Client 11.0]TCP Provider: Error code 0x6E

У меня такое было когда я в sqlcmd писал неправильно параметры. При этом в DSN я перепробывал кучу всего но ошибка, то 0x6E то 0x6F (значит хоть файл читается). Дошёл вот до чего(походу неверно):

[MSSQLServer]
Driver = SQL Server Native Client 11.0
Description = my sql server
Trace = No
host = 192.168.0.4
Port = 49452
Database = Kurs

Как мне правильно описать свой DSN используя ip-адрес и порт?

И ещё..влияют ли пробелы до/после равенства?

Жив ещё кто-нибудь??)

VasiaV
() автор топика
Ответ на: комментарий от anonymous

Как только я делаю так:

# isql -v MSSQLServer,49452

Т.е. пишу запятую и порт, он не задумываясь даёт:Data source name not found, and no default driver specified

В других случаях он пытается коннектится.

VasiaV
() автор топика
Ответ на: комментарий от VasiaV

а sqlcmd вообще с открытым исходным кодом? она ж у меня как то коннектится используя этот драйвер, если я правильно понимаю. Было бы интересно глянуть как...

VasiaV
() автор топика
Ответ на: комментарий от VasiaV

А если нет то как мне его реверснуть???

(gdb) file sqlcmd
Load new symbol table from «/usr/bin/sqlcmd»? (y or n) y
Reading symbols from /usr/bin/sqlcmd...Missing separate debuginfo for /usr/bin/sqlcmd
Try: yum --disablerepo='*' --enablerepo='*-debuginfo' install /usr/lib/debug/.build-id/9d/31c0d443f9e6091a7c29b158ff9be6e7679eab.debug
(no debugging symbols found)...done.
(gdb) start -S 192.168.0.4,49452 -U sa -P 2ef5Fese -d first
Function «main» not defined.
Make breakpoint pending on future shared library load? (y or [n]) n

Starting program: /usr/bin/sqlcmd -S 192.168.0.4,49452 -U sa -P 2ef5Fese -d first
[Thread debugging using libthread_db enabled]
[New Thread 0x7ffff1ab7700 (LWP 18049)]
Missing separate debuginfo for /opt/microsoft/sqlncli/lib64/libsqlncli-11.0.so.1790.0
Try: yum --disablerepo='*' --enablerepo='*-debuginfo' install /usr/lib/debug/.build-id/73/0128bbf278ee580bef68e8a454c519bdede9a1.debug
[Thread 0x7ffff1ab7700 (LWP 18049) exited]
[New Thread 0x7ffff0b25700 (LWP 18050)]
[Thread 0x7ffff0b25700 (LWP 18050) exited]
[New Thread 0x7ffff1ab7700 (LWP 18051)]
[Thread 0x7ffff1ab7700 (LWP 18051) exited]
1> quit

Program exited normally.
Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.25.el6.x86_64 keyutils-libs-1.4-1.el6.x86_64 krb5-libs-1.9-9.el6.x86_64 libcom_err-1.41.12-7.el6.x86_64 libgcc-4.4.5-6.el6.x86_64 libselinux-2.0.94-5.el6.x86_64 libstdc++-4.4.5-6.el6.x86_64 libuuid-2.17.2-12.el6.x86_64 openssl-1.0.0-10.el6.x86_64 zlib-1.2.3-25.el6.x86_64
(gdb) 

Make breakpoint pending on future shared library load? (y or [n]) хоть y хоть n всё равно одно и то же?? Что это вообще такое? Поставить точку останова когда будет явная загрузка библиотеки?

VasiaV
() автор топика

перешёл на RedHat 6.1

Есть какие-нибудь мысли???

в техподдержку

darkenshvein ★★★★★
()
Ответ на: комментарий от VasiaV

У тебя вообще что за база?

Если база на инстансах, то нужно прописывать именно через '\'.

Если база с одним инстансом, то через server и port.

Под каким пользователем ты подключаешься, есть ли у него пароль? Если есть, то подключаться так

isql -v MSSQLServer username pass

Если не знаешь, то бери какой-нибудь heldisql виндовый, подбирай правильные рабочие настройки на нём, переноси их в odbc.ini и пробуй isql.

Ну и telnet servername 49452 соединения принимает? Там не в сетке косяк?

Ivan_qrt ★★★★★
()
Ответ на: комментарий от VasiaV

Ещё как вариант, попробуй подключиться freetds'ом, он кривой, но подключается, вроде, нормально.

Ivan_qrt ★★★★★
()
Ответ на: комментарий от Ivan_qrt

Ну так ведь все ок, коннектится: sqlcmd -S 192.168.0.4,49452 -U sa -P 2ef5Fese -d first

Мне просто DSN надо правильно в .ini файлах описать с такими же параметрами. Можешь написать как правильно это сделать?

VasiaV
() автор топика
Ответ на: комментарий от anonymous

А вот я её пытался ltrace посмотреть:

ltrace sqlcmd -S 192.168.0.4,49452 -U sa -P 2ef5Fese -d first

strace не вариант, т.е. не видно вызовов в библиотеки, только системные..

ну увидел кое-что:

_ZdlPv(0x2462a40, 0x7fff25277a2f, 0x2462a58, 0, 116)                      = 0
_Znwm(30, 0, 62, 0x395398ce90, 116)                                       = 0x2462a40
memcpy(0x2462a58, «G», 4)                                                 = 0x2462a58
_ZdlPv(0x241f330, 0x2414acc, 0, 0x4f0047, 1)                              = 0
pthread_mutex_lock(0x241f380, 0xffffffff, 0, 0, 0x24149f8)                = 0
pthread_self(1, 0, 0, 0, 0x241f380)                                       = 0x7f0a95ba5820
pthread_mutex_unlock(0x241f380, 0, 0, 0, 0x241f380)                       = 0
SQLAllocHandle(1, 0, 0x7fff252779b8, 0, 0x241f380)                        = 0
SQLSetEnvAttr(0x2462d10, 200, 3, 0, 0x7f0a95c0a25d)                       = 0
SQLAllocHandle(2, 0x2462d10, 0x7fff252779b0, 0, 0x7f0a95e19a60)           = 0
_Znwm(38, 0, 70, 1, 0x454c3631465455)                                     = 0x2462b30
memcpy(0x2462b48, «D», 12)                                                = 0x2462b48
_Znwm(50, 6, 82, 1, 0)                                                    = 0x2462b60

А потом он затормозил и обрубился:

SQLSetConnectAttrA(0x2463300, 103, 8, 4, 0x3b007d006e0069)                = 0
SQLSetConnectAttrW(0x2463300, 112, 4096, 4, 0)                            = 0
_ZnwmRKSt9nothrow_t(120, 0x395fac8552, 0x7f0a95e19a60, 0, 0)              = 0x24647f0
pthread_mutexattr_init(0x7fff252779c0, 0x24647f0, 0x2462d10, 0, 1)        = 0
pthread_mutexattr_settype(0x7fff252779c0, 1, 0x2462d10, 0, 1)             = 0
pthread_mutex_init(0x2464808, 0x7fff252779c0, 0x2462d10, 0, 1)            = 0
_Znwm(16, 0x24647f0, 16, 0, 1)                                            = 0x2462bf0
pthread_create(0x7fff252778f0, 0, 0x445a30, 0x2462bf0, 0 <unfinished ...>
+++ killed by SIGTRAP +++

т.е. он создал новый поток а этот закончился что то в этом духе помоему..

VasiaV
() автор топика
Ответ на: комментарий от VasiaV
[MSSQLServer]
Driver = SQL Server Native Client 11.0
Description = my sql server
Trace = No
Server = 192.168.0.4
Port = 49452
Database = first
isql -v MSSQLServer sa 2ef5Fese

Пробуй так.

Ivan_qrt ★★★★★
()
Ответ на: комментарий от Ivan_qrt
Неа...все равно...не может SQLConnect) 
[root@localhost app]# isql -v MSSQLServer sa 2ef5Fese
[S1T00][unixODBC][Microsoft][SQL Server Native Client 11.0]Login timeout expired
[08001][unixODBC][Microsoft][SQL Server Native Client 11.0]A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online.
[08001][unixODBC][Microsoft][SQL Server Native Client 11.0]TCP Provider: Error code 0x6F
[ISQL]ERROR: Could not SQLConnect



Но DSN он чувствует: 
[ISQL]ERROR: Could not SQLConnect
[root@localhost app]# isql -v mssqlserver1  sa 2ef5Fese
[IM002][unixODBC][Driver Manager]Data source name not found, and no default driver specified


VasiaV
() автор топика
Ответ на: комментарий от VasiaV

Заюзал в своей проге SQLConnect с соответствующим DSN..ошибка: Login timeout expired..поставил побольше SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER)25, 0) все рано то же..

65						retcode = SQLDrivers(henv,SQL_FETCH_FIRST,DriverDescription,sizeof(DriverDescription),&DescriptionLengthPtr,DriverAttributes,sizeof(DriverAttributes),&AttributesLengthPtr);
(gdb) next
72						retcode = SQLConnect(
(gdb) next
Missing separate debuginfo for /opt/microsoft/sqlncli/lib64/libsqlncli-11.0.so.1790.0
Try: yum --disablerepo='*' --enablerepo='*-debuginfo' install /usr/lib/debug/.build-id/73/0128bbf278ee580bef68e8a454c519bdede9a1.debug
81						if(retcode ==-1)
Missing separate debuginfos, use: debuginfo-install keyutils-libs-1.4-1.el6.x86_64 krb5-libs-1.9-9.el6.x86_64 libcom_err-1.41.12-7.el6.x86_64 libgcc-4.4.5-6.el6.x86_64 libselinux-2.0.94-5.el6.x86_64 libstdc++-4.4.5-6.el6.x86_64 libuuid-2.17.2-12.el6.x86_64 openssl-1.0.0-10.el6.x86_64 zlib-1.2.3-25.el6.x86_64
(gdb) next
83						retcode= SQLGetDiagRec(SQL_HANDLE_DBC,hdbc,1,SQLState,&NativeErrorPtr,MessageText,BufferLength,&TextLengthPtr);
(gdb) next
84						printf(«%s\n»,MessageText);
(gdb) print MessageText
$1 = "[unixODBC][Microsoft][SQL Server Native Client 11.0]Login timeout expired", '\000' <repeats 26 times>

VasiaV
() автор топика
Ответ на: комментарий от VasiaV

Ну тогда хрен его знает. Попробуй подключаться через инстансы (server = ip\instancename ). Если совсем ничего не прокатит, попробуй через freetds подключиться, может оно что-то прояснит.

Тег для выделения code.

Ivan_qrt ★★★★★
()
Ответ на: комментарий от Ivan_qrt

Ну я в реестре HKEY_CURRENT_USER\Software\Microsoft\Microsoft SQL Server\UserInstances нашёл InstanceName LOCALDB#FAA59899

Прямо так писать 192.168.0.4\LOCALDB#FAA59899 ?

Так нифига..пишет

[root@localhost app]# isql -v MSSQLServer sa 2ef5Fese
[S1T00][unixODBC][Microsoft][SQL Server Native Client 11.0]Login timeout expired
[08001][unixODBC][Microsoft][SQL Server Native Client 11.0]A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online.
[08001][unixODBC][Microsoft][SQL Server Native Client 11.0]SQL Server Network Interfaces: Error Locating Server/Instance Specified [xFFFFFFFF]. 
[ISQL]ERROR: Could not SQLConnect

И вообще мне кажется что дело в Unicode. Потому что я посмотрел в hex редакторе на sqlcmd в которой у меня все получается, и там где таблица импорта и имена функций походу все оканчиваются на W. SQLBrowseConnectW; SQLDriverConnectW юзаются

А в isql SQLConnect и т.п.

Я сделал так корявенько, низнаю может вообще бред, уже мозг плывёт:

					SQLCHAR ServerName[30]={'M','\0','S','\0','S','\0','Q','\0','L','\0','S','\0','e','\0','r','\0','v','\0','e','\0','r','\0','\0','\0'};
					SQLSMALLINT NameLength1=sizeof(ServerName);
					SQLCHAR UserName[30]={'s','\0','a','\0','\0','\0'};
					SQLSMALLINT NameLength2=sizeof(UserName);
					SQLCHAR Authentication[30]={'2','\0','e','\0','f','\0','5','\0','F','\0','e','\0','s','\0','e','\0','\0','\0'};
					SQLSMALLINT NameLength3=sizeof(Authentication);

					
					retcode = SQLDrivers(henv,SQL_FETCH_FIRST,DriverDescription,sizeof(DriverDescription),&DescriptionLengthPtr,DriverAttributes,sizeof(DriverAttributes),&AttributesLengthPtr);
					
					//char lpszAttributes[512] = "DRIVER={SQL Server Native Client 11.0}\0SERVER=ARTPK2\\SQLEXPRESS2\0DATABASE=Kurs\0";

					//retcode = ConfigDSN(NULL,ODBC_ADD_DSN,"MSSQL_Server",lpszAttributes);

					//retcode = SQLDriverConnect(hdbc,NULL,string,sizeof(string),buf,sizeof(buf),&StringLength2,SQL_DRIVER_NOPROMPT);
					retcode = SQLConnectW(
     						hdbc,
    						ServerName,
    						NameLength1,
    						UserName,
    						NameLength2,
     						Authentication,
     						NameLength3);
Но опять ошибка таймаута...как по нормальному написать, чтобы передать юникодные символы в функцию SQLConnectW?

VasiaV
() автор топика
19 октября 2014 г.
Ответ на: комментарий от Ivan_qrt

ура я вернулся) А если пользоваться Free TDS мне по сути ничего менять не надо в коде, а только указать другой драйвер или источник данных?

Да, кстати, а как здесь просто написать сообщение а не ответить на чьё-либо? спасибо!

VasiaV
() автор топика
Ответ на: комментарий от VasiaV

Ну если использовался odbc, то по идее ничего. Но учти, freetds глючен. Мне даже на простеньких select'ах из вьюх попадались глюки типа обрезанных строк и не срабатывающих where.

Я бы ему серьёзное приложение не доверил, а использовал только как проверку настроек.

Отвечать можно либо на первый пост, либо на сообщение.

Ivan_qrt ★★★★★
()

MS SQL и SyBase отлично цепляются через FreeTDS

exception13 ★★★★★
()
Ответ на: комментарий от Ivan_qrt

Ну если использовался odbc, то по идее ничего. Но учти, freetds глючен. Мне даже на простеньких select'ах из вьюх попадались глюки типа обрезанных строк и не срабатывающих where.

у меня такое поведение было и с использованием оракла через unixodbc

exception13 ★★★★★
()
Ответ на: комментарий от exception13

оракла через unixodbc

Может, конечно, и unixodbc виноват, но лечил я это, в том числе, установкой версии freetds в конфиге. Так что грешу на него.

Для остальных БД стараюсь использовать нативные драйвера, благо они даже у оракла, вполне рабочие.

Ivan_qrt ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.