【问题标题】:How to use a SQL output parameter with FromSqlInterpolated? Or alternative如何将 SQL 输出参数与 FromSqlInterpolated 一起使用?或替代
【发布时间】:2019-11-05 03:45:29
【问题描述】:

使用 ASP.Net 核心 3.0。我的数据库查询有效 - 我可以获得结果集(记录),但如何传递/获取输出参数?也想知道有没有办法获取返回值。

我尝试使用不同的方法来调用 SQL 查询,我唯一能够使用的方法是 FromSqlInterpolated,但可以使用不同的方法。

此代码适用于我,但我想传递一个可以作为输出参数填充的附加参数(当我通过从 SQL Server 中调用存储的过程来测试它时它正在工作)。

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

我尝试在调用之前创建一个变量

string out1 = null;

然后将其包含在调用中,但我无法弄清楚语法,我不确定此方法是否支持它。

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

希望有人能指出我正确的方向 - 想知道如何使用输出参数以及如何获取返回值,而不仅仅是记录集。谢谢。

【问题讨论】:

    标签: sql-server .net-core asp.net-core-3.0


    【解决方案1】:

    接受的答案似乎对我不起作用。 但是,我终于设法通过使用以下代码使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 value 属性只有在请求被执行时才会改变(通过AsEnumerableLoad() 或任何强制执行 Sql 的东西)

    【讨论】:

    • 实际上,尽管它们都可以编译和运行,但我无法让任何一种解决方案发挥作用。使用 Roman 的解决方案,我在 Console.WriteLine(out1) 的控制台上一无所获。使用 nmariot 的解决方案,如果我使用 Console.WriteLine(p1),那么我会在控制台中看到 @out1。
    • 好的,它工作了 - @nmariot 你的解决方案对我有用。但我不得不使用 Console.WriteLine(p1.Value);
    • @user2026318 你是对的:我修改了我的代码以帮助理解返回值在哪里
    • 请求是针对 FromSqlInterpolated 而不是 FromSql,因为 FromSql 从 .net3.0 开始已被弃用
    • @Oduwole Oluwasegun 不幸的是,我没有找到任何方法将 Sql 输出参数与 FromSqlInterpolated 一起使用。这就是为什么我提出一个解决方案来确定使用 FromSqlRaw 获取输出参数的值,它很容易使用,而不是 FromSqlInterpolated。此外,操作人员还要求提供替代方案...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-08
    • 2021-12-02
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多