【问题标题】:How to get single string result from stored procedure in .NET Core 3.0如何从 .NET Core 3.0 中的存储过程中获取单个字符串结果
【发布时间】:2021-04-01 07:50:25
【问题描述】:

我有一个存储过程,它根据条件返回一个字符串值,它有 4 个参数。我在执行存储过程和检索结果方面面临挑战。

我到处都能找到从同一模型的插入查询返回结果的地方。请分享您对此的建议。

这是我的存储过程:

CREATE PROCEDURE [dbo].[sp_test]
    (@param1 INT, 
     @param2 NVARCHAR(100),
     @param3 INT,
     @param4 NVARCHAR(50))   
AS
BEGIN
    IF (@param1 = '')
    BEGIN
        SELECT 'ok' AS output
    END
    ELSE 
        SELECT 'not ok' AS output
END

请建议如何使用 Entity Framework Core 3.0 DbContext 获取此查询结果。

我尝试使用.FromSqlRaw时遇到的错误:

FromSqlRaw 或 FromSqlInterpolated 是使用不可组合的 SQL 调用的,并且查询在其上进行组合。考虑在 FromSqlRaw 或 FromSqlInterpolated 方法之后调用 AsEnumerable 在客户端执行合成。

【问题讨论】:

  • 旁注:您应该为您的存储过程使用sp_ 前缀。微软有reserved that prefix for its own use (see Naming Stored Procedures),你确实会在未来某个时候冒着名称冲突的风险。 It's also bad for your stored procedure performance。最好只是简单地避免sp_ 并使用其他东西作为前缀 - 或者根本不使用前缀!
  • IgnoreQueryFilters() 确实解决了这个问题。但是在不使用实体的情况下,可以在 Entity Frameowrk CORE 3.0 中获取存储过程结果到字符串??
  • 您能否展示一下您是如何尝试使用 .FromSqlRaw 的?

标签: sql-server stored-procedures entity-framework-core


【解决方案1】:

改写为:

CREATE PROCEDURE [dbo].[sp_test](@param1 INT,@param2 NVARCHAR(100),@param3 INT,@param4 NVARCHAR(50), @STR_OUT NVARCHAR(256) OUTPUT)     
AS

BEGIN

    IF (@param1='')
    BEGIN
        SET @STR_OUT ='ok';
    END
    else
        SET @STR_OUT = 'not ok';

并读取最后一个参数的OUTPUT值。

【讨论】:

  • 我想知道如何使用 DB CONTEXT 检索它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-18
  • 2023-03-28
  • 1970-01-01
相关资源
最近更新 更多