oledb帶參數訪問oracle function並獲得傳回值的問題,有沒有人能告訴我

來源:互聯網
上載者:User

oracle資料庫中有一個function   fun_sin_shift_to_group  兩個參數分別是 INDATE IN DATE , inshift in Integer,一個傳回值 傳回值為varchar2

用oracleclient可以傳參數並獲得傳回值,這是沒問題的(代碼如下:)

     OracleConnection oc = new OracleConnection("data source=l3ironbe;User Id=level3;Password=wisdri");
        OracleCommand ocmd = new OracleCommand();
        OracleParameter op1 = new OracleParameter("INDATE", OracleType.DateTime);
        op1.Value = dt;
        OracleParameter op2 = new OracleParameter("inshift", OracleType.Int32);
        op2.Value = shift;
        OracleParameter op3 = new OracleParameter();
        op3.OracleType = OracleType.VarChar;
        op3.Size = 5;
        op3.Direction = ParameterDirection.ReturnValue;
        ;
        ocmd.Parameters.Add(op1);
        ocmd.Parameters.Add(op2);
        ocmd.Parameters.Add(op3);
        ocmd.Connection = oc;
        ocmd.CommandText = "fun_sin_shift_to_group";
        ocmd.CommandType = CommandType.StoredProcedure;
        oc.Open();
        ocmd.ExecuteNonQuery();
        oc.Close();
        group = op3.Value.ToString();
        return group;

 

 

但是用oledb的訪問就不行了:

 OleDbConnection con = new OleDbConnection(connStr);
        OleDbCommand com = new OleDbCommand();
        com.Connection = con;
        com.CommandType = CommandType.StoredProcedure;
        com.CommandText = "fun_sin_shift_to_group";
        OleDbParameter p1 = new OleDbParameter("INDATE", OleDbType.Date);
        p1.Direction = System.Data.ParameterDirection.Input;
        p1.Value = dt;
        OleDbParameter p2 = new OleDbParameter("inshift", OleDbType.Integer);
        p2.Direction = System.Data.ParameterDirection.Input;
        p2.Value = shift;
        OleDbParameter p3 = new OleDbParameter("groupid",OleDbType.VarChar);
       
     
        p3.Size = 5;
        p3.Direction = System.Data.ParameterDirection.Output;
        com.Parameters.Add(p1);
        com.Parameters.Add(p2);
        com.Parameters.Add(p3);

 

總是異常,說參數數目不對或者類型不對,我試著簡化參數,或者Oledbtype設定可能的類型,都是這樣的異常;

非常奇怪,怎麼回事?

 

 

另外我目前繞過這個問題的辦法:

在oracle中建一個procedure  調用這個function

 CREATE OR REPLACE Procedure pro_sin_shift_to_group(INDATE IN DATE , inshift in Integer ,groupid Out Varchar)

IS

BEGIN
   groupid:=fun_sin_shift_to_group(indate,inshift);

END;

然後把上面oledb代碼中com.CommandText = "pro_sin_shift_to_group";該成

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.