繁体   English   中英

实体框架:2.2 版本中将字符串参数传递给 FromSql 语句

[英]Entity Framework: Passing String Parameter to FromSql Statement in Version 2.2

我正在尝试将字符串参数传递给 SQL 查询,接收错误如下。 我该如何解决这个问题? 当前使用答案EF Core 2.2,将字符串参数传递给 FromSql 语句

输入字符串的格式不正确。

public async Task<IEnumerable<Product>> GetProduct(string productKey)
{
    var productParameter = new SqlParameter("@productKey", SqlDbType.VarChar);
    productParameter.Value = productKey;

    var productIdList = db.TestDb
        .FromSql($"select ProductId from dbo.Product product" +
            "   (where product.ProductKey = {productParameter})" )
            .Select(c => c.ProductId).ToList();

它是 ProductKey 中的 varchar(6) 类型

使用网络核心 2.2

如果您使用FromSql ,您应该像这样构建代码以正确应用 SqlParameter:

var productIdList = db.TestDb
    .FromSql($"select ProductId from dbo.Product product where product.ProductKey = @productKey",productParameter )
    .Select(c => c.ProductId).ToList();

根据您使用的 EF 版本,您还可以使用FromSqlInterpolated而不是FromSql并取消 SqlParameter altoghter。

1)查询不正确:您没有 FROM 语句,这是必需的。 我想你想要类似的东西

select productKey 
from dbo.Product product 
where product.Product = <paramName>

2) 使用 FromSQL 时:在查询字符串中,您必须输入参数的名称,而不是实例。 所以将{productParameter}更改为@productKey

3) 将 SqlParameter 实例作为第二个参数传递给 FromSql 方法。

var productParameter = new SqlParameter("@productKey", SqlDbType.VarChar);
productParameter.Value = productNumber;     

var product= db.Tra
    .FromSql($@"
        select productKey 
        from dbo.Product product 
        where product.ProductKey = {productParameter.Name}", productParameter);

这可能会奏效:

var productParameter = new SqlParameter("@productKey", productKey);

var productIdList = db.TestDb
    .FromSql("select ProductId from dbo.Product where ProductKey = @productParameter",productParameter )
    .ToList();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM