Oracle Data Access ORA-06512:字符串缓冲区太小

时间:2014-08-20 20:31:14

标签: c# oracle odp.net

当我致电GetTest时,我收到此错误:

  

字符串缓冲区太小ORA-06512

这是我的c#方法:

public string GetTEST()
{
    using (var conn = new OracleConnection(System.Configuration.ConfigurationManager.ConnectionStrings["Dbconnection"].ConnectionString))
    {
        OracleCommand cmd = new OracleCommand("Package.GetTEST");
        cmd.BindByName = true;
        cmd.Connection = conn;
        cmd.CommandType = CommandType.StoredProcedure;

        cmd.Parameters.Add("P_OUT_MESSAGE", OracleDbType.Varchar2,1000,ParameterDirection.Output);

        cmd.ExecuteNonQuery();

        var t = cmd.Parameters["P_OUT_MESSAGE"].Value;
    }
}

Oracle程序:

PROCEDURE GetTEST
(
  P_OUT_MESSAGE    OUT VARCHAR2 
)
IS
BEGIN
  p_out_message := 'Un problème a été signalé pour votre propriété. Veuillez communiquer avec le Service de l''évaluation au 418 111-7878 ou à l''adresse test@tesst.com';
END;

1 个答案:

答案 0 :(得分:5)

这显然不是你想要的,但似乎ODP.NET使用.NET端参数的长度作为out参数的长度......

这将解决您的问题:

cmd.Parameters.Add("P_OUT_MESSAGE", OracleDbType.Varchar2, 32767, "x".PadRight(500, 'x'), ParameterDirection.Output);

但这更好,虽然不完全正确但是有效:

cmd.Parameters.Add("P_OUT_MESSAGE", OracleDbType.Clob, ParameterDirection.Output);

或者,更好的是,如果可能的话,避免使用out参数并使用标量返回值或表函数。