Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / [Oracle] Чтение dbms_output / 2 сообщений из 2, страница 1 из 1
07.11.2007, 06:07
    #34920610
Mamoulian
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Oracle] Чтение dbms_output
Здравствуйте.

Для отладки понадобилось посмотреть параметры, передаваемые в хранимую процедуру на Oracle 10g.
Делаю это следующим образом. Код работает:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
        readonly string connectionString = @"Data Source=ELLDEV;User ID=smeta;Password=smeta";

        private void MainForm_Load(object sender, EventArgs e)
        {
            using (OracleConnection con = new OracleConnection(connectionString))
            using (OracleCommand cmd = new OracleCommand("", con)) {
                cmd.CommandText = "dbms_output.put_line('Проверка связи'); dbms_output.put_line('Проверка связи 2')";
                cmd.CommandType = CommandType.StoredProcedure;

                con.Open();
                EnableDBMSOutput(con);

                cmd.ExecuteNonQuery();

                dbmsTextBox.Text = ReadDBMSOutput(con);
            }

        }

        void EnableDBMSOutput(OracleConnection c)
        {
            using (OracleCommand cmd = new OracleCommand("dbms_output.enable", c)) {
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.ExecuteNonQuery();
            }
        }

        string ReadDBMSOutput(OracleConnection c)
        {
            using (OracleCommand cmd = new OracleCommand("dbms_output.get_line", c)) {
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("line", OracleType.VarChar,  255 ).Direction = System.Data.ParameterDirection.Output;
                cmd.Parameters.Add("status", OracleType.Int16).Direction = System.Data.ParameterDirection.Output;

                StringBuilder r = new StringBuilder();

                int status =  0 ;
                while (true) {
                    cmd.Parameters["line"].Value = null;
                    cmd.Parameters["status"].Value = null;
                    
                    cmd.ExecuteNonQuery();

                    status = int.Parse(cmd.Parameters["status"].Value.ToString());
                    if (status !=  0 )
                        break;

                    if(r.ToString().Length >  0 )
                        r.Append(Environment.NewLine);
                    r.Append(cmd.Parameters["line"].Value.ToString());
                }

                return r.ToString();
            }
        }

А вот когда заменяю
Код: plaintext
1.
2.
3.
            using (OracleCommand cmd = new OracleCommand("", con)) {
                cmd.CommandText = "dbms_output.put_line('Проверка связи'); dbms_output.put_line('Проверка связи 2')";
                cmd.CommandType = CommandType.StoredProcedure;

На нужный мне вызов:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
            using (OracleCommand cmd = new OracleCommand("PRODUCTIONSTATISTICS.psEquipmentSam", con)) {
                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.Add(new OracleParameter("districtCode", OracleType.Char,  4 )).Value = "332";
                cmd.Parameters.Add(new OracleParameter("startDate", OracleType.Char,  8 )).Value = "20060801";
                cmd.Parameters.Add(new OracleParameter("endDate", OracleType.Char,  8 )).Value = "20060831";
                cmd.Parameters.Add(new OracleParameter("equipmentModel", OracleType.VarChar,  3 )).Value = "ОКТ САМ";
                cmd.Parameters.Add(new OracleParameter("rc", OracleType.Cursor)).Direction = ParameterDirection.Output;

То ReadDBMSOutput ничего не возвращает.
При этом в моей хранимой процедуре PRODUCTIONSTATISTICS.psEquipmentSam точно делается вывод в dbms_output и он работает - проверено вызовом из pl/sql.

В чём у меня ошибка? Как сделать правильно?
...
Рейтинг: 0 / 0
07.11.2007, 10:10
    #34920898
Mamoulian
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Oracle] Чтение dbms_output
Прошу прощения. Нашел ошибку. Тема закрыта.
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / [Oracle] Чтение dbms_output / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]