Как предоставить пользователю выбор источника данных для соз
От: Марк Балонкин  
Дата: 15.05.02 02:39
Оценка: 145 (3)
Статья:
Как предоставить пользователю выбор источника данных для создания ADO Connection?
Автор(ы): Марк Балонкин
Дата: 27.09.2001


Авторы:
Марк Балонкин

Аннотация:
Для определения источника данных во время выполнения существует DataLink диалог. Создать или отредактировать ADO Connection с помощью DataLink поможет IDataSourceLocator (OLE DB). Пример кода:
получить список всех провайдеров
От: VsevolodC Россия  
Дата: 16.05.02 02:39
Оценка:
Мне требуется не мышкой тыкать, а просто иметь список, например:

Microsoft.Jet.OLEDB.3.51
Microsoft.Jet.OLEDB.4.0

как?

Спасибо за внимание
Re: получить список всех провайдеров
От: algol Россия about:blank
Дата: 16.06.02 22:29
Оценка:
В ATL OLEDB consumer templates для этого имеется класс CEnumerator:


#include <atlbase.h>
#include <atldbcli.h>

int main(int argc, char* argv[])
{
    CoInitialize(NULL);

    {
    CEnumerator rs;
    rs.Open();
    while (rs.MoveNext() == S_OK)
        printf("%ls\n", rs.m_szName);
    }

    CoUninitialize();
    return 0;
}


Можно также напрямую воспользоваться интерфейсом ISourcesRowset:


CComPtr<ISourcesRowset> spSourcesRowset = NULL;
CCommand<CDynamicAccessor> rs;
HRESULT hr;

// Create the enumerator
hr = spSourcesRowset.CoCreateInstance(CLSID_OLEDB_ENUMERATOR,
    NULL, CLSCTX_INPROC_SERVER);

// Get the rowset so we can enumerate the data sources
hr = spSourcesRowset->GetSourcesRowset(NULL, IID_IRowset, 0,
    NULL, (IUnknown**)&rs.m_spRowset);

hr = rs.Bind();
while (rs.MoveNext() == S_OK)
    printf("%ls\n", rs.GetValue(1L));
Re: получить список всех провайдеров
От: Silverj  
Дата: 20.05.02 16:48
Оценка:
Например так:

GetProviderNames(ComboBox1->Items);
С уважением, Евгений
Re: получить список всех провайдеров
От: VsevolodC Россия  
Дата: 20.05.02 21:09
Оценка:
Возможно, это и работает, но, как я понимаю, диалог все равно
будет на экране. Как сделать это в консольном приложении?

regards
Re: Как предоставить пользователю выбор источника данных для
От: adontz Грузия http://adontz.wordpress.com/
Дата: 15.07.04 22:44
Оценка:
Здравствуйте, Марк Балонкин, Вы писали:

http://support.microsoft.com/default.aspx?scid=kb;en-us;310083
http://support.microsoft.com/default.aspx?scid=kb;en-us;310084
A journey of a thousand miles must begin with a single step © Lau Tsu
Re: Как предоставить пользователю выбор источника данных для
От: Goga74 Россия http://dotnetdiagz.com
Дата: 27.08.07 04:34
Оценка:
Здравствуйте, Марк Балонкин, Вы писали:

МБ>Статья:

МБ>Как предоставить пользователю выбор источника данных для создания ADO Connection?
Автор(ы): Марк Балонкин
Дата: 27.09.2001


МБ>Авторы:

МБ> Марк Балонкин

МБ>Аннотация:

МБ>Для определения источника данных во время выполнения существует DataLink диалог. Создать или отредактировать ADO Connection с помощью DataLink поможет IDataSourceLocator (OLE DB). Пример кода:

Пример на С# для работы с SqlConnection. Главное достоинство этого примера: пользователь может ввести параметры подключения 1 раз, и в дальнейшем диалог их будет помнить.
Танцы с connection string builder-рами объясняются тем, что я использую "нативное" .NET подключение — SqlConnection,
которое имеет несколько отличающийся от Ado/OleDb формат строки подключения — например, на ругается присутствие в строке ключа "Provider=".
Отличия в форматах строк connection strings для разных провайдеров см. например здесь


...
using MSDASC; // Microsoft OLE DB Service Component 1.0 Type Library
using ADODB;  // Microsoft ActiveX Data Objects 2.8 Library
using System.Runtime.InteropServices;
using System.Data.SqlClient;
using System.Data.OleDb;
...
using System.Windows.Forms;
...

    public partial class MainForm : Form
    {

    ...

        private bool TestDBConnect()
        {
            ADODB.Connection cnn = new ADODB.Connection();

            // строку подключения храним в настройках
            cnn.ConnectionString = "Provider=" + Properties.Settings.Default.connectionProvider /* SQLNCLI.1 */ + ";"+
                Properties.Settings.Default.connectionString;

            object o = (object)cnn;
            MSDASC.DataLinks dl = new MSDASC.DataLinks();
            bool result = dl.PromptEdit(ref o); // выводим стандартный диалог подключения
            if (result)
            {
                // получаем собранную в диалоге строку подключения
                OleDbConnectionStringBuilder builderOLE = new OleDbConnectionStringBuilder(cnn.ConnectionString);
                builderOLE.Remove("Provider"); // и вырезаем из нее элемент Provider как несовместимый с SqlConnection

                SqlConnectionStringBuilder builderSQL = new SqlConnectionStringBuilder(builderOLE.ConnectionString);

                try
                {
                    // проверяем - подключение рабочее?
                    cnn.Open(cnn.ConnectionString, builderSQL.UserID, builderSQL.Password, -1);                   
                }
                catch (COMException ex) // что-то случилось, подключиться не удалось
                {
                    MessageBox.Show(ex.Message, "Ошибка при подключении к базе данных", 
                        MessageBoxButtons.OK, MessageBoxIcon.Error);

                    return false;
                }

                // запоминаем последнюю ConnectionString!
                Properties.Settings.Default.connectionString = builderOLE.ConnectionString;
                Properties.Settings.Default.Save();
                cnn.Close();

            } else { // пользователь нажал Cancel в диалоге подключения
                return false;
            }
            return true;
        }

...
        private void MainForm_Load(object sender, EventArgs e)
        {
            if (TestDBConnect())
            {
                GetData();
            } // подключиться не удалось
            else this.Close();
        }
...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.