powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / получать данные из оракла пока процедура не выдаст нулевое значение
18 сообщений из 18, страница 1 из 1
получать данные из оракла пока процедура не выдаст нулевое значение
    #38286270
bombimbom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, есть процедура передачи данных из оракла в текстовый файл
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
 cmd.CommandText = ("test.transpos1.get_mob_file")
  cmd.CommandType = CommandType.StoredProcedure
  OracleCommandBuilder.DeriveParameters(cmd)
 cmd.Parameters("p_pos_id").Value = posid
            cmd.Parameters("p_shop_no").Value = ShopNum
            cmd.Parameters("p_cassa_no").Value = CassaNo
            cmd.Parameters("p_ip").Value = IPNO
 cmd.ExecuteNonQuery()
            p_msg_id = cmd.Parameters("p_msg_id").Value        ' тут получаю изходящие значения из оракла у которых статус 2
            p_msg_type = cmd.Parameters("p_msg_type").Value
            p_lob = cmd.Parameters("p_lob").Value
  If p_msg_id = True Then
                IO.File.WriteAllText(testfile, p_lob, System.Text.Encoding.GetEncoding(1251))
                Form1.log("Файл получен и сохранен как:" & p_msg_id)
            Else
                Exit Sub
end if
  If IO.File.Exists(testfile) = True Then          ' если файл создан предаю в оракл цифру 4 и статус обновляется до 4
                statcmd.Parameters("p_msg_id").Value = p_msg_id
                statcmd.Parameters("p_status_id").Value = 4
end if



Подскажите как сделать так чтобы при нажатии на кнопку создались сразу все файлы у которых статус равен 2 ?
по моей процедуре нужно на каждое создание файла нажимать кнопку, может как-то цикл создать?
...
Рейтинг: 0 / 0
получать данные из оракла пока процедура не выдаст нулевое значение
    #38286295
фиганыч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bombimbom,

этож пи..дец товарищи...
...
Рейтинг: 0 / 0
получать данные из оракла пока процедура не выдаст нулевое значение
    #38286392
carrotik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bombimbom,

.. ну что же вы так не любите OracleDataReader в который уже раз ...

http://msdn.microsoft.com/ru-ru/library/haa3afyz.aspx


Код: vbnet
1.
2.
3.
4.
5.
Dim reader As OracleDataReader = cursCmd.ExecuteReader()
...
Do While reader.Read()
  .... дыр-дыр-дыр ...
Loop
...
Рейтинг: 0 / 0
получать данные из оракла пока процедура не выдаст нулевое значение
    #38286400
bombimbom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
честно говоря его пробовал, но видимо торможу ))
ну теперь раз вы сказали что им можно воспользоваться то буду его добивать до конца :)
...
Рейтинг: 0 / 0
получать данные из оракла пока процедура не выдаст нулевое значение
    #38286469
bombimbom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
carrotik,

Код: vbnet
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.
 Dim conn As New OracleConnection(oradb)
        Dim cmd As New OracleCommand
        Dim testxml As New System.Xml.XPath.XPathDocument("C:\config.xml")
        ShopNum = testxml.CreateNavigator.SelectSingleNode("config/dbno").Value
        CassaNo = testxml.CreateNavigator.SelectSingleNode("config/cassaNO").Value
        dbName = testxml.CreateNavigator.SelectSingleNode("config/dbName").Value
        IPNO = testxml.CreateNavigator.SelectSingleNode("config/ipNO").Value
        posid = testxml.CreateNavigator.SelectSingleNode("config/po_id").Value
        cmd.Connection = conn
        Try
            conn.Open()
            cmd.CommandText = ("test.transpos1.get_mob_file")
            cmd.CommandType = CommandType.StoredProcedure
            OracleCommandBuilder.DeriveParameters(cmd)
            cmd.Parameters("p_pos_id").Value = posid
            cmd.Parameters("p_shop_no").Value = ShopNum
            cmd.Parameters("p_cassa_no").Value = CassaNo
            cmd.Parameters("p_ip").Value = IPNO
            Dim reader As OracleDataReader = cmd.ExecuteReader()
            p_msg_id = cmd.Parameters("p_msg_id").Value
            p_msg_type = cmd.Parameters("p_msg_type").Value
            p_lob = cmd.Parameters("p_lob").Value
            MessageBox.Show(p_msg_id)     ' на этом моменте показывает данные переменной
            'If reader.HasRows Then
            Do While reader.Read()
                testfile = "C:\test\in\" & p_msg_id & ".txt"    ' а тут уже нет
                'If p_msg_id = True Then
                IO.File.WriteAllText(testfile, p_lob, System.Text.Encoding.GetEncoding(1251))
                log("Файл получен и сохранен на кассе как:" & p_msg_id)
            Loop
            reader.Close()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
