Содержание
Строка подключения
Последнее обновление: 31.10.2015
После определения источника данных мы можем к нему подключаться. Для этого создадим проект простого консольного приложения.
Первым делом нам надо определить строку подключения, предоставляющая информацию о базе данных и сервере, к которым предстоит установить подключение:
class Program { static void Main(string args) { string connectionString = @»Data Source=.\SQLEXPRESS;Initial Catalog=usersdb;Integrated Security=True»; } }
При использовании различных систем управления базами данных, различных провайдеров данных .NET строка подключения может отличаться. Даже для подключения одной и той же базы данных строка подключения может меняться в зависимости от обстоятельств.
Строка подключения представляет набор параметров в виде пар ключ=значение. В данном случае для подключения к ранее созданной базе данных usersdb мы определяем строку подключения из трех параметров:
-
Data Source: указывает на название сервера. По умолчанию это «.\SQLEXPRESS». Поскольку в строке используется слеш, то в начале строки ставится символ @. Если имя сервера базы данных отличается, то соответственно его и надо использовать.
-
Initial Catalog: указывает на название базы данных на сервере
-
Integrated Security: устанавливает проверку подлинности
Жесткое кодирование строки подключения (то есть ее определение в коде приложения), как правило, редко используется. Гораздо более гибкий путь представляет определение ее в специальных конфигурационных файлах приложения. В проектах десктопных приложений это файл App.config, а в веб-приложениях это в основном файл Web.config. Хотя приложение также может использовать другие способы определения конфигурации.
В нашем случае, так как мы создали проект консольного приложения, то у нас в проекте должен быть файл App.config, который на данный момент имеет следующее определение:
<?xml version=»1.0″ encoding=»utf-8″ ?> <configuration> <startup> <supportedRuntime version=»v4.0″ sku=».NETFramework,Version=v4.6″ /> </startup> </configuration>
Изменим его, добавив определение строки подключения:
<?xml version=»1.0″ encoding=»utf-8″ ?> <configuration> <startup> <supportedRuntime version=»v4.0″ sku=».NETFramework,Version=v4.6″ /> </startup> <connectionStrings> <add name=»DefaultConnection» connectionString=»Data Source=.\SQLEXPRESS;Initial Catalog=usersdb;Integrated Security=True» providerName=»System.Data.SqlClient»/> </connectionStrings> </configuration>
Для определения всех подключений в программе в пределах узла <configuration> добавляется новый узел <connectionStrings>. В этом узле определяются строки подключения с помощью элемента <add>. Мы можем использовать в приложении множество строк подключения, и соответственно также в файле можно определить множество элементов <add>.
Каждая строка подключения имеет название, определяемое с помощью атрибута name. В данном случае строка подключения называется «DefaultConnection». Название может быть произвольное.
Атрибут connectionString собственно хранит строку подключения, то есть весь тот текст, который мы выше определяли в методе Main. И третий атрибут providerName задает пространство имен провайдера данных. Так как мы будем подключаться к базе данных MS SQL Server, то соответственно мы будем использовать провайдер для SQL Server, функциональность которого заключена в пространстве имен System.Data.SqlClient.
Теперь получим эту строку подключения в приложении:
using System; using System.Configuration; namespace AdoNetConsoleApp { class Program { static void Main(string args) { //string connectionString = @»Data Source=.\SQLEXPRESS;Initial Catalog=usersdb;Integrated Security=True»; // получаем строку подключения string connectionString = ConfigurationManager.ConnectionStrings.ConnectionString; Console.WriteLine(connectionString); Console.Read(); } } }
Прежде всего чтобы работать с конфигурацией приложения, нам надо добавить в проект библиотеку System.Configuration.dll.
С помощью объекта ConfigurationManager.ConnectionStrings мы можем получить строку подключения и использовать ее в приложении.
Параметры строки подключения
-
Application Name: название приложения. Может принимать в качестве значения любую строку. Значение по умолчанию: «.Net SqlClient Data Provide»
-
AttachDBFileName: хранит полный путь к прикрепляемой базе данных
-
Connect Timeout: временной период в секундах, через который ожидается установка подключения. Принимает одно из значений из интервала 0–32767. По умолчанию равно 15.
В качестве альтернативного названия параметра может использоваться Connection Timeout
-
Data Source: название экземпляра SQL Servera, с которым будет идти взаимодействие. Это может быть название локального сервера, например, «EUGENEPC/SQLEXPRESS», либо сетевой адрес.
В качестве альтернативного названия параметра можно использовать Server, Address, Addr и NetworkAddress
-
Encrypt: устанавливает шифрование SSL при подключении. Может принимать значения true, false, yes и no. По умолчанию значение false
-
Initial Catalog: хранит имя базы данных
В качестве альтернативного названия параметра можно использовать Database
-
Integrated Security: задает режим аутентификации. Может принимать значения true, false, yes, no и sspi. По умолчанию значение false
В качестве альтернативного названия параметра может использоваться Trusted_Connection
-
Packet Size: размер сетевого пакета в байтах. Может принимать значение, которое кратно 512. По умолчанию равно 8192
-
Persist Security Info: указывает, должна ли конфиденциальная информация передаваться обратно при подключении. Может принимать значения true, false, yes и no. По умолчанию значение false
-
Workstation ID: указывает на рабочую станцию — имя локального компьютера, на котором запущен SQL Server
-
Password: пароль пользователя
-
User ID: логин пользователя
Например,если для подключения необходим логин и пароль, то мы можем их передать в строку подключения через параметры user id и password:
В статье описан процесс работы с MySQL базой из 1С через ODBC.
Первое что следует обязательно учесть это версия драйвера, для того чтобы всё корректно работало вам потребуется драйвер версии 3.51 (с драйвером 5-ой версии я пробился пол дня пытаясь хоть чего нибудь добиться, безрезультатно & поменял на предыдущую версию и всё заработало!
Для подключения используем вот такую строчку:
Код 1C v 8.х Соединение = «DRIVER=MySQL ODBC 3.51 Driver;Database=inventar_sm;DataSource=roman-book;UID=root;PWD=240580;STMT=set character_set_results=cp1251;»;
//Это если задаём кодировку соединения (лучше задать);
Соединение = «DRIVER=MySQL ODBC 3.51 Driver;Database=inventar_sm;DataSource=roman-book;UID=root;PWD=240580;»;
//Это без задания кодировки.
то касается кодировки то лучше её конечно задать, но на вставку записей в БД MySQL оно почемуто не влияет, и чтобы корректно всё отрабатывало и не выглядело кракозябриками после отработки скриптов, перед выполнением самих скриптов лучше выполнить вот такой вот скрипт «set names cp1251» в рамках соединения он правильно установит кодировку (так надёжнее).
Для работы с самой базой объявляем объект ADODB.Connection & это соединение с базой.
Для работы с данными можем объявить: ADODB.Recordset & для чтения данных, и ADODB.Command для изменения.
(ADODB.Command & не имеет метода ExecuteScalar, поэтому вместо него придётся обходиться Recordset-ом и с его помощью выбирать данные, хотя возможно я чегото не доглядел).
Итак пример. Выбираем данные из таблицы:
Код 1C v 8.х Попытка
Connection = Новый COMОбъект(«ADODB.Connection»);
Connection.Open(«DRIVER=MySQL ODBC 3.51 Driver;Database=inventar_sm;DataSource=roman-book;UID=root;PWD=240580;STMT=set character_set_results=cp1251;»);
RS = Новый COMОбъект(«ADODB.Recordset»);
RS.CursorType=3;
// Запрос к базе на языке SQL запросов.
RS.ActiveConnection=Connection;
RS.Open(«select * from market_users»);
//Перемещаем указатель на первую запись.
RS.MoveFirst();
Пока RS.EOF()=0 Цикл
// Обрабатываем значения полей выборки.
NAM = RS.Fields(«NAME»).Value;
Сообщить(NAM);
// Перемещаем указатель.
RS.MoveNext();
КонецЦикла;
//Закрываем соединения.
RS.Close();
Connection.Close();
Теперь изменяем данные:
Код 1C v 8.х Connection = Новый COMОбъект(«ADODB.Connection»);
Connection.Open(«DRIVER=MySQL ODBC 3.51 Driver;Database=inventar_sm;DataSource=roman-book;UID=root;PWD=240580;STMT=set character_set_results=cp1251;»);
//Устанавливаем кодировку для нашего подключения (дополнительно)…
Command= new COMObject(«ADODB.Command»);
Command.CommandText = «set names cp1251»;
Строка соединения с базой данных Connection String. Пример использования в приложениях
Поиск на других ресурсах:
Условие задачи
В данной теме приведен способ определения строки соединения с базой данных Connection String. С помощью этой строки приложение (программа) может иметь доступ к элементам базы данных (таблиц, просмотров, диаграмм и т.п.).
Предполагается, что локальная база данных размещается в файле «MyDataBase.mdf». База данных была создана раньше и включена к перечню баз данных Server Explorer.
Если база данных еще не создана, то загрузить архив с готовыми файлами базы данных можно .
База данных состоит из двух файлов:
- «MyDataBase.mdf»;
- «MyDataBase.ldf».
Пример подключения базы данных к перечню баз данных Server Explorer в MS Visual Studio приведен в статье:
- Пример создания/подключения локальной базы данных Microsoft SQL Server, которая размещается в «*.mdf»-файле
Выполнение
1. Определение строки Connection String
Чтобы получить строку соединения с базой данных Connection String нужно выполнить следующую последовательность шагов (рисунок 1)
- Перейти в утилиту Server Explorer (рис. 1-1)
- Выделить файл «MyDataBase.mdf» (рис. 1-2).
- В окне «Properties» выделить строку (свойство) «Connection Strings» (контекстное меню – команда «Выделить все» и скопировать его в буфер обмена Clipboard (контекстное меню – команда «Копировать») (рис. 1-3).
- Перейти в текстовую часть файла программы. Это может быть, например, файл «Form1.cs» основной формы программы, созданной по шаблону Windows Forms.
- Создать переменную в классе формы Form1 типа string. Пусть название переменной ConnStr. Вставить строку «Connection String» в строке инициализации значения переменной ConnStr (или выбрать другое имя) как показано ниже:
// строка соединения с базой данных string ConnStr = @»Data Source=.\SQLEXPRESS;AttachDbFilename=D:\Programs\C_SHARP\TermPaper1\TermPaper1\MyDataBase.mdf;Integrated Security=True;User Instance=True»;
В данном случае в строке соединения с базой данных указывается полный путь к файлу базы данных «MyDataBase.mdf».
Рис. 1. Копирование строки (ConnectionString) соединения с базой данных в программу
Приблизительный вид файла «Form1.cs» (язык программирования C#) может быть следующим:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace TermPaper1 { public partial class Form1 : Form { // строка соединения с базой данных string ConnStr = @»Data Source=.\SQLEXPRESS;AttachDbFilename=D:\Programs\C_SHARP\TermPaper1\TermPaper1\MyDataBase.mdf;Integrated Security=True;User Instance=True»; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } } }
2. Использование Connection String в программе. Пример
Пусть задана база данных, которая размещается в файле «MyDataBase.mdf». Пусть в базе данных есть таблица с именем Source, которая содержит следующие поля:
- ID_Source;
- Name;
- Address.
Пример 1. Нужно отобразить таблицу Source в элементе управления dataGridView1 типа DataGridView на основе такого SQL-запроса:
SELECT * FROM
Тогда функция, которая отображает таблицу, будет иметь приблизительно следующий вид:
private void FillSource() { string SqlText = «SELECT * FROM «; // текст SQL-запроса SqlDataAdapter da = new SqlDataAdapter(SqlText,ConnStr); DataSet ds = new DataSet(); da.Fill(ds,»»); dataGridView1.DataSource = ds.Tables»].DefaultView; }
В данной функции строка Connection String представлена переменной ConnStr.
Пример 2. Добавление новой записи к таблице Source на основе следующего SQL-запроса:
INSERT INTO (, , ) VALUES (1, ‘Source-01’, ‘Address-01’)”;
Фрагмент кода, который демонстрирует добавление новой записи:
string SqlText = «INSERT INTO (,,) VALUES (1, ‘Source-01′,’Address-01’) «; SqlConnection cn; // экземпляр класса типа SqlConnection SqlCommand cmd; // выделение памяти с инициализацией строкой соединения с базой данных cn = new SqlConnection(ConnStr); cn.Open(); // открыть источник данных // задать SQL-команду cmd = cn.CreateCommand(); cmd.CommandText = SqlText; // задать командную строку cmd.ExecuteNonQuery(); cn.Close();
В вышеприведенном примере переменная ConnStr есть строкой соединения с базой данных.
Связанные темы
- 001 — Пример создания/подключения локальной базы данных Microsoft SQL Server, которая размещается в «*.mdf»-файле
- 002 — Пример создания новой таблицы в локальной базе данных Microsoft SQL Server, размещенной в «*.mdf»-файле
- 003 — Создание поля автоинкремента (счетчика) в таблице базы данных Microsoft SQL Server, которая размещается в «*.mdf»-файле
- 004 — Создание связи (отношения) типа «один ко многим» между таблицами базы данных MS SQL Server
- 005 — Пример создания «*.mdf» файла локальной базы данных Microsoft SQL Server в Microsoft Visual Studio
- 001 — Пример создания локальной базы данных Microsoft SQL Server (SQLEXPRESS) в Microsoft Visual Studio
Получить учебные материалы по этому курсу
13.2 Объект ADO.Connection и коллекция Errors
Объект ADO.Connection, подключение к базе данных из VBScript, свойство ConnectionString, генерация строки подключения OLE DB при помощи файла UDL, обработка ошибок при подключении к базе данных, коллекция Errors
Создание объекта Connection производится очень просто. Например, чтобы подключиться к базе данных Northwind на сервере SQL Server с именем LONDON, можно использовать код вида
Dim cn
Set cn = CreateObject(«ADODB.Connection»)
cn.Provider = «SQLOLEDB»
cn.ConnectionString = «User ID=SA;Password=password;Data Source = LONDON1;» _
& «Initial Catalog = Northwind»
В принципе, этого вполне достаточно, чтобы создать работающий объект соединения (чтобы в этом убедиться, можно, например, выполнить команду Wscript.Echo cn.State до и после открытия). Однако есть смысл подробнее поговорить про различные свойства и методы этого объекта.
· свойство Provider определяет драйвер, который будет использован для подключения к базе данных. Обычно используются два типа драйверов для подключения — драйверы OLE DB и ODBC. Если есть возможность, необходимо использовать подключение по OLE DB — более современный способ, который работает намного быстрее. Свойство Provider необходимо указывать только при подключении по OLE DB, при подключении по ODBC все необходимые параметры передаются при помощи свойства ConnectionString. Значения свойств Provider для подключения к разным источникам данных могут выглядеть так:
o «Microsoft.Jet.OLEDB.4.0» — для подключений к файлам Access и Excel и другим источникам данных на основе Jet;
o «SQLOLEDB» — для подключений к SQL Server (как в примере)
o «MSDAORA.1» — для подключений к серверу Oracle;
o «ADsDSOObject» — для подключения к базе данных службы каталогов Windows.
· свойство ConnectionString — главное свойство объекта Connection. Оно определяет параметры подключения к источнику (его значение представляет из себя набор параметров, разделенных разделителем — точкой с запятой, порядок их значения не имеет). В нашем примере мы передали четыре значения параметра — User ID — идентификатор пользователя (это значит, что мы используем подключение SQL Server), Password — пароль password и Data Source — имя сервера баз данных, Initial Catalog — имя базы данных на этом сервере. Для передачи ConnectionString можно использовать и метод Open. Если бы использовали подключение Windows к SQL Server, код для подключения мог бы выглядеть так:
Dim cn
Set cn = CreateObject(«ADODB.Connection»)
При подключении к файлу Access или Excel строка подключения могла бы выглядеть так:
cn.Open «Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Борей.mdb»
Проще всего создать строку соединения при помощи файла UDL. Для этого нужно создать обычный текстовый файл, переименовать его так, чтобы его расширение выглядело как .udl (от user data link), щелкнуть два раза мышью и настроить параметры подключения. Потом можно открыть этот файл в блокноте и скопировать сгенерированную строку. Можно использовать в connection string и просто ссылку на созданный файл UDL:
cn.ConnectionString = «File Name = d:\mylink.udl»
Такой способ является более рекомендованным (особенно если файлы UDL находятся в скрытом сетевом каталоге, доступном только для чтения), поскольку обеспечивается возможность централизованного внесения изменений во все приложения, если источник данных переехал на другой сервер.
Для подключения по ODBC рекомендуется вначале создать источник данных ODBC (через Панель управления -> Источники данных (ODBC), а затем точно так же сгенерировать строку подключения при помощи файла UDL, выбрав драйвер Microsoft OLE DB Provider for ODBC Drivers.
· метод Open позволяет открыть соединение с базой данных (и проверить его работоспособность). В качестве параметра может принимать строку подключения, имя пользователя и пароль.
· метод Close позволяет закрыть соединение (объект соединения при этом из памяти не удаляется). Чтобы полностью избавиться от этого объекта, можно использовать код
Set cn = Nothing
или просто Set cn = Nothing — разрыв соединения произойдет автоматически.
Для этого объекта предусмотрено множество других свойств и методов, однако здесь они рассматриваться не будут (за дополнительной информацией можно обратиться к документации или учебным курсам Microsoft). Единственное свойство, которое обязательно необходимо рассмотреть — это свойство Errors, которое возвращает коллекцию объектов Error — ошибок. Ошибки при установке или работе соединения встречаются очень часто (неверно введен пароль или имя пользователя, у пользователя недостаточно прав на подключение, невозможно обратиться к компьютеру по сети и т.п.), поэтому настоятельно рекомендуется реализовывать в программе обработку ошибок. Самый простой вариант реализации обработчика ошибок может выглядеть так:
Dim cn
Set cn = CreateObject(«ADODB.Connection»)
cn.Provider = «SQLOLEDB»
cn.ConnectionString = «User ID=SA;Password=password;Data Source = LONDON1;» _
& «Initial Catalog = Northwind»
On Error GoTo CnErrorHandler
Exit Sub
For Each ADOErr In cn.Errors
Debug.Print ADOErr.Number
Debug.Print ADOErr.Description
End Sub
На практике перехватываются ошибки, характерные для данного подключения (нет файла Access, ошибка пароля или имени пользователя при подключении к SQL Server, нет прав, файл открыт в исключительном режиме и т.п.). и пользователю предлагается исправить ошибку.
Самые важные свойства объекта ADOError:
· Description — описание ошибки. Обычно наиболее важная информация содержится именно в описании.
· Number — номер ошибки. По номеру удобно производить поиск в базе знаний и в Интернет.
· Source — источник ошибки. Эта информация полезна только в том случае, если в коллекции Errors могут оказаться ошибки из разных источников.
· SQLState и NativeError — информация о возникшей ошибке, которая пришла с SQL-совместимого источника данных.