c# - Entity Framework SQL 查询不使用 SQL 参数

标签 c# sql entity-framework sql-parametrized-query

我有一个原始 SQL 查询,我正在尝试与 SqlParameters 一起使用。当我不安全地创建查询(使用字符串连接)时,它工作正常......我得到了结果。在这种情况下,我得到 10。

当我尝试使用 SQL 参数时,我得到零记录。我尝试创建带有和不带有 @ 的参数,我尝试在调用 Query 时单独添加它们,并且我尝试过对象参数而不是 Sql 参数。我什至尝试过只使用一个....无论我做什么,我似乎都无法使用 SQL 参数获得结果,只能使用字符串连接。

Entity Framework SQL 查询如何与 SQL 参数一起使用,为什么我使用的查询不起作用?

示例代码:

string query = "WITH OrderedItems AS " +
               "(" +
               "SELECT *, " +
               "ROW_NUMBER() OVER (ORDER BY @p0) AS 'RowNumber' " +
               "FROM ITEMS" +
               " WHERE item_name LIKE '%@p1%'" +
               ")" +
               "SELECT * FROM OrderedItems" +
               " WHERE RowNumber BETWEEN " + (skip + 1) + " AND " + (skip + take);

// I have tried using @p0 and @p1 as the parameter names here
var parameters = new object[] {new SqlParameter("p0", orderBy), new SqlParameter("p1", model.item_name)};

var context = new DbEntities();
// I have tried only using one and passing it too
List<item> result = context.items.SqlQuery(query, parameters).ToList();

最佳答案

我认为问题在于您尝试使用 LIKE 的方式带有 p1 的子句:

参数化将负责引用这些值。您不应该在参数周围提供引号。

尝试将其修改为:

string query = "WITH OrderedItems AS " +
               "(" +
               "SELECT *, " +
               "ROW_NUMBER() OVER (ORDER BY @p0) AS 'RowNumber' " +
               "FROM ITEMS" +
               " WHERE item_name LIKE @p1" +
               ")" +
               "SELECT * FROM OrderedItems" +
               " WHERE RowNumber BETWEEN " + (skip + 1) + " AND " + (skip + take);

var parameters = new object[] {new SqlParameter("p0", orderBy), new SqlParameter("p1", "%" + model.item_name + "%")};

关于c# - Entity Framework SQL 查询不使用 SQL 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25390452/

相关文章:

c# - 将 IAuthorizationFilter 与 Ninject 和 EF 一起使用会给出 DbContext has been disposed 错误

c# - C# 中的地理定位

c# - 如何在 C# 中获取像 IDM Grabber 这样的特殊网站的文件和文件夹

MySQL:难以理解 GROUP BY

entity-framework - EF4 如何在 LINQ 中将匿名类型转换为强类型

asp.net - EntityDataSource:TotalRowCount 返回 -1。那是什么?

c# - 压缩目录并上传到 FTP 服务器,而无需在 C# 中本地保存 .zip 文件

c# - 如何仅保存图片框中显示的图像

sql - 更改 Django 查询中的字段名称

mysql - 如何仅针对 mySQL Select 上的特定键将实际值与上述行值相加