如果使用Oracle 12c Client和.NET的Oracle driver,你很可能会碰到跟下面一样的问题:
https://www.codeproject.com/Questions/876769/Oracle-client-problem-with-output-parameter
我们昨天把一个老程序移到新服务器后就遇到了。具体表现为:
一个stored procedure(StoredProcedure1)有一个output parameter,名为o_param,程序片断为:
OracleCommand oracleCommand = new OracleCommand();
oracleCommand.Connection = dbConnection;
oracleCommand.CommandText = "StoredProcedure1";
oracleCommand.CommandType = CommandType.StoredProcedure;
OracleParameter oracleParameter = new OracleParameter("o_param", OracleType.VarChar, 64);
oracleParameter.Direction = ParameterDirection.Output;
oracleCommand.Parameters.Add(oracleParameter);
oracleCommand.ExecuteNonQuery();
string text = oracleParameter.Value.ToString();
Console.WriteLine("o_param: "+text);
结果会得到一半的实际返回值。
解决方法就是上面连接里说的:
1. parameter类型改成Char然后把返回值trim掉空格:
OracleParameter oracleParameter = new OracleParameter("o_param", OracleType.Char, 64);
...
string text = oracleParameter.Value.ToString().Trim();
或:
2. 改用Oracle 11g client
最好还是改用Oracle Managed Client,因为.Net Oracle Drive已经是deprecated了。