Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
7 / 7 / 5
Регистрация: 25.03.2018
Сообщений: 377

Не удаётся подключиться к базе данных

24.08.2022, 14:41. Показов 1270. Ответов 6

Студворк — интернет-сервис помощи студентам
Привет всем!
Вопрос следующий:
Я создал в Microsoft SQL Server 2019 Management Studio(Express) базу данных с именем MAINDB. Строка подключения = CINEKST\SQLEXPRESS.

Ну и написал я на C# следующий код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public ConnectionDataBase()
        {
            if (connection == null)
            {
                //connection = new SqlConnection(@"Data Source=" + DBLink + ";"
                //    + @"Initial Catalog=" + DBName + ";"
                //    + @"Integrated Security=True");
                connection = new SqlConnection(@"Data Source=CINEKST\SQLEXPRESS;Initial Catalog=MAINDB;Integrated Security=True");
            }
            if (connection.State == ConnectionState.Closed) _ = OpenConnectionAsync();
        }
 
        private async Task OpenConnectionAsync()
        {
            await connection.OpenAsync();
        }
Я посмотрел на статус, и увидел, что у меня бесконечно висит Connecting, хотя данные правильные. В чем может быть проблема?
В Management Studio CINEKST\SQLEXPRESS и БД = MAINDB, не могу понять, в чём проблема.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.08.2022, 14:41
Ответы с готовыми решениями:

Не удается подключиться к базе данных
public class DisplayActivity extends Activity { ListView list; LinearLayout ll; Button loadBtn; //private...

Не удаётся подключиться к базе данных
Дали задание создать сайт, соединить его с базой данных и все это на php, а я не в зуб ногой в php да и сайт создаю впервые. Отказаться от...

Не удается подключиться к базе данных MicrosoftSQLServer2008
Использую VS2012 и MicrosoftSqlServer2008. в проекте создаю обьект ADO.NET EDM, при подключении в поле подключении к существующей базе...

6
7 / 7 / 5
Регистрация: 25.03.2018
Сообщений: 377
24.08.2022, 16:37  [ТС]
Вот скрин, если нужно:
Миниатюры
Не удаётся подключиться к базе данных  
0
7 / 7 / 5
Регистрация: 25.03.2018
Сообщений: 377
24.08.2022, 17:21  [ТС]
Ещё, если сменить строку соединения на такую:
C#
1
connection.OpenAsync().Wait();
То всё соединяется, и соединение открытым становится. Почему с await не сработало?
0
 Аватар для Andrey-MSK
3349 / 2235 / 388
Регистрация: 14.08.2018
Сообщений: 7,557
Записей в блоге: 4
25.08.2022, 18:12
Лучший ответ Сообщение было отмечено cinekst_207 как решение

Решение

cinekst_207, По правильному соединение всегда открывается и закрывается именно там где надо
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public async Task<List<Country>> GetCountriesAsync()
{
    List<Country> countries = new List<Country>();
    string sqlText =
        "SELECT ID_HRDCountry, Country, IsForeigner " +
        "FROM dbo.tblHRDCountry " +
        "ORDER BY Country";
 
    try
    {
        using (SqlConnection sqlConnection = new SqlConnection(_connectionString))
        {
            await sqlConnection.OpenAsync();
 
            using (SqlCommand sqlCommand = new SqlCommand(sqlText, sqlConnection))
            {
                using (SqlDataReader sqlDataReader = await sqlCommand.ExecuteReaderAsync())
                {
                    if (sqlDataReader.HasRows)
                    {
                        while (await sqlDataReader.ReadAsync())
                        {
                            countries.Add(new Country
                            {
                                CountryID = (int)sqlDataReader["ID_HRDCountry"],
                                Name = (string)sqlDataReader["Country"],
                                IsForeigner = (int)sqlDataReader["IsForeigner"]
                            });
                        }
                    }
                }
            }
        }
 
        return countries;
    }
    catch (Exception ex)
    {
        throw new ApplicationException("Ошибка загрузки списка стран.", ex);
    }
}
И не надо создавать никаких методов открытия и закрытия соединений...
1
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
25.08.2022, 21:48
Цитата Сообщение от cinekst_207 Посмотреть сообщение
Почему с await не сработало?
Потому что вы не умеете с ним работать.
0
7 / 7 / 5
Регистрация: 25.03.2018
Сообщений: 377
26.08.2022, 13:51  [ТС]
Andrey-MSK, а если я решил через репозиторий делать?
У меня для каждой таблицы сделан репозиторий, например UsersTable - UsersRepository, FoodTable - FoodRepository и т.д.
Получается мне нужно в каждом репозитории подключение это сделать? Я просто хотел, чтобы оно было единственным, поэтому написал такой код, aka Singleton. А уже в методах репозиториев выглядит всё следующим образом:
C#
1
2
3
using (var connection = ConnectionDataBase()) {
// code
}
0
 Аватар для Andrey-MSK
3349 / 2235 / 388
Регистрация: 14.08.2018
Сообщений: 7,557
Записей в блоге: 4
26.08.2022, 13:59
cinekst_207, Делается так
C#
1
2
3
4
5
6
7
8
9
namespace DALibrary.Model
{
    public class Country
    {
        public int CountryID { get; set; }
        public string Name { get; set; }
        public int IsForeigner { get; set; }
    }
}
DataAccess
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Threading.Tasks;
 
using DALibrary.Base;
using DALibrary.Model;
 
namespace DALibrary.DataAccess
{
    public class CountryDA : BaseDA
    {
        public async Task<List<Country>> GetCountriesAsync()
        {
            List<Country> countries = new List<Country>();
            string sqlText =
                "SELECT ID_HRDCountry, Country, IsForeigner " +
                "FROM dbo.tblHRDCountry " +
                "ORDER BY Country";
 
            try
            {
                using (SqlConnection sqlConnection = new SqlConnection(_connectionString))
                {
                    await sqlConnection.OpenAsync();
 
                    using (SqlCommand sqlCommand = new SqlCommand(sqlText, sqlConnection))
                    {
                        using (SqlDataReader sqlDataReader = await sqlCommand.ExecuteReaderAsync())
                        {
                            if (sqlDataReader.HasRows)
                            {
                                while (await sqlDataReader.ReadAsync())
                                {
                                    countries.Add(new Country
                                    {
                                        CountryID = (int)sqlDataReader["ID_HRDCountry"],
                                        Name = (string)sqlDataReader["Country"],
                                        IsForeigner = (int)sqlDataReader["IsForeigner"]
                                    });
                                }
                            }
                        }
                    }
                }
 
                return countries;
            }
            catch (Exception ex)
            {
                throw new ApplicationException("Ошибка загрузки списка стран.", ex);
            }
        }
    }
}
Точка входа в сборку с репозиториями
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
using DALibrary.DataAccess;
 
namespace DALibrary.Interfaces
{
    public interface IMainDA
    {
        EmployeeDA EmployeeDA { get; }
        EObjectDA EObjectDA { get; }
        CountryDA CountryDA { get; }
        ExcelDA ExcelDA { get; }
        EducationDA EducationDA { get; }
        TicketDA TicketDA { get; }
        QuarantineDA QuarantineDA { get; }
        PCRTestDA PCRTestDA { get; }
        AccommodationDA AccommodationDA { get; }
    }
}
 
using DALibrary.DataAccess;
using DALibrary.Interfaces;
 
namespace DALibrary
{
    public class MainDA : IMainDA
    {
        public EmployeeDA EmployeeDA { get; }
        public EObjectDA EObjectDA { get; }
        public CountryDA CountryDA { get; }
        public ExcelDA ExcelDA { get; }
        public EducationDA EducationDA { get; }
        public TicketDA TicketDA { get; }
        public QuarantineDA QuarantineDA { get; }
        public PCRTestDA PCRTestDA { get; }
        public AccommodationDA AccommodationDA { get; }
 
