На нашем сайте мы используем cookie для сбора информации технического характера и обрабатываем IP-адрес вашего местоположения. Продолжая использовать этот сайт, вы даете согласие на использование файлов cookies. Здесь вы можете узнать, как мы пользуемся файлами cookies.
Я согласен
логотип upread.ru

Подключение к 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 - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегизаметки, базы данных, си шарп, sql





Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.



SSR, стоит ли вам его использовать?
C#: объединение текстовых файлов с одинаковыми именами из разных папок


© upread.ru 2013-2023
При перепечатке активная ссылка на сайт обязательна.
Задать вопрос
письмо
Здравствуйте! Вы можете задать мне любой вопрос. Если не получается отправить сообщение через эту форму, то пишите на почу up777up@yandex.ru
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.