繁体   English   中英

ODP.NET参数化查询不起作用

[英]ODP.NET Parameterised Query Not Working

我已经尽我所能在互联网上找到的所有内容都可以正常使用。

我正在使用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")),
            };

}

如果我将参数替换为硬编码值,则可以使用!

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

有人可以帮忙吗?

谢谢阅读。

您是否已去这里下载ODP.NET的正确版本? ODP.NET主页

我已经使用了12版本,它适用于11gr2。

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

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

如果以上正确,则可以。 我怀疑你是因为查询工作进行了硬编码。

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

暂无
暂无

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

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