Получить значение из хранимой процедуры оракула - PullRequest
0 голосов
/ 05 декабря 2009

У меня есть процедура оракула, которая должна возвращать объединенную строку всех параметров

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 ]

1 голос
/ 06 декабря 2009

«Тип» - зарезервированное слово в Oracle. Вот ссылка: http://www.cs.umbc.edu/help/oracle8/server.815/a42525/apb.htm

И, как сказал OMG Ponies, измените и попробуйте: SELECT type || TO_CHAR (tin_serial) || rand_digit INTO олово ОТ ДВОЙНОГО;

А также убедитесь, что вы всегда «инициируете» исключение для обнаружения ошибок такого рода

0 голосов
/ 06 декабря 2009

«Тип» может быть зарезервированным словом. Вы уверены, что процедура скомпилирована и действительна?

Также вы ловите там какие-либо сообщения об ошибках и скрываете их с помощью предложения catch? Это похоже на плохую практику.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...