C # OleDB - хранимая процедура Oracle не возвращает данные - PullRequest
0 голосов
/ 22 марта 2012

У меня есть следующий код C #, который вызывает хранимую процедуру, но данные не возвращаются (пустой / нулевой набор данных.) Если я запускаю хранимый процесс в TOAD, я определенно получаю результаты (одна строка). Я могу изменить текст команды «SELECT * FROM DUAL», и я получаю возвращенные данные, поэтому я знаю, что база данных устанавливает успешное соединение. Хранимая процедура принимает один входной параметр и выводит пять полей. Вот мой код:

        string connStr = "Provider=OraOLEDB.Oracle;Data Source=database;User Id=username;Password=password;PLSQLRSet=1;";
        OleDbConnection oracleConn = new OleDbConnection(connStr);

        OleDbCommand cmd = new OleDbCommand("{call foo.bar(?, ?, ?, ?, ?, ?)}", oracleConn);
        cmd.CommandType = CommandType.Text;
        cmd.Parameters.Add("p_login", OleDbType.VarChar, 50);
        cmd.Parameters["p_login"].Direction = ParameterDirection.Input;
        cmd.Parameters["p_login"].Value= "FOOBAR";
        cmd.Parameters.Add("p_user_id", OleDbType.VarChar, 50);
        cmd.Parameters["p_user_id"].Direction = ParameterDirection.Output;
        cmd.Parameters.Add("p_user_role", OleDbType.VarChar, 50);
        cmd.Parameters["p_user_role"].Direction = ParameterDirection.Output;
        cmd.Parameters.Add("p_user_first_name", OleDbType.VarChar, 50);
        cmd.Parameters["p_user_first_name"].Direction = ParameterDirection.Output;
        cmd.Parameters.Add("p_user_last_name", OleDbType.VarChar, 50);
        cmd.Parameters["p_user_last_name"].Direction = ParameterDirection.Output;
        cmd.Parameters.Add("p_user_terr_nbr", OleDbType.VarChar, 50);
        cmd.Parameters["p_user_terr_nbr"].Direction = ParameterDirection.Output;
        OleDbDataAdapter da = new OleDbDataAdapter(cmd);
        DataSet ds = new DataSet();
        da.Fill(ds, "dsTest");
        return ds;

1 Ответ

0 голосов
/ 22 марта 2012

Я бы порекомендовал вставить вход в хранимую процедуру и посмотреть, какие данные отправляются в экземпляр Oracle, или процедура вызывается вообще. И затем отладка оттуда.

Как правило, может быть некоторое разъединение между типами данных, которые вы отправляете, или параметрами ввода / вывода.

...