Как использовать выходной параметр SQL с FromSqlInterpolated? Или альтернатива - PullRequest
2 голосов
/ 30 октября 2019

Использование ASP.Net core 3.0. мой запрос к базе данных работает - я могу получить набор результатов (записей), но как передать / получить выходной параметр? Также хотелось бы узнать, есть ли способ получить возвращаемое значение.

Я пытался использовать разные способы вызова SQL-запроса, и единственный, который мне удалось получить, был FromSqlInterpolated, но открытый для разных методов.

Этот код работает для меня, но я хочу передать дополнительный параметр, который можно заполнить в качестве выходного параметра (который работает, когда я проверяю его, вызывая хранимый процесс из SQL Server).

var result = _context.Users
        .FromSqlInterpolated($"EXEC mystoredproc  {user.Username} ").AsEnumerable().FirstOrDefault();

Я пытался создать переменную перед вызовом

string out1 = null;

И затем включить это в вызов, но я не могу понять синтаксис, и я не уверен, поддерживается ли он этимmethod.

var result = _context.Users
        .FromSqlInterpolated($"EXEC mystoredproc  {user.Username},  OUTPUT {out1}").AsEnumerable().FirstOrDefault();
Console.WriteLine(out1);

Надеясь, что кто-то может указать мне правильное направление - хотел бы знать, как использовать выходной параметр и как получить возвращаемое значение, а не только набор записей. Спасибо.

1 Ответ

0 голосов
/ 31 октября 2019

Принятый ответ, похоже, не работает для меня. Однако мне, наконец, удается заставить работать параметр OUTPUT с помощью следующего кода

 var p0 = new SqlParameter("@userName", {user.Username});
 var p1 = new SqlParameter("@out1", System.Data.SqlDbType.NVarChar, 20) { Direction = System.Data.ParameterDirection.Output };

 string out1 = null;
 var result = _context.Users
    .FromSqlRaw($"EXEC mystoredproc  @userName, @out1 OUTPUT ", p0, p1).AsEnumerable().FirstOrDefault();

 Console.WriteLine(p1.Value); // Contains the new value of the p1 parameter

Просто предупреждение, свойство значения p1 будет изменено только тогда, когда запрос будет выполнен (AsEnumerable, Load() или что-нибудь, что вызывает выполнение Sql)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...