Страницы

Поиск по вопросам

среда, 17 октября 2018 г.

Подключение к SQL Server на C# для чайника

Visual Studio 2012 Ultimate поставил, вместе с ней поставился SQL Server 2012. Итак.
Задача: подключиться к SQL Server, создать новую локальную базу данных, выполнить скрипт создания базы из файла "database.sql" (создание таблиц, процедур и т. п.).
SqlConnection sqlConnection = new SqlConnection(); sqlConnection = new SqlConnection("Data Source=localhost; Integrated Security=SSPI; Initial Catalog=testdb;"); sqlConnection.Open();
MyClass.scriptExecute(sqlConnection, "database.sql");
sqlConnection.Close(); sqlConnection.Dispose();
Проблема: судя по всему, в строке подключения, а скорее всего - в имени сервера.
Объясните на пальцах, пожалуйста, что там писать? В голове каша, не понимаю ни фига. Перепробовал варианты названия сервера с MSDN и ConnectionString - все время какие-то ошибки. Варианты: localhost, (localhost), (local), localdb, (localdb), (localdb)\v.11, еще какие-то были, и уже совершенно запутался в них всех. Есть варианты подключения к Server Instance - это что еще за хрень? Тоже не пойму. Как мне объяснили, логин-пароль указывать не надо при создании базы, кажется, используется аутенфикация Windows, но я опять же толком не понял о чем речь.
Спасибо всем за помощь.


Ответ

У SQL Server есть два режима работы:
Полноценный инстанс (именованный или неименованный).
Его наличие можно проверить в Control Panel / Services:

В скобках написано имя инстанса. MSSQLSERVER - это неименованный инстанс. Если у вас там написано SQLEXPRESS - то имя инстанса и есть SQLEXPRESS.
К таким инстансам можно подключится по имени в формате ИМЯСЕРВЕРА\ИМЯИНСТАНСА. Точка в имени сервера - это локальная машина. Т.е. для подключения к серверу со скриншота можно использовать
localhost - без скобок! 127.0.0.1 pasha-pc - имя моей машины.
Будь там написано SQLEXPRESS, для подключения можно было бы использовать
.\SQLEXPRESS localhost\SQLEXPRESS - без скобок! pasha-pc\SQLEXPRESS - имя моей машины + имя инстанса.
Проблема с полноценным инстансом - доступ к нему нужно настраивать. Он по умолчанию разрешает доступ тому, кто устанавливал SQL Server, но всем остальным доступ нужно разрешить вручную. Для обхода этой проблемы существует второй режим работы:
LocalDB
LocalDB - это легковесный инстанс SQL Server-а, который существует только для текущего пользователя.
Для подключения к нему используется имя сервера в формате (localdb)\имяинстанса
Для создания новых инстансов или просмотра существующих можно использовать утилиту C:\Program Files\Microsoft SQL Server\120\Tools\Binn\SqlLocalDB.exe (точный путь зависит от установленной версии SQL Server)
Вот пример вывода существующих инстансов на моей машине
>SqlLocalDB.exe i MSSQLLocalDB ProjectsV12 v11.0 v11.m v12.0
Соответствующие имена для подключения - (localdb)\MSSQLLocalDB, (localdb)\ProjectsV12....
Обычно пару инстансов уже создано по умолчанию, в частности инстанс с текущей версией - поэтому вы встречаете упоминание (localdb)\v11.0 в примерах - это инстанс, который почти наверное будет создан на машине с 2012-ой студией.
Воспользуйтесь панелью управления сервисами и SqlLocalDB, узнайте имя инстанса, и впишите соответствующее имя в connection string.

Комментариев нет:

Отправить комментарий