powered by simpleCommunicator - 2.0.27     © 2024 Programmizd 02
Map
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / async / await SQL DataReader
6 сообщений из 6, страница 1 из 1
async / await SQL DataReader
    #40066497
Фотография unq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
привет коллеги... вопрос как не получить DataReader is already open
есть синхронный проект со своей оберткой синхронного ридера. Хотел (видимо это была моя ошибка) добавить асинхронности. Думал что если не весь проект асинхронный то пусть хотя бы часть его не будет так нагружать UI. Часть переписал, все отрабатывает но один раз)) и в итоге ловлю ошибку:
авторThere is already an open DataReader associated with this Command which must be closed first.

ExecuteAsync и прочие прелести не доступны. Есть только синхронный интерфейс для взаимодействия с базой IDbScope.

как пробовал оборачивать:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
public static async Task<RbCurrency> GetCurrencyInfo(IDbScope dbScope, Guid currencyId)
        {
            RbCurrency currency;
            using (dbScope.Create())
            {
                var db = dbScope.Db;

                currency = await Task.Factory.StartNew(() =>
                {
                    return db.SetCommand(
                            @"SELECT TOP 1 rbc.[ID], rbc.[Name], rbc.[Caption], rbc.[ExchangeRate], rbc.[Multiplicity], rbc.[Decinations]
                        FROM RbCurrencies rbc with(nolock)
                        WHERE rbc.[ID] = @currencyId",
                            db.Parameter("currencyId", currencyId))
                        .ExecuteObject<RbCurrency>();
                });
                return currency;
            }
        }



пробовал оборачивать по-разному, но все равно ловлю ошибку. Что делаю не так и есть ли варианты? Заранее спс!
...
Рейтинг: 0 / 0
async / await SQL DataReader
    #40066506
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unq,
пи синхронном использовании ошибки нет?
...
Рейтинг: 0 / 0
async / await SQL DataReader
    #40066507
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unq
ExecuteAsync и прочие прелести не доступны. Есть только синхронный интерфейс для взаимодействия с базой IDbScope.

Такая херь называется " инверсия абстракции " - то к чему почти всегда приводит творческое рукоблудие по изобретению своих мегафреймворков поверх и так вполне нормальных существующих.

Врят ли этот ваш творческий IDbScope thread-safe, так что такой код, как у тебя, по сути своей неправильный, т.ч. забей.
...
Рейтинг: 0 / 0
async / await SQL DataReader
    #40066512
Фотография unq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,

угасла моя последняя надежда.

Спасибо!
...
Рейтинг: 0 / 0
async / await SQL DataReader
    #40066514
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unq
fkthat,
угасла моя последняя надежда.
Спасибо!

Можно попробовать включить MARS в настройках connection string. Но, опять-таки пока нет гарантии, что вызовы IDbScope потокобезопасные, можно ожидать чего угодно. Кстати, сам метод GetCurrencyInfo статический, т.е. сам по себе должен быть thread-safe, что, похоже, совсем не выполняется. В общем весь этот код это одна сплошная ошибка дизайна.
...
Рейтинг: 0 / 0
async / await SQL DataReader
    #40068065
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>unq, 27 апр 21, 21:06 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1335684&msg=22315341][22315341]
>пробовал оборачивать по-разному...
<
Посмотрите здесь
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / async / await SQL DataReader
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (0):
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]