【发布时间】:2017-10-16 07:52:35
【问题描述】:
我想构建一个表名是动态的查询,我将从另一个查询中获取它。这 2 个查询位于不同的数据上下文中。
代码
var tablename = (from tab in db.Tabs
where tab.id == tabid
select tab.name).FirstOrDefault();
var pid = (from p in tablename
select p.id).FirstOrDefault();
【问题讨论】:
-
在这种情况下,您必须自己编写 SQL 语句。但是您应该使用
SqlCommand类及其Parameters属性来避免注入攻击。 -
@Oliver 我该怎么做?
-
在第二个查询中,您所做的是查询一个字符串,而不是表本身。显然,这不会产生你想要的结果。如果您编写自己的 sql 语句,请注意您无法在 sql 中参数化标识符,因此您必须在 c# 代码中创建查询文本(将 sql 注入的风险降至最低,因为您不涉及用户输入),或者创建一个在内部使用动态 sql 的存储过程(您有更好的机会保护自己免受 sql 注入攻击)。