Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 ODBC SQL -> MS-SQL  [new]
Agent 007
Member

Откуда:
Сообщений: 44
Привет всем,

Я собираюс строит програма на С/С++ работающая с БД. Видно что DB-Library уже старый метод связи, поетому буду подключат через ODBC. Понял что у ODBC есть какой-то "специальны" SQL язык и все запросы потом транслируются к SQL конкретной БД (например MS-SQL). Вопрос такой - можно ли выполнят специфические SQL запросы (T-SQL) без ODBC трансляции?
23 мар 06, 13:00    [2480855]     Ответить | Цитировать Сообщить модератору
 Re: ODBC SQL -> MS-SQL  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
автор
Понял что у ODBC есть какой-то "специальны" SQL язык и все запросы потом транслируются к SQL конкретной БД (например MS-SQL).


Нет, Вы не правильно выяснили. ODBC ни чего не "транслирует". Поэтому запросы надо писать на конретном диалекте СУБД, чей лрайвер Вы используете.
23 мар 06, 13:02    [2480864]     Ответить | Цитировать Сообщить модератору
 Re: ODBC SQL -> MS-SQL  [new]
mov ax,0201h
Member

Откуда: Ханты-Мансийск
Сообщений: 109
Дополню:
Приложение, использующее интерфейс ODBC, выполняет следующие задачи:
1. запрашивает соединение (или сессию) с источником данных;
2. посылает SQL- запросы к источнику данных;
3. описывает область хранения и формат для результатов SQL- запросов;
4. запрашивает данные;
5. обрабатывает ошибки;
6. если необходимо, оповещает пользователя об ошибках;
7. осуществляет фиксацию или откат действий в режиме транзакций;
8. закрывает соединение с источником данных.
23 мар 06, 13:08    [2480913]     Ответить | Цитировать Сообщить модератору
 Re: ODBC SQL -> MS-SQL  [new]
Agent 007
Member

Откуда:
Сообщений: 44
pkarklin
автор
Понял что у ODBC есть какой-то "специальны" SQL язык и все запросы потом транслируются к SQL конкретной БД (например MS-SQL).


Нет, Вы не правильно выяснили. ODBC ни чего не "транслирует". Поэтому запросы надо писать на конретном диалекте СУБД, чей лрайвер Вы используете.


А как обясните ети "{fn..." в следующий пример:

select LAST_NAME, FIRST_NAME,
{fn CONCAT(FIRST_NAME,{fn CONCAT(" ",LAST_NAME)})}
from CUSTOMER
where {fn LEFT(LAST_NAME,1)}="A"

Я понял что ето ODBC-шкие функции, которые транслируются в зависимости от конкретная БД. Если никакие трансляции нет, как обясните ОДБЦ функция "SQLNativeSql" - она точно показывает "native SQL"...
23 мар 06, 13:22    [2481018]     Ответить | Цитировать Сообщить модератору
 Re: ODBC SQL -> MS-SQL  [new]
Agent 007
Member

Откуда:
Сообщений: 44
mov ax,0201h
Дополню:
Приложение, использующее интерфейс ODBC, выполняет следующие задачи:
1. запрашивает соединение (или сессию) с источником данных;
2. посылает SQL- запросы к источнику данных;
3. описывает область хранения и формат для результатов SQL- запросов;
4. запрашивает данные;
5. обрабатывает ошибки;
6. если необходимо, оповещает пользователя об ошибках;
7. осуществляет фиксацию или откат действий в режиме транзакций;
8. закрывает соединение с источником данных.


Вот точный пример:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odbc/htm/odbcsqlnativesql.asp

смотрите последние строки
23 мар 06, 13:25    [2481027]     Ответить | Цитировать Сообщить модератору
 Re: ODBC SQL -> MS-SQL  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Это ODBCшный синтаксис вызова функций. Выполните запрос в QA и убедитесь с помощью профайлера, что на сервер запрос пришел и выполнился неизменным.
23 мар 06, 13:47    [2481184]     Ответить | Цитировать Сообщить модератору
 Re: ODBC SQL -> MS-SQL  [new]
mov ax,0201h
Member

