Список источников данных ODBC в C#

Вы можете проверить, какое имя принимает только текст и пробелы, вы можете использовать это выражение / ^ [a-zA-Z \ s] + $ / прочитать об этом в этом ответе https://stackoverflow.com/a / 12778207/615274 . Проверка сообщения немного проще. С помощью атрибута maxlength можно определить максимальное количество символов, принимаемых в текстовой области. Эта возможность может помешать вам писать код. Пожалуйста, посмотрите на следующий пример

const form = document.forms.form;

form.addEventListener('submit', handleSubmit, true);

function handleSubmit(event) {
    event.preventDefault();

    const name = this.name.value;
    const message = this.message.value;

    if (!isValidName(name)) {
        alert('Not valid name!');

        return false;
    }

    if (!isValidMessage(message)) {
        alert('Not valid message!');

        return false;
    }

    this.submit();
}

function isValidName(name) {
    // const expresion = /^[A-Za-z]+$/;
    const expresion = /^[a-zA-Z\s]+$/;

    return expresion.test(name);
}

function isValidMessage(message) {
    if (message.length > 200) {
        return false;
    }

    return true;
}

Get A Quote




11
задан 18 February 2009 в 17:15
поделиться

4 ответа

Я не думаю, что существует что-либо в.NET и быстрой проверке (собственного) ODBC, который API показывает некоторым функциям, которые могли бы помочь:

  • SQLBrowseConnec
  • SQLDrivers

Учитывая путь буферы используются в API ODBC, тщательное прикрепление символьных массивов будет необходимо.

0
ответ дан 3 December 2019 в 04:14
поделиться

Вы могли назвать SQLDataSources-функцию в ODBC32.DLL:

 using System.Runtime.InteropServices;
    public static class OdbcWrapper
    {
        [DllImport("odbc32.dll")]
        public 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")]
        public static extern int SQLAllocEnv(ref int EnvHandle);
    }

Пример, который перечисляет Источники данных:

public void ListODBCsources()
    {
        int envHandle=0;
        const int SQL_FETCH_NEXT = 1;
        const int SQL_FETCH_FIRST_SYSTEM = 32;

        if (OdbcWrapper.SQLAllocEnv(ref envHandle) != -1)
        {
            int ret;
            StringBuilder serverName = new StringBuilder(1024);
            StringBuilder driverName = new StringBuilder(1024);
            int snLen = 0;
            int driverLen = 0;
            ret = OdbcWrapper.SQLDataSources(envHandle, SQL_FETCH_FIRST_SYSTEM, serverName, serverName.Capacity, ref snLen,
                        driverName, driverName.Capacity, ref driverLen);
            while (ret == 0)
            {
                System.Windows.Forms.MessageBox.Show(serverName + System.Environment.NewLine + driverName);
                ret = OdbcWrapper.SQLDataSources(envHandle, SQL_FETCH_NEXT, serverName, serverName.Capacity, ref snLen,
                        driverName, driverName.Capacity, ref driverLen);
            } 
        }

    }

Первый вызов к SQLDataSources с SQL_FETCH_FIRST_SYSTEM говорит функции запускать список с Системы-DSNs. Если Вы просто запустили с SQL_FETCH_NEXT это сначала перечислило бы драйверы. Свяжитесь с функцией касательно на сайте Microsofts

Править:
Все, кажется, знают это, но я просто узнал вчера, когда я использовал этот код в новом poject: при компиляции этого с VS в Windows на 64 бита, необходимо установить "Целевую платформу" на "x86", или код не будет работать.

17
ответ дан 3 December 2019 в 04:14
поделиться

Я использую следующий код для получения DSN из реестра:

    private List<string> EnumDsn()
    {
        List<string> list = new List<string>();
        list.AddRange(EnumDsn(Registry.CurrentUser));
        list.AddRange(EnumDsn(Registry.LocalMachine));
        return list;
    }

    private IEnumerable<string> EnumDsn(RegistryKey rootKey)
    {
        RegistryKey regKey = rootKey.OpenSubKey(@"Software\ODBC\ODBC.INI\ODBC Data Sources");
        if (regKey != null)
        {
            foreach (string name in regKey.GetValueNames())
            {
                string value = regKey.GetValue(name, "").ToString();
                yield return name;
            }
        }
    }

Странно, что у вас есть неанглийское имя для ключа «Источники данных ODBC» ... У меня есть французский версия Windows, и название по-прежнему на английском

8
ответ дан 3 December 2019 в 04:14
поделиться

If you are using a Windows Forms Application (not a Web environment), you could use the Visual Studio's "Choose Data Source" dialog.

It's included in an assembly and can be easily used.

The article where I found this info: http://www.mztools.com/articles/2007/MZ2007011.aspx

In any case, I'm from Spain and I also use the Registry solution (specially in Web apps). I've never found a machine with those entries in a language different from English.

Espero ser de ayuda...

0
ответ дан 3 December 2019 в 04:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: