Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / получать данные из оракла пока процедура не выдаст нулевое значение / 18 сообщений из 18, страница 1 из 1
05.06.2013, 10:13
    #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
05.06.2013, 10:28
    #38286295
фиганыч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получать данные из оракла пока процедура не выдаст нулевое значение
bombimbom,

этож пи..дец товарищи...
...
Рейтинг: 0 / 0
05.06.2013, 11:20
    #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
05.06.2013, 11:22
    #38286400
bombimbom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получать данные из оракла пока процедура не выдаст нулевое значение
честно говоря его пробовал, но видимо торможу ))
ну теперь раз вы сказали что им можно воспользоваться то буду его добивать до конца :)
...
Рейтинг: 0 / 0
05.06.2013, 11:53
    #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
05.06.2013, 11:57
    #38286483
bombimbom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получать данные из оракла пока процедура не выдаст нулевое значение
получается после цикла пропадают данные переменной
...
Рейтинг: 0 / 0
05.06.2013, 12:24
    #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
05.06.2013, 12:46
    #38286590
carrotik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получать данные из оракла пока процедура не выдаст нулевое значение
bombimbom,

...вы там в примере по ссылке внимательно посмотрите насчет
ParameterDirection.Output
...
Рейтинг: 0 / 0
05.06.2013, 13:36
    #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
05.06.2013, 13:37
    #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
05.06.2013, 14:18
    #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
05.06.2013, 14:45
    #38286853
Alex Kuznetsov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получать данные из оракла пока процедура не выдаст нулевое значение
фиганычbombimbom,

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

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

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

Если нужно на выходе получить данные в табличном виде - посмотрите вот сюда
...
Рейтинг: 0 / 0
06.06.2013, 11:37
    #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
06.06.2013, 11:38
    #38288032
bombimbom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получать данные из оракла пока процедура не выдаст нулевое значение
я использую VB.NET может в этом дело?
...
Рейтинг: 0 / 0
06.06.2013, 11:40
    #38288039
bombimbom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получать данные из оракла пока процедура не выдаст нулевое значение
Alex Kuznetsov,

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

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

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

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

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

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


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