c# - C# 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 ) 消息- you have successfully logged in

但是我得到了一个截断的字符串: you have success

2 ) 已验证- 是

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

Y

在 IIS 7.5中,同样的代码工作得很好,我们将服务器升级到 IIS 8.5后,现在我面临这个问题。

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

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

升级 IIS 8.5时,在该机器上安装 12.1.0 instant 客户端。 这是否导致了问题?

时间:

这是Oracle客户端 12中的Bug 。 它不仅截断字符串,而且截断数字。 恢复到客户端 11g 修复了问题。

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

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

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

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

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

我有同样的问题,但我找到了一个解决方案,你仍然使用安装在同一台机器上的oracle 12和11。 下面是我所做的。

1- Oracle 11已安装在我的实例中,所以我保持不动。

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

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

4-重新启动服务器。

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

...