Подключение к sql-серверу и асинхронность
Если вы создаете программы для windows в Visual Studio (windows forms, .NET, CLI) то практически совершенно неважно, на каком это происходит языке программирования: C++ или C# - отличия будут только в синтаксисе. Вот, например, одна из моих предыдущих статей по работе с базами данных на C++ - практически один в один её можно скопировать для C#, только чуток кода подредактировать. Именно поэтому я не буду заниматься такими вещами, а освещу пару новых моментов, нюансов, так сказать.
Проблемы подключения к серверу SQL
Начнём со строки подключения:
string connectionString = @"Data Source=(localdb)\MSSQLLocalDB;AttachDbFilename='D:\Новая папка\Ежедневник\WindowsFormsApp1\WindowsFormsApp1\Database1.mdf';Integrated Security=True";Обратите внимание на знак собаки перед переменной – это необходимо, чтобы не ставить двойные слеши. Кроме этого, в разных версиях визуал студио могут быть разные встроенные версии серверов. Например, в моей 2015 Enterprise - (localdb)\MSSQLLocalDB. Могут быть и другие:
- (localdb)\V11.0
- (local)\SQLEXPRESS
Асинхронные запросы к базе C#
Это первый момент. Второй момент – асинхронные запросы. Честно говоря, я не знаю, зачем в учебной программе, рассчитанной на одного пользователя, использовать асинхронные подключения и запросы к базе данных, но, если требует преподаватель – значит, так и сделаем.
Чтобы работать асинхронно, для начала перед названием метода добавьте ключевое слово async:
private async void Контакты_Load(object sender, EventArgs e) { string connectionString = @"Data Source=(localdb)\MSSQLLocalDB;AttachDbFilename='D:\Новая папка\Ежедневник\WindowsFormsApp1\WindowsFormsApp1\Database1.mdf';Integrated Security=True"; sqlConnection = new SqlConnection(connectionString);Далее мы не просто открываем соединение, а с помощью метода OpenAsync:
await sqlConnection.OpenAsync(); SqlDataReader sqlReader = null; SqlCommand command = new SqlCommand("SELECT * FROM [contacts]", sqlConnection);Читаем также асинхронно:
try { sqlReader = await command.ExecuteReaderAsync(); while (await sqlReader.ReadAsync()) { listBox1.Items.Add(Convert.ToString(sqlReader ["Id"]); } } catch (Exception ex) { MessageBox.Show(ex.Message.ToString(), ex.Source.ToString(), MessageBoxButtons.OK, MessageBoxIcon.Error); }Не забываем закрыть соединение:
finally { if (sqlReader != null) sqlReader.Close(); } }Если вам нужна помощь по базам данных, то вы всегда можете написать мне. За небольшую плату вам будет оказана быстрая и квалифицированная помощь.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.