0

我正在尝试解决使用 DataContext.ExecuteQuery 执行 sql 语句的 ASP.NET 应用程序中的问题。查询有这部分:

LEFT OUTER JOIN dbo.Contacts ON dbo.Accounts.SalesRepId = dbo.Contacts.ContactId WHERE " + string.Join(" AND ", whereClauses) + @"

其中“whereClauses”是一个字符串列表。这样,在查询中实现了搜索功能。当对像“O'Donnel”这样的字符串运行开放式搜索时会出现问题,这显然会使查询出错。我被要求解决这个问题。我的方法是在查询中将 where 语句替换为“{0}”,然后将其作为参数传递给 ExecuteQuery 方法。我取得的是:

LEFT OUTER JOIN dbo.Contacts ON dbo.Accounts.SalesRepId = dbo.Contacts.ContactId {0}

var where = "WHERE 1=1";
_db.ExecuteQuery<AccountModel>(query, where)

但它不起作用?当我用一个参数替换整个 where 部分时,一切都很好:

LEFT OUTER JOIN dbo.Contacts ON dbo.Accounts.SalesRepId = dbo.Contacts.ContactId WHERE 1={0}

var where = "1";
_db.ExecuteQuery<AccountModel>(query, where)

我的问题 - 那么是否可以将整个 where 语句动态注入 DataContext.ExecuteQuery 方法,或者我可以只使用此方法传递特定参数吗?

4

1 回答 1

0

这是该方法的帮助页面ExecuteQuery

您不能将整个where 子句作为参数传递,因为类似的查询select * from myTable @param不是有效的 SQL,而是select * from myTable where myField = @param 有效的SQL。

因此,在回答您的具体问题时 - 不,您不能通过将参数传递给ExecuteQuery.

但是,为什么不在将查询传递给之前在代码中构建查询ExecuteQuery呢?

例如

var query = "select * from myTable where 1=1" + string.Join(" AND ", whereClauses);
var result = _db.ExecuteQuery<AccountModel>(query);
于 2014-02-12T09:27:40.683 回答