【问题标题】:Passing parameter to .fromsql将参数传递给 .fromsql
【发布时间】:2019-03-13 22:11:45
【问题描述】:

我无法解决这个问题,我感到很沮丧。我想对数据库中的人进行基本搜索,以下工作正常

 IQueryable<VwSomeView> dbresult = db.vwSomeView.FromSql("select * from vwSomeView where firstname like '%" + searchfor + "%' or lastname like '%" + searchfor + "%'");

但这很糟糕,因为可能存在 SQL 注入。所以我尝试了这个(因为我在调用存储过程之前使用它并且它工作正常)

IQueryable<VwSomeView> dbresult = db.vwSomeView.FromSql("select * from vwSomeView where firstname like '%{0]%' or lastname like '%{0}%'",searchfor);

wich 不工作。我用 SqlParameter

试过了
SqlParameter para = new SqlParameter("search", searchfor);
IQueryable<VwSomeView> dbresult = db.vwSomeView.FromSql("select * from vwSomeView where firstname like '%@search%' or lastname like '%@search%'",para);

这也不行。

有人可以告诉我我做错了什么吗? 谢谢

【问题讨论】:

  • 我可以看到你已经典型化了表类......为什么你没有使用 Linq 逻辑?
  • IQueryable dbresult = db.vwSomeView.FromSql("select * from vwSomeView where firstname like '%{search}%' or lastname like '%{search}%'",para); . . .试试这个,它可能会工作。 @莫蒂
  • @MarcoDalZovo 因为我没有经常使用 Linq,但我根本没想到

标签: c# entity-framework sql-like


【解决方案1】:

当然,我在发布问题后仅 10 分钟就知道了。 这是有效的

DbParameter para = new SqlParameter("search", "%"+searchfor+"%");
IQueryable<VwSomeView> dbresult = db.vwSomeView.FromSql($"select * from vwSomeView where firstname like @search or lastname like @search",para);

【讨论】:

    【解决方案2】:

    在 SQL 中使用 @search 作为变量(而不是在字符串中),它应该可以工作。

    SqlParameter para = new SqlParameter("search", "%" + searchfor + "%");
    IQueryable<VwSomeView> dbresult = db.vwSomeView.FromSql("select * from vwSomeView where firstname like @search or lastname like @search",para);
    

    【讨论】:

    • 今天的互联网参差不齐,所以在我发布我的帖子后我没有得到你的答案。谢谢
    猜你喜欢
    • 1970-01-01
    • 2020-10-09
    • 2019-09-27
    • 1970-01-01
    • 1970-01-01
    • 2013-01-27
    • 2013-11-19
    • 2011-01-06
    相关资源
    最近更新 更多