zoukankan      html  css  js  c++  java
  • 利用Oracle.DataAccess调用Function的遇到的一个诡异问题

    这是一段很简单的Function,(随便举个例子)

      FUNCTION Execute(message_id_ IN OUT NUMBER,
                      part_no_    IN OUT VARCHAR2RETURN VARCHAR2 IS
      BEGIN
        //这里,接收message_id_参数,做某些处理

        part_no_  :='123456';
        RETURN 'test';
      END Execute;

    以前是采用微软不再支持的System.Data.OracleClient命名空间,如下:

    var connectionString = "xxxx";

    OracleConnection conn = new OracleConnection(connectionString);

    conn.Open();
    OracleCommand cmd = new OracleCommand("TEST.TESTAB.Execute", conn);
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add("message_id_", OracleType.Int32);
    cmd.Parameters[0].Direction = ParameterDirection.InputOutput;
    cmd.Parameters.Add("part_no_", OracleType.VarChar, 100);
    cmd.Parameters[1].Direction = ParameterDirection.InputOutput;
    cmd.Parameters.Add("result_", OracleType.VarChar, 2000);
    cmd.Parameters[2].Direction = ParameterDirection.ReturnValue;

    cmd.Prepare();               

    cmd.Parameters[0].Value = 10000;

    cmd.ExecuteNonQuery();

                    

     以上代码能正确赋值和返回结果,但是后来程序给到别人改,他采用了Oracle公司为.NET专门开发的Oracle.DataAccess.dll,采用以上方法死活得不到传入值message_id_,而必须将返回参数值作为第一个参数才行,如下,而采用ADO.NET是没有这样的顺序限制的。 

     
    var connectionString = "xxxx";
    OracleConnection conn = new OracleConnection(connectionString);

    conn.Open();
    OracleCommand cmd = new OracleCommand("TEST.TESTAB.Execute", conn);
    cmd.CommandType = CommandType.StoredProcedure;

    cmd.Parameters.Add("result_", OracleType.VarChar, 2000);

    cmd.Parameters[0].Direction = ParameterDirection.ReturnValue;

    cmd.Parameters.Add("message_id_", OracleType.Int32);
    cmd.Parameters[1].Direction = ParameterDirection.InputOutput;
    cmd.Parameters.Add("part_no_", OracleType.VarChar, 100);
    cmd.Parameters[2].Direction = ParameterDirection.InputOutput;

    cmd.Prepare();               

    cmd.Parameters[1].Value = 10000;

    cmd.ExecuteNonQuery();
     
          

  • 相关阅读:
    C#下编程完成IIS网络App的权限设置
    IIS6与IIS7在编程实现HTTPS绑定时的细微差别
    Android 对话框(Dialog)大全
    Android 开发中使用Intent传递数据的方法
    设计模式--模版设计模式
    android 布局页面文件出错故障排除Exception raised during rendering: java.lang.System.arraycopy([CI[CII)V
    viewPager的切换动画
    设计模式--状态模式
    git学习
    二〇一五年五月二十二日--bug--启动页面出现模糊的问题
  • 原文地址:https://www.cnblogs.com/gb2312/p/2325521.html
Copyright © 2011-2022 走看看