0

我正在尝试从Oracle PL/SQL的C# .NET中的存储过程中获取字符串。在 Oracle SQL Developer 中查询正常,但 C# 中的输出参数将始终返回 "1"。我尝试设置不同的参数大小、方向等。没有任何帮助。它将返回“1”/null 或引发错误。另外我添加了一个 INT32 参数只是为了测试,它每次都会返回 null。以上是简化的测试查询和 C# 代码。现在在这件愚蠢的事情上挣扎了两天。

    string sql = @"  
DECLARE
  eligProdFinal1 nvarchar2(128);
  status integer;
  testNR integer;


BEGIN
   --dbms_output.put_line( eligProdFinal1 || '|' || eligProdFinal2 || '|' || eligProdFinal3 );
   dbms_output.put_line('TEST');
   eligProdFinal1 := '';

   dbms_output.get_line( :eligProdFinal1, :status ); --status 0 is OK

   dbms_output.put_line(37);

   dbms_output.get_line( :testNR, :status ); --status 0 is OK

END;

";

。网:

   //added to get DBMS Ouput Line from a query in PL/SQL ORACLE
    public static string GetDbmsOutputLine(string sqlExp)
    {
        string dbConSAPCCDEV = "...";

        using (var connection = new OracleConnection() { ConnectionString = dbConSAPCCDEV })
        {
            using (OracleCommand command = new OracleCommand())
            {
                command.Connection = connection;
                command.CommandType = System.Data.CommandType.Text;
                command.CommandText = string.Format(sqlExp); 
                connection.Open();

                OracleParameter statusParameter = new OracleParameter();
                statusParameter.ParameterName = "status";
                statusParameter.Direction = ParameterDirection.Output;
                command.Parameters.Add(statusParameter);

                //tried adding the param like this, or in a single line like below
                //OracleParameter lineParameter = new OracleParameter();
                //lineParameter.ParameterName = "eligProdFinal1";
                //lineParameter.OracleDbType = OracleDbType.Varchar2;
                //lineParameter.Size = 760;
                //lineParameter.Direction = ParameterDirection.ReturnValue;
                //command.Parameters.Add(lineParameter);

                command.Parameters.Add(new OracleParameter("eligProdFinal1", OracleDbType.NVarchar2, 128, null, ParameterDirection.Output));

                OracleParameter testParameter = new OracleParameter();
                testParameter.ParameterName = "testNR";
                testParameter.Direction = ParameterDirection.Output;
                command.Parameters.Add(testParameter);




                command.ExecuteNonQuery();

                if (command.Parameters["eligProdFinal1"].Value is DBNull)
                    return null;

                string output = command.Parameters["eligProdFinal1"].Value.ToString();

                string testNr = command.Parameters["testNR"].Value.ToString();

                connection.Close();

                return output;

            }
        }

    }
4

0 回答 0