...
Рейтинг: 0 / 0
получать данные из оракла пока процедура не выдаст нулевое значение
    #38286483
bombimbom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
получается после цикла пропадают данные переменной
...
Рейтинг: 0 / 0
получать данные из оракла пока процедура не выдаст нулевое значение
    #38286530
bombimbom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
 Do While reader.Read()

                MessageBox.Show(reader.GetInt32(0))   ' так тоже ничего
                'If p_msg_id = True Then
                IO.File.WriteAllText(testfile, reader.GetString(1), System.Text.Encoding.GetEncoding(1251))
                log("Файл получен и сохранен на кассе как:" & p_msg_id)
            Loop

bombimbom,
...
Рейтинг: 0 / 0
получать данные из оракла пока процедура не выдаст нулевое значение
    #38286590
carrotik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bombimbom,

...вы там в примере по ссылке внимательно посмотрите насчет
ParameterDirection.Output
...
Рейтинг: 0 / 0
получать данные из оракла пока процедура не выдаст нулевое значение
    #38286708
bombimbom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
carrotik,

теперь вернулись к прошлому, ругается на неверное количество или типы аргументов
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
cmd.CommandText = ("test.transpos1.get_mob_file")
            cmd.CommandType = CommandType.StoredProcedure
            OracleCommandBuilder.DeriveParameters(cmd)
            cmd.Parameters("p_pos_id").Value = posid
            cmd.Parameters("p_shop_no").Value = ShopNum
            cmd.Parameters("p_cassa_no").Value = CassaNo
            cmd.Parameters("p_ip").Value = IPNO
            cmd.Parameters.Add("p_msg_id", OracleDbType.NChar).Direction = ParameterDirection.Output
            cmd.Parameters.Add("p_msg_type", OracleDbType.NChar).Direction = ParameterDirection.Output
            cmd.Parameters.Add("p_lob", OracleDbType.Clob).Direction = ParameterDirection.Output
            Dim reader As OracleDataReader = cmd.ExecuteReader
...
Рейтинг: 0 / 0
получать данные из оракла пока процедура не выдаст нулевое значение
    #38286709
bombimbom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plsql
1.
2.
procedure get_mob_file(p_pos_id in number, p_shop_no in number, p_cassa_no in number, p_ip in varchar2, 
  p_msg_id out number, p_msg_type out number, p_lob out clob)



это из оракловой рпоцедуры
...
Рейтинг: 0 / 0
получать данные из оракла пока процедура не выдаст нулевое значение
    #38286799
bombimbom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
когда так

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
 conn.Open()
            cmd.CommandText = ("test.transpos1.get_mob_file")
            cmd.CommandType = CommandType.StoredProcedure
            OracleCommandBuilder.DeriveParameters(cmd)
            cmd.Parameters("p_pos_id").Value = posid
            cmd.Parameters("p_shop_no").Value = ShopNum
            cmd.Parameters("p_cassa_no").Value = CassaNo
            cmd.Parameters("p_ip").Value = IPNO
            Dim reader As OracleDataReader = cmd.ExecuteReader
            p_msg_id = cmd.Parameters("p_msg_id").Direction = ParameterDirection.Output
            p_msg_type = cmd.Parameters("p_msg_type").Direction = ParameterDirection.Output
            p_lob = cmd.Parameters("p_lob").Direction = ParameterDirection.Output
            MessageBox.Show(p_msg_id)    ' тут пишет true
            'If reader.HasRows Then

            Do While reader.Read()
                testfile = "C:\test\in\" & reader.GetInt32(0) & ".txt"
                MessageBox.Show(reader.GetInt32(0))
                'If p_msg_id = True Then
                IO.File.WriteAllText(testfile, reader.GetString(1), System.Text.Encoding.GetEncoding(1251))
                log("Файл получен и сохранен на кассе как:" & p_msg_id)
            Loop
...
Рейтинг: 0 / 0
получать данные из оракла пока процедура не выдаст нулевое значение
    #38286853
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
фиганычbombimbom,

