use*_*143 9 c# oracle entity-framework-4
我正在尝试在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();
Run Code Online (Sandbox Code Playgroud)
运行此操作不会返回任何结果.如果我用类似的东西替换参数
"SELECT * FROM web_project_task_vw WHERE project_num like '%"+term+"%'"
Run Code Online (Sandbox Code Playgroud)
它返回我期望的结果,但这显然是SQL注入风险.
任何人都可以指出我的参数应该如何在EF 4中为Oracle DB工作的正确方向?
谢谢.
小智 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();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7797 次 |
最近记录: |