简体   繁体   English

为什么对Oracle(View)的这种选择查询不起作用?

[英]Why this select query to Oracle(View) doesn't work?

First I tested simple cases: 首先,我测试了一些简单的案例:

cmd.Parameters.Add(new OracleParameter(":paramCode", OracleDbType.NVarchar2)).Value = userCode;
cmd.CommandText = "SELECT * FROM VIEWUSERDATA WHERE  Codigo = :paramCode";
cmd.CommandType = System.Data.CommandType.Text;
OracleDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
    //Works, retrieve data
}

Another: 另一个:

cmd.Parameters.Add(new OracleParameter(":paramRole", OracleDbType.NVarchar2)).Value = userRole;
cmd.CommandText = "SELECT * FROM VIEWUSERDATA WHERE  Role = :paramRole";
...
while (reader.Read())
{
    //Also works
}

But when join, doesn't work. 但是加入时不起作用。

cmd.Parameters.Add(new OracleParameter(":paramCode", OracleDbType.NVarchar2)).Value = userCode;
cmd.Parameters.Add(new OracleParameter(":paramRole", OracleDbType.NVarchar2)).Value = userRole;
cmd.CommandText = "SELECT * FROM VIEWUSERDATA WHERE Role = :paramRole AND Code = :paramCode";
...
while (reader.Read())//don't retrieve anything
{
}

Data exists, If I do the query in an external query editor(window) works fine. 数据存在,如果我在外部查询编辑器(窗口)中执行查询,则工作正常。

Thanks. 谢谢。

By default, Oracle parameter binding is by position, not by name. 默认情况下,Oracle参数绑定是按位置而不是名称。 Either swap the two cmd.Parameters.Add calls or set cmd.BindByName = true; 交换两个cmd.Parameters.Add调用或设置cmd.BindByName = true; before executing the query. 在执行查询之前。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM