powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Непонятная проблема
6 сообщений из 6, страница 1 из 1
Непонятная проблема
    #37114227
kalash-serg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте. Есть такая процедура, которая по предположению должна выбирать одну строку и менять ее. Казалось бы элементарная проблема. Но процедура не работает!!!

Почему-то обновление не происходит. Хотя дебаг показывает, что команды с апдейтом выполняются.

Кроме того, сделал попытку вывести всю таблицу в DataGrid на форму, там ее поменять, а потом апдейтить. Вот так работает. Но это не вариант, так как работаем на тестовой базе, а реальная база очень большая. И попытка загрузить ее на форму неизбежно вызовет зависание.

Прошу помочь мне, где я ошибаюсь. Уверен, что ошибка мелкая и глупая, но ее не видно.
Код: 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.
    Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click

        Dim da As System.Data.SqlClient.SqlDataAdapter = SqlDtAdapSexes
        Dim cmd As System.Data.SqlClient.SqlCommand
        Dim parm As System.Data.SqlClient.SqlParameter
        Dim conn As System.Data.SqlClient.SqlConnection = SqlConnection1



        cmd = New System.Data.SqlClient.SqlCommand("SELECT BRK_Kod_Str, BRK_Jen_Pol_Rojden FROM tablBRK WHERE BRK_Kod_Str=45591", conn)

        da.SelectCommand = cmd

        Dim DtsSexesVer2 As DataSet = New DataSet("SexesDts")

        da.Fill(DtsSexesVer2)

        Dim MainTableBRK As DataTable
        MainTableBRK = DtsSexesVer2.Tables("tablBRK")

        Dim CurrTableBRK As DataRow

        CurrTableBRK = MainTableBRK.Rows( 0 )
        Console.WriteLine("{0} {1}", _
            CurrTableBRK("BRK_Kod_Str").ToString, _
            CurrTableBRK("BRK_Jen_Pol_Rojden").ToString)
        MsgBox("begining string")

        cmd = New System.Data.SqlClient.SqlCommand("UPDATE tablBRK SET BRK_Jen_Pol_Rojden = 55 WHERE BRK_Kod_Str = 45591", conn)

                da.UpdateCommand = cmd
                da.Update(DtsSexesVer2)

                Console.WriteLine("{0} {1}", _
                    CurrTableBRK("BRK_Kod_Str").ToString, _
                    CurrTableBRK("BRK_Jen_Pol_Rojden").ToString)

    End Sub
...
Рейтинг: 0 / 0
Непонятная проблема
    #37114263
kalash-serg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Напишите, пожалуйста, хоть понятна ли проблема. Или непонятна сформулирована. Кто с чем-нибудь таким сталкивался? Какое примерно хотя бы направление работы?
...
Рейтинг: 0 / 0
Непонятная проблема
    #37114312
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема сформулирована не в том разделе.
...
Рейтинг: 0 / 0
Непонятная проблема
    #37115753
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давайте-ка в ADO.NET

Модератор: Тема перенесена из форума "Visual Basic".
...
Рейтинг: 0 / 0
Непонятная проблема
    #37115771
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы хоть примеры посмотрите... DataAdapter.Update
Если Вам нужно просто выполнять произвольные команды, то адаптер вам не уперся... По примеру - в DtsSexesVer2 нет ни каких изменений -> da.Update(DtsSexesVer2) - не делает нифига.
...
Рейтинг: 0 / 0
Непонятная проблема
    #37116127
kalash-serg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
buser,

спасибо за ответ.

Так в Dataset'е невозможно поменять поля таблиц. Там Item имеет свойство ReadOnly.

Вообще стоит задача: считать построчно - анализ полей выборки - на основе содержимого изменить его - сохранить строку обратно в таблицу - считать следующую
Поэтому изначальный замысел был. Считать построчно в DataGrid на форму. Потом в в DataGrid поменять значения. И сделать апдейт. Но тоже не работает. как я понял потому что в DataSet эти сроки считаются неизмененными.

buser, подскажите, пожалуйста, как верно построить такой алгоритм.

Вот реализация изначального замысла.
Код: 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.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
    Function obr(ByVal str As String)
        Select Case str
            Case "Ж"
                Return "2"
                'If DtsSexes1.tablBRK.Rows(0).RowState = DataRowState.Modified Then MsgBox("string modified")
                'MsgBox(str)
            Case "М"
                Return "1"
        End Select
    End Function

   Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
        ' ---- вычисляем число записей в таблице ----
        DtsFindNumRows1.Clear()
        SqlDtAdapFindNumberRows.Fill(DtsFindNumRows1) 'грузится в TextBox

        Dim MaxNumRows As Integer =  0 
        MaxNumRows = CInt(TextBox1.Text) 'хранится число строк в таблице

        '----- вычисляем первую запись -----
        Dim strSaveSelectQuery As String

        SqlDtAdapSexes.SelectCommand.CommandText = "SELECT TOP 1 BRK_Kod_Str FROM tablBRK ORDER BY BRK_Kod_Str"

        DataGrid1.DataSource = DtsSexes1.tablBRK
        DtsSexes1.Clear()
        SqlDtAdapSexes.Fill(DtsSexes1.tablBRK)
        Dim n1, n2, nLastElement As Integer

        n2 = DataGrid1.Item( 0 ,  0 ) 'номер id первого элемента

        SqlDtAdapSexes.SelectCommand.CommandText = "SELECT TOP 1 BRK_Kod_Str FROM tablBRK ORDER BY BRK_Kod_Str DESC"

        DataGrid1.DataSource = DtsSexes1.tablBRK
        DtsSexes1.Clear()
        SqlDtAdapSexes.Fill(DtsSexes1.tablBRK)

        nLastElement = DataGrid1.Item( 0 ,  0 ) ' номер последнего элемента

        SqlDtAdapSexes.SelectCommand.CommandText = "SELECT BRK_Kod_Str, BRK_Muj_Pol_Rojden, BRK_Jen_Pol_Rojden FROM tablBRK WHERE BRK_Kod_Str = " & CStr(n2) & " ORDER BY BRK_Kod_Str"

        DtsSexes1.Clear()
        SqlDtAdapSexes.Fill(DtsSexes1.tablBRK)

        n1 = n2

        Dim cmd As System.Data.SqlClient.SqlCommand
        Dim conn As System.Data.SqlClient.SqlConnection = SqlConnection1

        Dim i As Integer

        Do While (n1 <> nLastElement)' перебираем все строчки

            SqlDtAdapSexes.SelectCommand.CommandText = "SELECT BRK_Kod_Str, BRK_Muj_Pol_Rojden, BRK_Jen_Pol_Rojden FROM tablBRK WHERE BRK_Kod_Str = " & CStr(n1)

            DataGrid1.DataSource = DtsSexes1.tablBRK
            DtsSexes1.Clear()
            SqlDtAdapSexes.Fill(DtsSexes1.tablBRK)

            For i =  0  To DtsSexes1.tablBRK.Columns.Count -  1 ' перебираем все столбцы
                If (DtsSexes1.tablBRK.Rows.Count <>  0 ) AndAlso (Not IsDBNull(DtsSexes1.tablBRK.Rows( 0 ).Item( 1 ))) AndAlso (Not IsDBNull(DtsSexes1.tablBRK.Rows( 0 ).Item( 2 ))) Then

                    Console.WriteLine("{0} {1} {2}", _
                    CStr(DtsSexes1.tablBRK.Rows( 0 ).Item( 0 )), _
                    CStr(DtsSexes1.tablBRK.Rows( 0 ).Item( 1 )), _
                    CStr(DtsSexes1.tablBRK.Rows( 0 ).Item( 2 )))

                    If (CStr(DataGrid1.Item( 0 , i)) <> " ") And (CStr(DataGrid1.Item( 0 , i)) <> "") And (Not IsDBNull(DataGrid1.Item( 0 , i))) And (Not DtsSexes1.tablBRK.Columns(i).ReadOnly) Then
                        DataGrid1.Item( 0 , i) = obr(CStr(DataGrid1.Item( 0 , i)))' obr - это процедурка, где меняем DataGrid1.Item(0, i)

                    cmd = New System.Data.SqlClient.SqlCommand("UPDATE tablBRK SET BRK_Jen_Pol_Rojden = 9 WHERE BRK_Kod_Str = " & CStr(n1), conn)
                    SqlDtAdapSexes.UpdateCommand = cmd

                        Try
                            SqlDtAdapSexes.Update(DtsSexes1.tablBRK)
                        Catch ex As Exception
                            MsgBox(ex.ToString)
                        End Try


                    End If

                End If
            Next i
            n1 +=  1 
        Loop
    End Sub

...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Непонятная проблема
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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