2016-04-29 92 views
0

textbox并在离开时,我使用的是Oracle函数检索其他textboxs所以我下面的代码造成的数据,但我没有得到的数据发现C#从Oracle函数返回了参数

private void TB_PRODUCT_DESC_Leave(object sender, EventArgs e) 
    { 
     string connstr = "Data Source=JDT; User Id=admin; password=admin;"; 

     string cmdtxt = @"F_GET_PRODUCT_INFO"; //~ Returning CUSTOMER_ID from trigger in database ~// 

     using (OracleConnection conn = new OracleConnection(connstr)) 
     using (OracleCommand cmd = new OracleCommand(cmdtxt, conn)) 
     { 
      try 
      { 
       cmd.CommandText = cmdtxt; 
       cmd.CommandType = CommandType.StoredProcedure; 

       cmd.Parameters.Add(new OracleParameter("TB_PRODUCT_DESC", TB_PRODUCT_DESC.Text)); 
       cmd.Parameters.Add(":V_PRODUCT_DESC", OracleDbType.Varchar2, ParameterDirection.ReturnValue); 

       conn.Open(); 

       cmd.ExecuteReader(); 

       TB_NOTES.Text = (cmd.Parameters[":V_PRODUCT_DESC"].Value).ToString(); 

       MessageBox.Show(TB_NOTES.Text); 
      } 
      catch (Exception EX) 
      { MessageBox.Show(EX.Message, "error msg", MessageBoxButtons.OK, MessageBoxIcon.Error); } 
     } 

功能我现在用低于返回一个VARCHAR2值

CREATE OR REPLACE FUNCTION F_GET_PRODUCT_INFO (P_PRODUCT_ID NUMBER) 
    RETURN VARCHAR2 
IS 
    V_PRODUCT_DESC   VARCHAR2 (200); 
    V_UNIT_PRICE     NUMBER; 
    V_MEASUREMENT_UNIT  VARCHAR2(32); 
BEGIN 
    SELECT PRODUCT_DESC, 
       UNIT_PRICE, 
       MEASUREMENT_UNIT 
    INTO V_PRODUCT_DESC, 
       V_UNIT_PRICE, 
       V_MEASUREMENT_UNIT 
    FROM WAREHOUSE 
    WHERE PRODUCT_ID = P_PRODUCT_ID; 

    RETURN V_PRODUCT_DESC; 
END F_GET_PRODUCT_INFO; 
+0

可能重复SO问题:http://stackoverflow.com/questions/23199713/c-sharp-call-oracle-stored-function –

+0

@rontornambe我有正确的两个错误'ParameterDirection'应该是返回值和'CMD。 Parameters.Add'应该在执行前,但现在我没有发现数据发现错误 – samer

回答

1

你需要指定VARCHAR2大小:

OracelParameter prm = new OracleParameter(":V_PRODUCT_DESC"); 
      prm.Direction = ParameterDirection.ReturnValue; 
      prm.DbType = OracleDbType.Varchar2; 
      prm.Size = 200; 
      cmd.Parameters.Add(prm);