Как подключиться к sql server
Для работы с базой данных MS SQL Server в .NET 5 и выше (а также .NET Core 3.0/3.1) необходимо установить в проект через nuget пакет Microsoft.Data.SqlClient :
Для создания подключения к MS SQL Server применяется класс SqlConnection из пространства имен Microsoft.Data.SqlClient.
Этот класс имеет три конструктора:
SqlConnection() SqlConnection(String) SqlConnection(String, SqlCredential)
Второй и третий конструкторы в качестве первого параметра принимают строку подключения. Третий конструктор также принимает объект SqlCredential , который фактически представляет логин и пароль.
Теперь проверим подключение на примере сервера LocalDB:
using Microsoft.Data.SqlClient; using System; using System.Data; using System.Threading.Tasks; namespace HelloApp < class Program < static async Task Main(string[] args) < string connectionString = "Server=(localdb)\\mssqllocaldb;Database=master;Trusted_Connection=True;"; // Создание подключения SqlConnection connection = new SqlConnection(connectionString); try < // Открываем подключение await connection.OpenAsync(); Console.WriteLine("Подключение открыто"); >catch (SqlException ex) < Console.WriteLine(ex.Message); >finally < // если подключение открыто if (connection.State == ConnectionState.Open) < // закрываем подключение await connection.CloseAsync(); Console.WriteLine("Подключение закрыто. "); >> Console.WriteLine("Программа завершила работу."); Console.Read(); > > >
В данном случае подключение осуществляется к серверу LocalDB и его базе данных master (по умолчанию база данных master уже должна быть на любом MS SQL Servere).
Для начала взаимодействия с базой данных нам надо открыть подключение с помощью методов Open() (синхронный) или OpenAsync() (асинхронный).
По окончании работы с SqlConnection необходимо закрыть подключение к серверу, вызвав метод Close()/CloseAsync() или Dispose()/DisposeAsync() . В данном случае вначале проверяем, что подключение открыто и, если оно открыто, вызываем асинхронный метод OpenAsync() .
В итоге, если указана валидная строка подключения, то мы должны увидеть на консоли следующие строки:
Подключение открыто Подключение закрыто. Программа завершила работу.
Вместо явного закрытия подключения также можно использовать конструкцию using , которая автоматически закрывает подключение:
using Microsoft.Data.SqlClient; using System; using System.Threading.Tasks; namespace HelloApp < class Program < static async Task Main(string[] args) < string connectionString = "Server=(localdb)\\mssqllocaldb;Database=master;Trusted_Connection=True;"; using(SqlConnection connection = new SqlConnection(connectionString)) < await connection.OpenAsync(); Console.WriteLine("Подключение открыто"); >Console.WriteLine("Подключение закрыто. "); Console.WriteLine("Программа завершила работу."); Console.Read(); > > >
Получение информации о подключении
Объект SqlConnection обладает рядом свойств, которые позволяют получить информацию о подключении:
using Microsoft.Data.SqlClient; using System; using System.Threading.Tasks; namespace HelloApp < class Program < static async Task Main(string[] args) < string connectionString = "Server=(localdb)\\mssqllocaldb;Database=master;Trusted_Connection=True;"; using(SqlConnection connection = new SqlConnection(connectionString)) < await connection.OpenAsync(); Console.WriteLine("Подключение открыто"); // Вывод информации о подключении Console.WriteLine("Свойства подключения:"); Console.WriteLine($"\tСтрока подключения: "); Console.WriteLine($"\tБаза данных: "); Console.WriteLine($"\tСервер: "); Console.WriteLine($"\tВерсия сервера: "); Console.WriteLine($"\tСостояние: "); Console.WriteLine($"\tWorkstationld: "); > Console.WriteLine("Подключение закрыто. "); Console.WriteLine("Программа завершила работу."); Console.Read(); > > >
Подключение открыто Свойства подключения: Строка подключения: База данных: master Сервер: (localdb)\mssqllocaldb Версия сервера: 15.00.2000 Состояние: Open WorkstationId: EUGENEPC Подключение закрыто. Программа завершила работу.
Подключение БД MS SQL
В MS SQL можно создать базу данных с 0 или подключить существующую (не восстановление из бэкапа). Рассмотрим оба варианта. Для подключения существующей базы будем использовать одну из баз ниже, эти базы применяются для обучения.
Тестовые базы данных MS SQL для скачивания (подойдет любая):
Подключение базы данных
Нам понадобится установленный MS SQL сервер (как установить написано тут). Подключаемся к SQL серверу с помощью SSMS и распаковываем архив. Базы данных всегда состоят минимум из 2 файлов. Один файл, с расширением mdf, является самой базой данных, а ldf — это журнал транзакций. Чаще всего эти файлы кладут на разные диски (за исключение высокопроизводительных RAID массивов или SAN систем).
В открытом окне SQL Server Management Studio нажимаем указанные кнопки:
Затем нажимаем кнопку «Добавить», выбираем папку, где находится база и 2 раза кликаем по файлу с расширением mdf
Затем нажимаем «ОК» и после этого мы можем увидеть подключенную базу данных
Создание базы данных
Базу данных можно создать двумя путями. С помощью интерфейса или SQL запроса.
Для создания запроса нам нужно нажать кнопку «Создать запрос» или «New Querry»
В новом окне пишем:
CREATE DATABASE Magazine
Где «Magazine» — имя вашей базы. Можно использовать кириллические символы и пробел, но это не рекомендуется. Если в названии стоит пробел, то название стоит выделить в кавычки, например:
CREATE DATABASE "Magazine Moscow"
Если мы создаем базу, например, для 1С или для задач, где будут использоваться разные кодировки, то кодировка по умолчанию подойдет (latin1_general_cp1_ci_as). 1С все хранит в юникод формате.
Если же мы создаем базу под конкретную задачу, где будут использоваться только кирилические символы мы можем захотеть создать базу с кодировкой, что немного повысит производительность и сохранит место:
CREATE DATABASE "Magazine Moscow" COLLATE cyrillic_general_ci_as
После написания запроса нажимаем зеленую кнопку «Выполнить»:
Для создание базы через графический интерфейс нужно пройти 2 шага:
Затем заполнить название и нажать «Ок»
Возможно понадобится обновить список нажав кнопку:
sqlsrv_connect
Открывает соединение с базой данных Microsoft SQL Server. По умолчанию попытка подключения выполняется с использованием проверки подлинности Windows. Чтобы подключиться с использованием проверки подлинности SQL Server, включите «UID» и «PWD» в массив параметров подключения.
Список параметров
Имя сервера, к которому устанавливается соединение. Чтобы подключиться к определённому экземпляру, после имени сервера укажите обратную косую черту и имя экземпляра (например, serverName\sqlexpress).
Ассоциативный массив, определяющий параметры подключения к серверу. Если значения для ключей UID и PWD не указаны, будет предпринята попытка подключения с использованием проверки подлинности Windows. Полный список поддерживаемых ключей смотрите в разделе » Параметры подключения SQLSRV.
Возвращаемые значения
Ресурс подключения. Если соединение не может быть открыто, возвращается false .
Примеры
Пример #1 Подключение с использованием проверки подлинности Windows.
$serverName = «serverName\\sqlexpress» ; //serverName\instanceName
?php
// Поскольку UID и PWD не указаны в массиве $connectionInfo,
// будет предпринята попытка подключения с использованием проверки подлинности Windows.
$connectionInfo = array( «Database» => «dbName» );
$conn = sqlsrv_connect ( $serverName , $connectionInfo );
if( $conn ) echo «Соединение установлено.
» ;
>else echo «Соединение не установлено.
» ;
die( print_r ( sqlsrv_errors (), true ));
>
?>
Пример #2 Подключение с использованием имени пользователя и пароля.
$serverName = «serverName\\sqlexpress» ; //serverName\instanceName
$connectionInfo = array( «Database» => «dbName» , «UID» => «userName» , «PWD» => «password» );
$conn = sqlsrv_connect ( $serverName , $connectionInfo );
?php
if( $conn ) echo «Соединение установлено.
» ;
>else echo «Соединение не установлено.
» ;
die( print_r ( sqlsrv_errors (), true ));
>
?>
Пример #3 Подключение с использованием порта.
$serverName = «serverName\\sqlexpress, 1542» ; //serverName\instanceName, portNumber (по умолчанию 1433)
$connectionInfo = array( «Database» => «dbName» , «UID» => «userName» , «PWD» => «password» );
$conn = sqlsrv_connect ( $serverName , $connectionInfo );
?php
if( $conn ) echo «Соединение установлено.
» ;
>else echo «Соединение не установлено.
» ;
die( print_r ( sqlsrv_errors (), true ));
>
?>
Примечания
По умолчанию sqlsrv_connect() использует пул соединений для повышения производительности соединения. Чтобы отключить пул соединений (т.е. принудительно устанавливать новое соединение при каждом вызове), установите для параметра «ConnectionPooling» в массиве $connectionOptions значение 0 (или false ). Для получения дополнительной информации смотрите раздел » Пул соединений SQLSRV.
У модуля SQLSRV нет специальной функции для изменения базы данных после подключения. Целевая база данных указывается в массиве $connectionOptions, который передаётся в sqlsrv_connect. Чтобы изменить базу данных при открытом соединении, выполните следующий запрос «USE dbName» (например, sqlsrv_query($conn, «USE dbName»)).
Смотрите также
- sqlsrv_close() — Закрывает открытое соединение и освобождает ресурсы, связанные с этим соединением
- sqlsrv_errors() — Возвращает информацию об ошибке и предупреждении последней выполненной операции SQLSRV
- sqlsrv_query() — Подготавливает и выполняет запрос
Как удаленно подключиться к SQL Server
Мне нужно сделать подключение с любого пк к удаленной бд на SQL Server (установлен на моем пк), свой сервер настроил на удаленный доступ по этому видео https://www.youtube.com/watch?v=2T7PdDTAq8Y, на пк клиента установлненна индентичная версия SQL Server Express 2014 (у него тоже настроены удаленные подключения) В программе строка подключения имеет вид: «Data Source=tcp:192.168.0.107, 1433;Initial Catalog=DanceStudioDB;Persist Security Info=True;User порт 1433 открыт пареметр Data Source пробывал менять на: 192.168.0.107 tcp:192.168.0.107 192.168.0.107, 1433 192.168.0.107\SQLEXPRESS 192.168.0.107\SQLEXPRESS, 1433 tcp:192.168.0.107\SQLEXPRESS tcp:192.168.0.107\SQLEXPRESS, 1433 Вобщем я уже не знаю что еще можно писать, перечитал все что мог, и так как майкрософт писали делал https:// technet.microsoft.com/ru-ru/library/ms345306(v=sql.100).aspx (удалите пробел после //) но всеравно ничего. А вот что в ошибке пишет:
Отслеживать
задан 9 окт 2017 в 16:00
Maxim Koylo Maxim Koylo
309 3 3 серебряных знака 13 13 бронзовых знаков
вам стоит добавить детали проблемы в вопрос, иначе вам будут отвечать наугад. сервер и клиент в тоже же сети? Какие сетевые адреса клиента и сервера? Или между ними есть NAT/интернет? ping между ними проходит?
– user177221
9 окт 2017 в 16:22
в конечном продукте база данных будет стоять на платном хостинге, подключение к нему будет уже не таким муторным надеюсь?
9 окт 2017 в 16:31
на платном хостинге вам выдадут готовую строку подключения (если хостинг нормальный). другое дело, что сейчас непонятно, куда и как вы хотите подключиться. может быть на соседнюю машину, а вам уже насоветовали порты в nat пробрасывать и белый адрес покупать. хотя (может быть) вам нужно просто на сервере удаленные подключения разрешить.
– user177221
9 окт 2017 в 16:37
ну мой сервер в одной сети, а клиент на другой. Я так понял в процесе розработки работать на локальном сервере, а врелизе просто изменить строку подключения к хостингу