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";該成