我使用 odp.net 将 EntityFramework 与 Oracle 一起使用。参数化的 sql 查询不起作用。
var orderCode = "XYZ";
var set = ctx.Database.SqlQuery<Order>(
"Select * from dwh.Orders where OrderCode = '{0}'"
, orderCode
);
(或者)
var set1 = ctx.Database.SqlQuery<Order>(
"Select * from dwh.Orders where OrderCode = ':param'",
new OracleParameter("param", orderCode)
);
Console.WriteLine(set.Count() + ", " + set1.Count()); //Gives 0, 0
但是,如果我对值进行硬编码,它就可以工作。
var set = ctx.Database.SqlQuery<Order>(
"Select * from dwh.Orders where OrderCode = 'XYZ'",
orderCode
);
有谁知道为什么?我在那个视图中有 150 列。那是问题吗?
更新: 使用 Oracle 参数的查询有效。问题是我在 :param 变量周围有单引号。
话虽如此,带有“{0}”的顶级查询不起作用。此外,以下 linq 查询不起作用。
var set = ctx.Orders.Where(a => a.OrderCode == orderCode); // Gets zero results.
当我对值进行硬编码时,它可以正常工作并正确获取结果。
var set = ctx.Orders.Where(a => a.OrderCode == "XYZ"); // Gets the results correctly.
更新 2: 查询与 Devart 的 dotconnect 驱动程序一起使用。看起来这是 odp.net 的问题。
有人有类似的问题吗?