Откуда: Ханты-Мансийск
Сообщений: 109
поетому буду подключат через ODBC
Может стоит обратить внимание на ADO?
23 мар 06, 13:50    [2481215]     Ответить | Цитировать Сообщить модератору
 Re: ODBC SQL -> MS-SQL  [new]
Agent 007
Member

Откуда:
Сообщений: 44
mov ax,0201h
поетому буду подключат через ODBC
Может стоит обратить внимание на ADO?


ADO не знаю что точно. Чем ADO лучше ODBC?
23 мар 06, 16:01    [2482250]     Ответить | Цитировать Сообщить модератору
 Re: ODBC SQL -> MS-SQL  [new]
Agent 007
Member

Откуда:
Сообщений: 44
pkarklin
Это ODBCшный синтаксис вызова функций. Выполните запрос в QA и убедитесь с помощью профайлера, что на сервер запрос пришел и выполнился неизменным.


Правда что профайлер показывает тот же запрос (с "{fn..."), но обратите внимание на точка 4 из:
http://msdn.microsoft.com/library/en-us/odbc/htm/odbcdriver_tasks.asp
23 мар 06, 17:06    [2482797]     Ответить | Цитировать Сообщить модератору
 Re: ODBC SQL -> MS-SQL  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
если Вы об этом:

ODBC Programmer's Reference->Escape Sequences in ODBC

A number of language features, such as outer joins and scalar function calls, are commonly implemented by DBMSs. However, the syntaxes for these features tend to be DBMS-specific, even when standard syntaxes are defined by the various standards bodies. Because of this, ODBC defines escape sequences that contain standard syntaxes for the following language features:

Date, time, timestamp, and datetime interval literals
Scalar functions such as numeric, string, and data type conversion functions
LIKE predicate escape character
Outer joins
Procedure calls
The escape sequence used by ODBC is as follows:

{extension}

The escape sequence is recognized and parsed by drivers, which replace the escape sequences with DBMS-specific grammar. For more information about escape sequence syntax, see "ODBC Escape Sequences" in Appendix C: SQL Grammar.

Т.е. если Вы будете явно их использовать, то да, будет происходить их трансляция в диалект СУБД. НО, если Вы разрабатываете приложение, ориентированное на конкретную СУБД, то какой смысл в их использовании, кроме доп затрат на трансляцию?!
23 мар 06, 17:14    [2482860]     Ответить | Цитировать Сообщить модератору
 Re: ODBC SQL -> MS-SQL  [new]
Agent 007
Member

Откуда:
Сообщений: 44
pkarklin
если Вы об этом:

ODBC Programmer's Reference->Escape Sequences in ODBC

A number of language features, such as outer joins and scalar function calls, are commonly implemented by DBMSs. However, the syntaxes for these features tend to be DBMS-specific, even when standard syntaxes are defined by the various standards bodies. Because of this, ODBC defines escape sequences that contain standard syntaxes for the following language features:

Date, time, timestamp, and datetime interval literals
Scalar functions such as numeric, string, and data type conversion functions
LIKE predicate escape character
Outer joins
Procedure calls
The escape sequence used by ODBC is as follows:

{extension}

The escape sequence is recognized and parsed by drivers, which replace the escape sequences with DBMS-specific grammar. For more information about escape sequence syntax, see "ODBC Escape Sequences" in Appendix C: SQL Grammar.

Т.е. если Вы будете явно их использовать, то да, будет происходить их трансляция в диалект СУБД. НО, если Вы разрабатываете приложение, ориентированное на конкретную СУБД, то какой смысл в их использовании, кроме доп затрат на трансляцию?!


Да, я тоже начинал понимать что без ети {...} блоки все будет исполнено без трансляции. Мой вопрос в начале был точно то - можно ли использовать диалект конкретную СУБД через ODBC и как видно вполне возможно.
23 мар 06, 17:31    [2482958]     Ответить | Цитировать Сообщить модератору
 Re: ODBC SQL -> MS-SQL  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Да, конечно, возможно! "Транслятор" ODBC предназначен в первую очередь для написания в той или иной степени независимых от конретной СУБД приложений.
23 мар 06, 17:33    [2482968]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить