dbcontext.Database.ExecuteSqlRaw 无法返回字符串

问题描述 投票:0回答:1

尝试从 Blazor App= Entity Framework 中的 MS Sql Server 存储过程返回字符串。

这是another GitHub post

的后续

in-ap代码是


    string outList = "";

   var xparams = new SqlParameter[]{
    new SqlParameter("@Start", 10),
    new SqlParameter("@End", 20),
    new SqlParameter("@output",outList) {Direction = ParameterDirection.Output }
    };

    _context.Database.ExecuteSqlRaw("exec GetMe  @Start, @End, @output output", xparams);
    var ReturnValue = ((SqlParameter)xparams[2]).Value;

问题是返回值只有第一个字符。 SP参数是:


@Start int ,
@End int,
@output varchar(50) output

作业是:


Select @output = 'This is some text';
Return

  • 如果我使用 Set 而不是 Select,结果是一样的。
  • 如果我使用标量类型,int、float、real、date,则返回值是正确的。
  • 如果我将字符串初始化为非空白,结果仍然相同。
  • SP在SSMS中运行正常

我猜这与多维数据有关。

c# sql sql-server entity-framework
1个回答
1
投票

您可以通过更改 SqlParameter 输出并添加数据类型 SqlDbType.NVarChar 或 SqlDbType.VarChar 来解决问题

正确的代码

var xparams = new SqlParameter[]{
            new SqlParameter("@Start", 10),
            new SqlParameter("@End", 20),
            new SqlParameter("@output",SqlDbType.NVarChar, 4000) {Direction = ParameterDirection.Output }
            };


SchoolContext _context = new SchoolContext();

_context.Database.ExecuteSqlRaw("exec GetMe  @Start, @End, @output output", xparams);
var ReturnValue = ((SqlParameter)xparams[2]).Value;

SqlParameter 有 7 个构造函数

你使用构造函数编号 1

您必须使用 2 号或 3 号构造函数

1.SqlParameter(string parameterName, object value)
2.SqlParameter(string parameterName, SqlDbType dbType, int size)
3.SqlParameter(string parameterName, SqlDbType dbType)
4.SqlParameter()
5.SqlParameter(string parameterName, SqlDbType dbType, int size, ParameterDirection direction, bool isNullable, byte precision, byte scale, string sourceColumn, DataRowVersion sourceVersion, object value)
6.SqlParameter(string parameterName, SqlDbType dbType, int size, ParameterDirection direction, byte precision, byte scale, string sourceColumn, DataRowVersion sourceVersion, bool sourceColumnNullMapping, object value, string xmlSchemaCollectionDatabase, string xmlSchemaCollectionOwningSchema, string xmlSchemaCollectionName)
7.SqlParameter(string parameterName, SqlDbType dbType, int size, string sourceColumn)
© www.soinside.com 2019 - 2024. All rights reserved.