Команда подключения к MS SQL

127
01 января 2020, 21:50

Глупый вопрос ну все же, пытаюсь в приложении подключиться к экземпляру SQL Express

"Data Source=.\\SQLEXPRESS; Initial Catalog=SiteASAM; Integrated Security=True;";

работает, переношу ПО на другой компьютер и пытаюсь подключиться к похожему экземпляру MSSQL Express уже не работает, меняю на эту строку снова работает

"Data Source=localhost; Initial Catalog=SiteASAM; Integrated Security=True;";

возвращаюсь обратно на первый ПК с этой строкой, не работает, меняю обратно на

"Data Source=.\\SQLEXPRESS; Initial Catalog=SiteASAM; Integrated Security=True;";

работает, ЕСТЬ УНИВЕРСАЛЬНЫЙ СПОСОБ ПОДКЛЮЧЕНИЯ К ЭКЗЕМПЛЯРУ SQL Server Express

Answer 1

Как вариант, использовать WMI. Каждый экземпляр имеет свою службу с именем вида MSSQL$<instance> для именованных экземпляров или MSSQLSERVER для экземпляра по умолчанию (Документировано здесь: Использование службы SQL Server). Это приводит нас к такому коду для получения имени экземпляра:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Management;
//Reference: System.Management
public static IEnumerable<string> GetSqlServers()
{
    var mos = new ManagementObjectSearcher(
        "SELECT Name FROM Win32_Service WHERE Name LIKE 'MSSQL$%' OR Name='MSSQLSERVER'");
    using (mos)
    {
        var moc = mos.Get();
        using (moc)
        {
            foreach (ManagementObject mo in moc)
            {
                string res = mo.Properties["Name"].Value as string;
                if (res == null) continue;
                int index = res.IndexOf('$');
                if (index < 0) yield return "";
                else yield return res.Substring(index + 1);
            }
        }
    }
}
//...
string DataSource = ".\\" + GetSqlServers().First();
Answer 2

Замечал, что при установке MS SQL Server'а имя экземпляра различается на разных машинах. В моем случае на одной это было "SQLEXPRESS.1"

Подозреваю, что имена всех экземпляров можно найти в реестре и вывести при старте программы окно выбора. Если экземпляр один, то можно сразу использовать его.

В какой конкретно ветке реестра - не знаю. Вероятнее всего внутри HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft. Можно поискать строку SQLEXPRESS или изучить документацию.

UPD.

Несколько способов перечислены на английском SO: https://stackoverflow.com/questions/141154/how-can-i-determine-installed-sql-server-instances-and-their-versions

READ ALSO
WebClient.DownloadString ошибка JavaScript при попытке загрузки

WebClient.DownloadString ошибка JavaScript при попытке загрузки

Я хочу считать содержимое файла с помощью WebClient по прямой ссылке на сайте, но при этом получаю в ответ это:

129
Как вернуть обьект внутри Task&lt;&gt;

Как вернуть обьект внутри Task<>

У меня вот такой код

153
Удаление старых label с данными при загрузке новых данных из файла

Удаление старых label с данными при загрузке новых данных из файла

Есть программа, которая по нажатию кнопки генерирует значения в файлПо нажатию другой кнопки считывает их из файла и выводит в качестве разноцветных...

147
Как добавить SVG в трей?

Как добавить SVG в трей?

Приложение - WinFormsВ трее есть иконка - использовал NotinfyIcon, но вот тут я столкнулся с проблемой качества иконок

212