        public MainDA()
        {
            EmployeeDA = new EmployeeDA();
            EObjectDA = new EObjectDA();
            CountryDA = new CountryDA();
            ExcelDA = new ExcelDA();
            EducationDA = new EducationDA();
            TicketDA = new TicketDA();
            QuarantineDA = new QuarantineDA();
            PCRTestDA = new PCRTestDA();
            AccommodationDA = new AccommodationDA();
        }
    }
}
И вот MainDA уже и делается синглтоном и через него запускается что надо
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
private readonly IMainDA _mainDA;
 
// ...
 
// В конструкторе класса получаем ссылку на репозиторий
// В моём случае через DI
public EditEmployeeDialogVM(IWindowService windowService,
                            IMainDA mainDA,
                            IBackgroundTaskQueue taskQueue)
{
    _windowService = windowService;
    _mainDA = mainDA;
    _taskQueue = taskQueue;
 
    BindingOperations.EnableCollectionSynchronization(Countries, _countriesLock);
    BindingOperations.EnableCollectionSynchronization(Positions, _positionsLock);
 
    _taskQueue.QueueBackgroundWorkItem(() => LoadDataAsync());
}
 
// ...
 
private async Task LoadDataAsync()
{
    try
    {
        // Вот тут и вызываем MainDA с методом из CountryDA
        List<Country> countries = await _mainDA.CountryDA.GetCountriesAsync();
 
        lock (_countriesLock)
        {
            if (Countries.Count > 0)
            {
                Countries.Clear();
            }
 
            if (countries.Count > 0)
            {
                countries.ForEach(c => Countries.Add(c));
            }
        }
 
        List<string> strings = await _mainDA.EmployeeDA.GetPositionsAsync();
 
        lock (_positionsLock)
        {
            if (Positions.Count > 0)
            {
                Positions.Clear();
            }
 
            if (strings.Count > 0)
            {
                strings.ForEach(s => Positions.Add(s));
            }
        }
    }
    catch (Exception ex)
    {
        _windowService.ShowErrorMessage(ex.ToString(), "Ошибка");
    }
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.08.2022, 13:59
Помогаю со студенческими работами здесь

Не удается удаленно подключиться к базе данных
База данных расположена на удаленном сервере под управлением Windows Server 2008. Клиент находится на Windows 10. tnsnames.ora ...

Не удается подключиться к базе данных в SQL Developer
Кто знает, как это сделать? Скриншот, введенные на нем данные и ошибка слева внизу говорят сами за себя.

Не удаётся подключиться к базе данных и выполнить запрос
Доброго времени суток всем участникам форума. Надо подключиться к базе данных и достать из неё данные. Использую вот этот код: ...

Не удается подключиться к базе данных oracle в приложении C#
Выдает ошибку : Дополнительные сведения: Произошли ошибки во время выполнения многошаговой операции OLE DB. По возможности, проверьте...

Как подключиться к базе данных на Wpf. База данных Sql Server
Раньше работал с Windows Worms, и то не долго. Щас хочу перейти на WPF. Я в этом деле еще новичок. Не могли бы вы объяснить как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru