#c_sharp #sql #net #sql_server #adonet
Если в .NET какой-нибудь ConnectionDialog, где пользователь может выбирать сервера с БД и каталоги? Нашел какой-то класс- DataLinks, но вроде он COM'овский, а так же на NUGET какую-то библиотеку 2010 года. Есть чего-нибудь из коробки или более свежее?
Ответы
Ответ 1
Из коробки (почти) существует решение под названием Microsoft Data Connection Dialog: О том, как правильно его готовить - есть статья на Хабре. Но она старая, и не очень актуальная в связи с не очень работающими ссылками. Тем не менее, в MSDN есть описание данного класса, а так же фабрика для создания таких окон. Так же на английском SO есть вопрос (с ответом) про этот диалог. Еще оно живет в NuGet, но более ранней версии — датировано 2011 годом. Какую именно версию использовать (и использовать ли) — решать вам. Более того, есть более свежие исходные коды данного проекта, которые живут теперь на GitHub (на момент написания данного ответа последние изменения там — март 2015 г). Судя по названию файлов с исходниками, данный диалог поддерживает: подключение к разным версиям MS SQL Server; подключение к Oracle; подключения к другим источникам через ODBC и OLE DB. IMHO: Лично я бы использовал версию с Гитхаба.Ответ 2
Интерфейс OleDB это поддерживает, где-то видел пример на с++. На с# это можно через ADO так: using System.Reflection; using System.Runtime.InteropServices; public string GetConnectionString(string str) { string connectionString=string.Empty; // возвращаемая строка подключения object cn=null, // ADODB.Connection ud=null; // MSDASC.DataLinks try { Type AdoDbConnectionType=Type.GetTypeFromProgID("ADODB.Connection"); Type MSDascDataLinksType=Type.GetTypeFromCLSID(new Guid("{2206CDB2-19C1-11D1-89E0-00C04FD7A829}")); // создать COM объекты ADODB.Connection и MSDASC.DataLinks cn=AdoDbConnectionType.InvokeMember(null, BindingFlags.CreateInstance, null, null, new object[0]); ud=MSDascDataLinksType.InvokeMember(null, BindingFlags.CreateInstance, null, null, new object[0]); AdoDbConnectionType.InvokeMember("ConnectionString", BindingFlags.SetProperty, null, cn, new object[]{str}); if((bool)(MSDascDataLinksType.InvokeMember("PromptEdit", BindingFlags.InvokeMethod, null, ud, new object[]{cn}))) { // нажали кнопку ОК: connectionString=(string)(AdoDbConnectionType.InvokeMember("ConnectionString", BindingFlags.GetProperty, null, cn, new object[0])); } } catch{ /* обработка ошибок */ } finally { if(cn!=null) Marshal.ReleaseComObject(cn); cn=null; if(ud!=null) Marshal.ReleaseComObject(ud); ud=null; } // вернуть строку подключения return(connectionString); } Источник http://www.sql.ru/forum/120264/ne-zauchivayte-stroku-konekta#952795 В str можно заносить предустановленые свойства для линка, плюс в Provider записать имя провайдера (формате ODBC например MSDASQL алиас это MSSQL ).
Комментариев нет:
Отправить комментарий