从oracle存储过程中获取价值

时间:2009-12-05 17:41:07

标签: c# oracle oracle10g

我有一个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");

但它没有在文本框中显示任何值:(。请有人帮助我。

2 个答案:

答案 0 :(得分:1)

“Type”是Oracle中的保留字。这是链接:http://www.cs.umbc.edu/help/oracle8/server.815/a42525/apb.htm

正如OMG小马所说的那样改变&尝试:SELECT类型|| TO_CHAR(tin_serial)|| rand_digit INTO tin FROM DUAL;

并且还要确保始终“启动”异常以捕获这些错误

答案 1 :(得分:0)

“类型”可以是保留字。你确定程序编译并且有效吗?

您是否也在那里捕获任何错误消息,并使用catch子句隐藏它们?这似乎是不好的做法。