【发布时间】:2011-02-23 10:18:43
【问题描述】:
这是我的代码:
command.CommandText =
"SELECT DISTINCT B.* FROM BlankFormSubmissions B, Actions A WHERE B.FormName = " +
GenericRoutines.SqlFmt(form.Name) +
" AND B.ProcessName = A.ProcessName AND B.ActionName = A.ActionName" +
" ORDER BY B.ID";
OleDbDataReader reader = command.ExecuteReader();
SQL 是:
SELECT DISTINCT B.*
FROM BlankFormSubmissions B, Actions A
WHERE B.FormName = 'FindingNemo'
AND B.ProcessName = A.ProcessName
AND B.ActionName = A.ActionName
ORDER BY B.ID
【问题讨论】:
-
使用 参数化 查询而不是将 SQL 语句连接在一起 - 帮助avoid SQL injection attacks.....
-
您好,如果您只使用命令文本,它是如何工作的:“SELECT DISTINCT B.* FROM BlankFormSubmissions B, Actions A”?
-
当您使用它时 - 尝试使用带有
INNER JOIN .... ON .....子句的更新的标准化 ANSI JOIN 语法 - 有助于避免不需要的笛卡尔积,并且更易于阅读和理解。 . -
谢谢大家,但是这段代码完全可以防止任何你看不到的方法的攻击,GenericRoutines.SqlFmt(...)
-
@Lost Hobbit - 如果这是真的,我会喜欢看看 SqlFmt。