2009-12-05 157 views
0

我有一個Oracle過程值應該返回所有獲取來自Oracle存儲過程

create or replace procedure tin_builder (type in varchar2, 
     tin_serial in number, rand_digit in varchar2, tin out varchar2) is 
    BEGIN 
     tin := type || TO_CHAR(tin_serial) || rand_digit ; 
    END 

現在我想從Visual Studio 2008(C#代碼)

public void TinBuilder(string type, long tin_serial, string rand_digit) 
{ 
    OracleConnection connection = new OracleConnection("Data Source=xe;User ID=system;Password=******;"); 

    OracleCommand cmd = new OracleCommand(); 
    cmd.Connection = connection; 
    cmd.CommandText = "tin_builder"; 
    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.Parameters.Add("type", OracleDbType.Varchar2).Value = type; 
    cmd.Parameters.Add("tin_serial", OracleDbType.Decimal).Value = tin_serial; 
    cmd.Parameters.Add("rand_digit", OracleDbType.Varchar2).Value = rand_digit; 
    cmd.Parameters.Add("tin", OracleDbType.Varchar2).Direction = ParameterDirection.ReturnValue; 

    try 
    { 
     connection.Open(); 

     cmd.ExecuteNonQuery(); 
     TextBox1.Text = cmd.Parameters["tin"].Value.ToString(); 
    } 
    catch (Exception ex) 
    { 

    } 
    finally 
    { 
     connection.Close(); 
    } 
} 
調用過程的參數的連接字符串

然後把它稱爲:

TinBuilder("1", 10000001, "37"); 

但它並不顯示在文本中的任何值盒子:(。請有人幫助我。

+1

你測試了你的sproc嗎?我會使用'SELECT type || TO_CHAR(tin_serial)|| rand_digit INTO tin FROM DUAL;'而不是你擁有的。另外 - 很好地明確參數聲明:'tin IN OUT varchar2'而不是'tin OUT varchar2'。 – 2009-12-05 17:50:10

+0

我不知道爲什麼我的存儲過程無法正常工作。當我執行過程時,它顯示「SQL語句正在運行」! – FlintOff 2009-12-05 18:47:14

+0

我應該運行什麼特定服務? – FlintOff 2009-12-05 18:48:01

回答

0

「類型」可能是保留字。你確定程序已編譯並且有效嗎?

你還在那裏捕捉任何錯誤消息,並用catch子句隱藏它們嗎?這似乎是不好的做法。