我已经尝试了我可以在互联网上找到的所有内容来实现这一目标。
我正在使用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")),
};
}
如果我用硬编码的值替换参数,它就可以了!
它失败了"针对已关闭对象的无效操作"因为查询没有返回任何行。
有人可以帮忙吗?
感谢阅读。
答案 0 :(得分:2)
你有没有去过这里下载正确版本的ODP.NET?ODP.NET Home Page
我使用的是12版本,适用于11gr2。
转到下载并单击此处使用适用于Visual Studio的Oracle Developer Tools下载ODAC。
要确保你有正确的几件事。 oracle客户端和ODP.NET版本必须是32位或64位相同的位。您不能使用64位ODP跨越32位客户端,反之亦然。
如果以上是正确的那么你的确定。我怀疑你是因为查询工作硬编码。
可能是这个吗? http://www.codeproject.com/Articles/208176/Gotcha-sharp-Using-Named-Parameters-with-Oracl