【问题标题】:Why this select query to Oracle(View) doesn't work?为什么这个对 Oracle(View) 的选择查询不起作用?
【发布时间】:2013-09-01 00:00:51
【问题描述】:

首先我测试了简单的案例:

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
}

另一个:

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

但是加入的时候就不行了。

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
{
}

数据存在,如果我在外部查询编辑器(窗口)中进行查询工作正常。

谢谢。

【问题讨论】:

  • 仅执行最后一个查询时是否有任何行返回?前 2 个查询可能有效,但对于最后一个查询,“where”条件不同。
  • userCode 和 userRole 有哪些类型?只是字符串?
  • 尝试使用 OR 而不是 AND,它应该可以工作。问题是该角色和该代码没有行。
  • @paqogomez 类型为字符串(OracleDbType.NVarchar2)
  • @HappyLee 当我在外部工具中进行查询时,例如 SQL Manager For Oracle 等工作。

标签: c# sql oracle oracle11g odp.net


【解决方案1】:

默认情况下,Oracle 参数绑定是按位置,而不是按名称。在执行查询之前交换两个 cmd.Parameters.Add 调用或设置 cmd.BindByName = true;

【讨论】:

    猜你喜欢
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    • 1970-01-01
    相关资源
    最近更新 更多