Microsoft-IIS / 8.5,Oracle输出变量被截断

OracleConnection connection = DBHelper.OracleConnection; OracleCommand OraCommand = connection.CreateCommand(); OraCommand.CommandText = "AUTHENTICATION.Authenticate"; OraCommand.CommandType = CommandType.StoredProcedure; int zero = 0; OracleParameter newParam = null; OraCommand.Parameters.Add(newParam); newParam = new OracleParameter("Authenticated", OracleType.VarChar); newParam.Direction = ParameterDirection.Output; newParam.Size = 4000; OraCommand.Parameters.Add(newParam); newParam = new OracleParameter("Message", OracleType.VarChar); newParam.Direction = ParameterDirection.Output; newParam.Size = 4000; OraCommand.Parameters.Add(newParam); newParam = new OracleParameter("Response", OracleType.VarChar); newParam.Direction = ParameterDirection.Output; newParam.Size = 4000; OraCommand.Parameters.Add(newParam); try { connection.Open(); OraCommand.ExecuteNonQuery(); connection.Close(); errorLabel.Text = OraCommand.Parameters["Message"].Value.ToString() ; if (OraCommand.Parameters["Authenticated"].Value.ToString() == "Yes") { this.Response.Redirect("Default.aspx", true); }else { errorLabel.Text = OraCommand.Parameters["Message"].Value.ToString() + Request.ServerVariables["SERVER_SOFTWARE"] + OraCommand.Parameters[9].Value.ToString(); } } catch (Exception ex) { errorLabel.Text = ex.ToString(); } 

预期产出:

1)消息 – 您已成功登录

但我得到一个截断的字符串:你有成功

2)经过身份validation – 是的

但我得到一个截断的字符串

ÿ

相同的代码在IIS 7.5中运行良好,我们将服务器升级到IIS 8.5,现在我遇到了这个问题。

我确实阅读了一些关于ado.net弃用的文章并使用了odp.net。 我不想将我的代码更改为ODP.net。

你有什么想法,为什么我的输出变量被截断?

当我们升级IIS 8.5时,我们在该机器上安装了12.1.0即时客户端。 这会导致问题???

这是Oracle Client 12c中的错误。 它不仅截断字符串,还截断数字。 恢复到客户端11g修复了问题。

我们拥有与迁移到Oracle 12c数据库(在Oracle服务器上)和Windows 2012 for webservices(IIS 8)时相同的实验。

从存储过程返回的Varchar2字符串几乎总是被截断一半 – 不管我们使用什么设置。

用32位客户端12 64位替换Oracle客户端12并没有解决问题。

Vick Rom解决方案解决了我们的问题。 Oracle客户端11安装在64位Windows 2012服务器上。

我们计划保持这种方式,直到Oracle客户端12无法修复。

我有同样的问题,但是当你仍在同一台机器上安装oracle 12和11时,我找到了解决方法。 以下是我的所作所为。

1- Oracle 11已经安装在我的情况下,所以我把它保存在那里。

2-我安装了oracle客户端12c。 安装后复制TNS名称。

3-安装oracle 11(win32_11gR2_client)。 复制了TNS名称文件。

4-重启服务器。

一切都很顺利。 使用oracle客户端托管驱动程序的系统工作,使用system.data.oracleclient的旧系统也工作。 谢谢

我有同样的问题,但由于我的客户的政策坚持使用最新的Oracle客户端,因此选择了不同的方法。 在这种情况下,我必须使我的代码在Windows 2012 R2 [IIS 8.5]服务器上与Oracle 12c客户端一起使用。

我没有将varchar2作为输出参数返回,而是修改了SP以返回一个SYS_REFCURSOR ,其中包含一行/列。

例如:

 PROCEDURE get_access_sp (p_mode IN VARCHAR2, p_out OUT SYS_REFCURSOR) IS BEGIN /*Body of SP*/ v_out := 'TEST_SP_RETURN_PARAM'; --RETURN OPEN p_out FOR SELECT v_out po FROM DUAL; EXCEPTION WHEN OTHERS THEN OPEN p_out FOR SELECT 'N' po FROM DUAL; END get_access_sp;