Я хочу получить одну базу данных SQL строка - PullRequest
1 голос
/ 14 февраля 2020

У меня есть небольшая проблема с этим:

readonly LoginMandant logon = new LoginMandant();
string query = "SELECT Name FROM tMandant WHERE Id_Mandant = " + userDetails.Id_Mandant + ";";

Session["MandantName"] = logon.Database.SqlQuery<string>(query).SingleOrDefaultAsync();

и он возвращает:

System.Threading.Tasks.Task`1[System.String]

Но почему? Я хотел, чтобы там была одна строка типа «test».

Ответы [ 3 ]

2 голосов
/ 14 февраля 2020

вам нужно await операций, похожих на задачи, то есть

Session["MandantName"] = await logon.Database.SqlQuery<string>(query).SingleOrDefaultAsync();

однако для этого требуется, чтобы ваш код был async; если это не так, либо сделайте его async (но не async void), либо найдите синхронную версию API.

Вам следует , вероятно, посмотреть на параметры тоже; код, как показано, активно опасен.

1 голос
/ 14 февраля 2020

Поскольку вы используете SingleOrDefaultAsyn c, он вернет объект задачи.

, вам следует использовать SingleOrDefault () вместо asyn c, если вы хотите получить строку из базы данных синхронно.

ниже должно работать в вашем случае:

Session["MandantName"] = logon.Database.SqlQuery<string>(query).SingleOrDefault();
0 голосов
/ 14 февраля 2020

Asyn c потребует от вас ожидания.

Session["MandantName"] = await logon.Database.SqlQuery<string>(query).SingleOrDefaultAsync();

Однако вызывающим методом также должен быть asyn c (и его вызов вызывающей стороны ожидает, и так далее). Я настоятельно рекомендую это , однако, если у вас действительно мало времени, вы можете выполнить SingleOrDefaultAsyn c (). Результат или просто вызвать SingleOrDefault (), однако он будет блокировать выполнение до тех пор, пока запрос к базе данных завершен.

ВАЖНО: Избегайте конкатенации строк для строки запроса. Вы рискуете SQL инъекция.

...