этож пи..дец товарищи...а то... учитывая, что дело касается кассовых систем...

Код: plaintext
>|<ona...

bombimbom, у Вас процедура возвращает за один вызов один набор параметров...
И похоже, что слово цикл Вам не знакомо...
ExecuteReader в данном случае не подойдёт.

Если нужно на выходе получить данные в табличном виде - посмотрите вот сюда
...
Рейтинг: 0 / 0
получать данные из оракла пока процедура не выдаст нулевое значение
    #38288030
bombimbom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот по такой процедуре не ругается и данные не получает
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
 Try
            conn.Open()
            cmd.CommandText = ("test.transpos1.get_mob_file")
            cmd.CommandType = CommandType.StoredProcedure
            'OracleCommandBuilder.DeriveParameters(cmd)
            cmd.Parameters.Add("p_pos_id", OracleDbType.Int32, 20).Value = posid
            cmd.Parameters.Add("p_shop_no", OracleDbType.Int32, 20).Value = ShopNum
            cmd.Parameters.Add("p_cassa_no", OracleDbType.Int32, 20).Value = CassaNo
            cmd.Parameters.Add("p_ip", OracleDbType.NVarchar2, 20).Value = IPNO
            cmd.Parameters.Add("p_msg_id", OracleDbType.Int32, 20).Direction = ParameterDirection.Output
            cmd.Parameters.Add("p_msg_type", OracleDbType.Int32, 20).Direction = ParameterDirection.Output
            cmd.Parameters.Add("p_lob", OracleDbType.Clob).Direction = ParameterDirection.Output
                  
            While reader.Read()
                MessageBox.Show(reader.GetInt32(0))
                'MessageBox.Show(p_msg_id)
                testfile = "C:\test\in\" & p_msg_id & ".txt"
                IO.File.WriteAllText(testfile, p_lob, System.Text.Encoding.GetEncoding(1251))
                log("Файл получен и сохранен на кассе как:" & p_msg_id)
            End While
            reader.Close()


можете подсказать что тут не хватает?
чтение всех ссылокпривело к варианту когда нет ошибок а также данных
...
Рейтинг: 0 / 0
получать данные из оракла пока процедура не выдаст нулевое значение
    #38288032
bombimbom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я использую VB.NET может в этом дело?
...
Рейтинг: 0 / 0
получать данные из оракла пока процедура не выдаст нулевое значение
    #38288039
bombimbom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex Kuznetsov,

учитывая что с vb.net я знаком всего 3 недели, не удивительно что у меня возникают такие вопросы
...
Рейтинг: 0 / 0
получать данные из оракла пока процедура не выдаст нулевое значение
    #38288195
bombimbom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
получилось добавил цикл do loop
подскажите насколько это правильно поставить do
в самом начале выполнения процедуры, а loop в самом конце после end try
...
Рейтинг: 0 / 0
получать данные из оракла пока процедура не выдаст нулевое значение
    #38288265
bombimbom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
даа все хорошо пока ошибка не возникнет....
...
Рейтинг: 0 / 0
получать данные из оракла пока процедура не выдаст нулевое значение
    #38291335
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bombimbomAlex Kuznetsov,

учитывая что с vb.net я знаком всего 3 недели, не удивительно что у меня возникают такие вопросыА при чём здесь тот факт, что Вы знакомы с VB.NET всего три недели?
Это к рассматриваемому вопросу не имеет никакого отношения.

Во первых, разберитесь, что и главное как возвращает хранимая процедура.
Исходя из полученных ответов о том как происходит возврат данных, Вы сможете определиться с методом вызова процедуры и методом обработки данных.

Тем не менее, судя по тому, что Вы показали в качестве параметров процедуры, могу сказать, что ExecuteReader здесь использовать нельзя, потому что нет возвращаемого курсора. Поэтому, необходимо в цикле запускать процедуру с соответствующими параметрами и проверять возвращаемые значения.
Почитайте хотя-бы что-нибудь про организацию циклов в VB.NET.

А также, если есть возможность, попробуйте переписать хранимую процедуру таким образом, чтобы она возвращала ссылку на курсор (REF CURSOS) - ссылку на статью я Вам уже дал. Тогда сможете использовать ExecuteReader.

Удачи...
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / получать данные из оракла пока процедура не выдаст нулевое значение
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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