10

我正在尝试为 EF 4 中的 Oracle 同义词(非实体)参数化原始 SQL 查询,但遇到了一些问题。目前,根据我看到的一些示例,我正在做类似下面的代码:

 string term="foo";
 OracleParameter p = new OracleParameter("@param1", term);
 object[] parameters = new object[] { p };
 var model = db.Database.SqlQuery<ProjectTask>("SELECT * FROM (SELECT * FROM web_project_task_vw WHERE project_num like '%@param1%') WHERE rownum<=100", parameters).ToList();

运行它不会返回任何结果。如果我用类似的东西替换参数

"SELECT * FROM web_project_task_vw WHERE project_num like '%"+term+"%'"

它返回我期望的结果,但这显然是一个 SQL 注入风险。

谁能指出我应该如何在 EF 4 中为 Oracle DB 工作的参数的正确方向?

谢谢。

4

2 回答 2

8

首先,就像 Mohammed 所写的那样,您需要在参数前面加上 ':',但不是按照您的定义,只是在查询中。其次,您当前搜索的不是参数的值,而是包含字符串的字符串@param1。所以用 % 包围参数的值,你应该得到一个结果。

所以它应该看起来像这样:

string term="foo";
 OracleParameter p = new OracleParameter("param1", term);
 object[] parameters = new object[] { p };
 var model = db.Database.SqlQuery<ProjectTask>("SELECT * FROM (SELECT * FROM web_project_task_vw WHERE project_num like '%'||:param1||'%') WHERE rownum<=100", parameters).ToList();
于 2013-12-05T14:54:50.887 回答
2

p的参数名称可能不正确;名字应该是param1,不是@param1。您的查询也不正确;替换'%@param1%''%:param1%'.

于 2013-03-19T20:14:19.170 回答