简体   繁体   English

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

[英]ODP.NET Parameterised Query Not Working

I have tried everything I can find on the internet to get this to work. 我已经尽我所能在互联网上找到的所有内容都可以正常使用。

I am using VS2013, C#, Oracle.ManagedDataAccess v4 (tried oracle.dataaccess.client v14),oracle 11g. 我正在使用VS2013,C#,Oracle.ManagedDataAccess v4(尝试使用oracle.dataaccess.client v14),oracle 11g。

I understand the following code should work (I know connection disposal, usings etc are missing but I've just stripped it back) 我知道以下代码应该可以工作(我知道连接处理,用法等都丢失了,但是我将其剥离了)

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")),
            };

}

if I replace the parameter with a hardcoded value, it works! 如果我将参数替换为硬编码值,则可以使用!

It fails with "Invalid operation against a closed object" because the query has returned no rows. 由于查询未返回任何行,因此失败并显示“对关闭的对象无效的操作”。

Could someone please help? 有人可以帮忙吗?

Thanks for reading. 谢谢阅读。

Have you gone here to download the correct version of ODP.NET? 您是否已去这里下载ODP.NET的正确版本? ODP.NET Home Page ODP.NET主页

I have used the 12 version and it works for 11gr2. 我已经使用了12版本,它适用于11gr2。

Go to download and Click here to download ODAC with Oracle Developer Tools for Visual Studio. 转到下载并单击此处,使用适用于Visual Studio的Oracle开发人员工具下载ODAC。

Several things to make sure you have correct. 确保您正确的几件事。 The oracle client and ODP.NET versions must be the same bit'ness 32 or 64. You cannot cross 32 bit client with 64 bit ODP or vise versa. oracle客户端和ODP.NET版本必须具有相同的32位或64位。您不能将64位ODP与32位客户端交叉,反之亦然。

If the above is correct then your OK. 如果以上正确,则可以。 I suspect you are because the query works hard coded. 我怀疑你是因为查询工作进行了硬编码。

Could it be this? 可能是这个吗? http://www.codeproject.com/Articles/208176/Gotcha-sharp-Using-Named-Parameters-with-Oracl 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