【问题标题】:ODP.NET Parameterised Query Not WorkingODP.NET 参数化查询不起作用
【发布时间】:2018-03-01 11:30:14
【问题描述】:

我已经尝试了我在互联网上可以找到的所有方法来让它工作。

我正在使用 VS2013、C#、Oracle.ManagedDataAccess v4(尝试过 oracle.dataaccess.client v14)、oracle 11g。

我了解以下代码应该可以工作(我知道连接处理、使用等丢失,但我只是将其剥离)

public CustDetailsModel SelectCustDetails(string CustCode)
{
    string sql;
    OracleDataReader reader;

    OracleConnection OraConn = OraConnection.GetConnection;

        OraConn.Open();

        sql = "SELECT CUSTOMER, NAME, POSTCODE FROM CUSTOMER WHERE CUSTOMER = :CUSTCODE";

        OracleCommand cmd = new OracleCommand(sql, OraConn);

        OracleParameter parameter = cmd.CreateParameter();
        parameter.ParameterName = "CUSTCODE";
        parameter.OracleDbType = OracleDbType.Varchar2;
        parameter.Value = CustCode;
        cmd.Parameters.Add(parameter);

            reader = cmd.ExecuteReader();

            reader.Read();

            return new CustDetailsModel
            {
                Cust = reader.GetString(reader.GetOrdinal("CUSTOMER")),
                CustName = reader.GetString(reader.GetOrdinal("NAME")),
                CustPostCode = reader.GetString(reader.GetOrdinal("POSTCODE")),
            };

}

如果我用硬编码值替换参数,它就可以工作!

由于查询未返回任何行,因此失败并显示“对已关闭对象的无效操作”。

有人可以帮忙吗?

感谢阅读。

【问题讨论】:

  • 你检查过这个stackoverflow.com/questions/17062954/… 吗?
  • @SergeyMalyutin - 是的,在我引入参数之前,数据库连接没有问题。我想知道我是否有适用于 11gR2 的正确版本的 ODAC。

标签: c# oracle odp.net


【解决方案1】:

你去这里下载正确版本的ODP.NET了吗?ODP.NET Home Page

我使用的是 12 版本,它适用于 11gr2。

转到下载并单击此处下载带有适用于 Visual Studio 的 Oracle 开发人员工具的 ODAC。

有几件事要确保你有正确的。 oracle 客户端和 ODP.NET 版本必须是相同的 32 位或 64 位。您不能将 32 位客户端与 64 位 ODP 交叉使用,反之亦然。

如果以上是正确的,那么你就可以了。我怀疑你是因为查询是硬编码的。

会是这样吗? http://www.codeproject.com/Articles/208176/Gotcha-sharp-Using-Named-Parameters-with-Oracl

【讨论】:

  • 感谢您的回复。我现在使用 ODP 托管驱动程序没有成功。同样,它适用于所有不包含参数的查询!我已经尝试了在互联网上可以找到的所有内容,包括设置命名参数标志。非常感谢任何其他帮助 - 再次感谢。
  • 谢谢。该 codeproject 的链接提供了答案。本质上,“OracleCommand 对象上有一个附加属性 BindByName,必须将其设置为 true 才能按名称绑定参数”。啊!
猜你喜欢
  • 2020-06-30
  • 2011-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-06
相关资源
最近更新 更多