powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Listing ODBC Data Source, user and system
3 сообщений из 3, страница 1 из 1
Listing ODBC Data Source, user and system
    #39459226
Jafa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет,
я пытаюсь получить весь список доступных в системе odbc datasource, включая user и system DSN, 32 и 64 разрадные.
Вот я нашел на просторах Интернета пример:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
        [DllImport("odbc32.dll")]
        internal static extern int SQLDataSources(int EnvHandle, int Direction, StringBuilder ServerName, int ServerNameBufferLenIn, 
            ref int ServerNameBufferLenOut, StringBuilder Driver, int DriverBufferLenIn, ref int DriverBufferLenOut);
        [DllImport("odbc32.dll")]
        internal static extern int SQLAllocEnv(ref int EnvHandle);

        public static List<ODBC_System_DSN_Entry> ListODBCsources()
        {
            List<ODBC_System_DSN_Entry> entries = new List<ODBC_System_DSN_Entry>();
            int envHandle = 0;
            const int SQL_FETCH_NEXT = 1;
            const int SQL_FETCH_FIRST_SYSTEM = 32;

            if (SQLAllocEnv(ref envHandle) != -1)
            {
                int ret;
                StringBuilder serverName = new StringBuilder(1024);
                StringBuilder driverName = new StringBuilder(1024);
                int snLen = 0;
                int driverLen = 0;
                ret = SQLDataSources(envHandle, SQL_FETCH_FIRST_SYSTEM, serverName, serverName.Capacity, ref snLen,
                            driverName, driverName.Capacity, ref driverLen);
                while (ret == 0)
                {
                    entries.Add(new ODBC_System_DSN_Entry(serverName.ToString(), driverName.ToString()));
                    ret = SQLDataSources(envHandle, SQL_FETCH_NEXT, serverName, serverName.Capacity, ref snLen,
                            driverName, driverName.Capacity, ref driverLen);
                }
                return entries;
            }
            return null;
        }

        public struct ODBC_System_DSN_Entry
        {
            internal String _server;
            internal String _driver;
            internal ODBC_System_DSN_Entry(String server, String driver)
            {
                _server = server;
                _driver = driver;
            }
            public String Server { get { return _server; } }
            public String Driver { get { return _driver; } }
        }



Пример работает, но возвращает только ODBC System DSN, и только x32 разрядные.
Как это можно исправить? Хотябы чтоб в список попали User DSN DataSource, пускай даже только x32.
...
Рейтинг: 0 / 0
Listing ODBC Data Source, user and system
    #39459290
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jafa,

SQL_FETCH_FIRST_SYSTEM не наводит на мысль, что существует ещё SQL_FETCH_FIRST_USER ?
https://docs.microsoft.com/en-us/sql/odbc/reference/syntax/sqldatasources-function

а пример - поганый - SQL хэндлы объявлены как int, а не IntPtr
под x64 - всё развалится
...
Рейтинг: 0 / 0
Listing ODBC Data Source, user and system
    #39459988
Jafa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,

спасибо
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Listing ODBC Data Source, user and system
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]