Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
Крутой форумчанин
154 / 154 / 8
Регистрация: 09.01.2011
Сообщений: 298

Как создать DataAdapter для возможности сохранения (обновления) данных

15.11.2011, 16:47. Показов 2854. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Делаю так, отдельной процедурой гружу таблицы в Dataset:

VB.NET
1
2
3
4
5
6
7
8
9
    Private Sub LoadTable(ByVal TableName As String)
        Dim DA As New SqlDataAdapter("SELECT * FROM " & TableName, Connection)
        Dim BLD As New SqlCommandBuilder(DA)
        DA.DeleteCommand = BLD.GetDeleteCommand
        DA.InsertCommand = BLD.GetInsertCommand
        DA.UpdateCommand = BLD.GetUpdateCommand
        DA.FillSchema(DS, SchemaType.Mapped, TableName)
        DA.Fill(DS, TableName)
    End Sub
Загрузил. Связал с датагрид. Но теперь, чтобы сохранить изменения, надо вызвать DA.Update.
Вопрос: где мне DataAdapter для таблицы брать?
У меня есть только DS.Tables("Выплаты"). Получается, нужно сохранить где-то в отдельной переменной DataAdapter?


полный код ниже

VB.NET
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
Imports System.Data.SqlClient
 
Public Class frmMain
    Dim ConnectionString As String
    Dim Connection As SqlConnection
    Dim DS As New DataSet
 
    Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.Show()
        ConnectionString =
            "Data Source='server';" &
            "Initial Catalog='payto';" &
            "User Id='sa';" &
            "Password='sa';"
        Connection = New SqlConnection(ConnectionString)
 
        LoadTable("Списки")
        dgvСписки.DataSource = DS
        dgvСписки.DataMember = ("Списки")
 
        LoadTable("Выплаты")
        DS.Relations.Add("Списки2Выплаты", DS.Tables("Списки").Columns("id"), DS.Tables("Выплаты").Columns("Список"))
        dgvВыплаты.DataSource = DS
        dgvВыплаты.DataMember = "Списки.Списки2Выплаты"
 
        'устанавливаем формат для полей с деньгами 0.00
        dgvВыплаты.Columns("Сумма").DefaultCellStyle.Format = "0.00"
        dgvСписки.Columns("Сумма").DefaultCellStyle.Format = "0.00"
 
        'скрываем ненужные столбцы
        dgvВыплаты.Columns("id").Visible = False
        dgvСписки.Columns("id").Visible = False
    End Sub
 
    Private Sub LoadTable(ByVal TableName As String)
        Dim DA As New SqlDataAdapter("SELECT * FROM " & TableName, Connection)
        Dim BLD As New SqlCommandBuilder(DA)
        DA.DeleteCommand = BLD.GetDeleteCommand
        DA.InsertCommand = BLD.GetInsertCommand
        DA.UpdateCommand = BLD.GetUpdateCommand
        DA.FillSchema(DS, SchemaType.Mapped, TableName)
        DA.Fill(DS, TableName)
    End Sub
 
    Private Sub tsAddList_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsAddList.Click
        Dim nr As DataRow = DS.Tables("Списки").NewRow
        DS.Tables("Списки").Rows.Add(nr)
    End Sub
 
    Private Sub tsAddPay_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsAddPay.Click
        Dim nr As DataRow = DS.Tables("Выплаты").NewRow
        nr.Item("Список") = dgvСписки.CurrentRow.Cells("id").Value
        DS.Tables("Выплаты").Rows.Add(nr)
    End Sub
 
    Private Sub СохранитьToolStripButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsSaveLists.Click
 
    End Sub
 
    Private Sub tsSavePays_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsSavePays.Click
        dgvВыплаты.EndEdit()
        DS.Tables("Выплаты")
    End Sub
End Class
Возможно кто-то более удобный способ подскажет. Поделитесь сурсами. Меня раздражает то, что нельзя в одном месте хранить все объекты для работы таблицей.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.11.2011, 16:47
Ответы с готовыми решениями:

Оптимизация изображения для сохранения (и очень частого обновления) в БД
Всем привет, Предистория: На днях я загорелся идеей изобретения велосипеда :) А именно решил написать программу для удаленного...

Как указать место для сохранения данных в txt
с помощью параметра командной строки? Заранее спасибо!

Как создать цикл для обновления картинки в TImage?
Здравствуйте. Создал форму,на неё поставил TImage,на неё процедура: procedure TForm2.Image1Click(Sender: TObject); begin ...

4
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
16.11.2011, 09:42
Цитата Сообщение от cergew Посмотреть сообщение
Вопрос: где мне DataAdapter для таблицы брать?
ну так вот же ты создаешь адаптер
Цитата Сообщение от cergew Посмотреть сообщение
Dim DA As New SqlDataAdapter("SELECT * FROM " & TableName, Connection)
Только он у тебя объявлен в методе и универсален для всех таблиц, я бы рекомендовал использовать для каждой таблицы собственный адаптер.

Цитата Сообщение от cergew Посмотреть сообщение
Меня раздражает то, что нельзя в одном месте хранить все объекты для работы таблицей.
Кто тебе такое сказал?
0
Крутой форумчанин
154 / 154 / 8
Регистрация: 09.01.2011
Сообщений: 298
16.11.2011, 14:35  [ТС]
Цитата Сообщение от nio Посмотреть сообщение
ну так вот же ты создаешь адаптер?
Спасибо. Я осознаю, что создаю ДатаАдаптер, только вот это локальная "переменная" и она уничтожается после end sub.

VB.NET
1
2
3
dgvВыплаты.DataSource = Выплаты.DT
...
Выплаты.DA.Update
Я видимо как-то неправильно объяснил что мне нужно. А наверное, я и сам не знаю, что мне нужно

Сделал пока так:
Создал структуру Table, чтобы хранить в ней и адаптер, и таблицу. Объявил соответствующие переменные с типом данных Table
VB.NET
1
2
3
4
5
6
7
    Private Structure Table
        Dim DT As DataTable
        Dim DA As SqlDataAdapter
    End Structure
 
    Dim Выплаты As Table
    Dim Списки As Table
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
    Private Sub LoadTable(ByVal TableName As String, ByRef Dest As Table)
        Dim DA As New SqlDataAdapter("SELECT * FROM " & TableName, Connection)
        Dim BLD As New SqlCommandBuilder(DA)
        DA.DeleteCommand = BLD.GetDeleteCommand
        DA.InsertCommand = BLD.GetInsertCommand
        DA.UpdateCommand = BLD.GetUpdateCommand
        Dest.DA = DA
        Dest.DT = New DataTable
        Dest.DA.FillSchema(Dest.DT, SchemaType.Mapped)
        Dest.DA.Fill(Dest.DT)
        DS.Tables.Add(Dest.DT)
    End Sub
VB.NET
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
    Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.Show()
        ConnectionString =
            "Data Source='srvsitex';" &
            "Initial Catalog='pavlov_payto';" &
            "User Id='sa';" &
            "Password='@dm!n#1rai';"
        Connection = New SqlConnection(ConnectionString)
 
        LoadTable("Списки", Списки)
        dgvСписки.DataSource = DS
        dgvСписки.DataMember = "Списки"
 
        LoadTable("Выплаты", Выплаты)
        DS.Relations.Add("Списки2Выплаты", DS.Tables("Списки").Columns("id"), DS.Tables("Выплаты").Columns("Список"))
        dgvВыплаты.DataSource = DS
        dgvВыплаты.DataMember = "Списки.Списки2Выплаты"
 
        'устанавливаем формат для полей с деньгами 0.00
        dgvВыплаты.Columns("Сумма").DefaultCellStyle.Format = "0.00"
        dgvСписки.Columns("Сумма").DefaultCellStyle.Format = "0.00"
 
        'скрываем ненужные столбцы
        dgvВыплаты.Columns("id").Visible = False
        dgvСписки.Columns("id").Visible = False
    End Sub
Это вообще, нормально? Или я изобрёл какой-то велосипед?
Вот теперь я могу вызвать спокойно Выплаты.DA.Update
VB.NET
1
2
3
4
    Private Sub tsSavePays_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsSavePays.Click
        dgvВыплаты.EndEdit()
        Выплаты.DA.Update(Выплаты.DT)
    End Sub
Всё хорошо: и в базу сохраняется, и я счастлив - потому что мне надо помнить в коде только название таблицы. Просто без таких танцев с бубном, когда много таблиц будет, что для каждой создавать три переменные?

Добавлено через 13 минут
Надо как-то ещё умнее это делать, ещё проще. А вот как...

Добавлено через 1 час 30 минут
Кстати, тему переименовал модератор, не знаю зачем. Как создать датаадаптер я знаю ))
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
16.11.2011, 16:19
Цитата Сообщение от cergew Посмотреть сообщение
Кстати, тему переименовал модератор, не знаю зачем
почитай правила(п.2.3 и п.2.4), поймешь
0
Крутой форумчанин
154 / 154 / 8
Регистрация: 09.01.2011
Сообщений: 298
21.11.2012, 13:22  [ТС]
Цитата Сообщение от cergew Посмотреть сообщение
Надо как-то ещё умнее это делать, ещё проще. А вот как...
Прошу прощения за некропостинг, но - я потом нашёл способ сделать всё гораздо проще и удобнее - это LINQ и Entity Framework. Рекомендую.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.11.2012, 13:22
Помогаю со студенческими работами здесь

Как вы делаете Update данных в БД (при использовании DataGridView, DataSet, DataAdapter)
Доброго дня, форумчане. Отдельный привет знакомым форумчанам. Решил поднять я старую наболевшую тему про DGV и DS. Тыщу лет назад я...

Создать базу данных используя только возможности консольного приложения
Здравствуйте, нужна помощь по созданию базы данных используя только возможно консольного приложения. Разработать программу, выполняющую...

Создать базу данных используя только возможности консольного приложения
Предметная область: Учет программного обеспечения на кафедре ИВС Схема базы данных: Учет ПО (ID, Тип, Название, Номер_компьютера,...

Как создать диалог выбора файла для чтения и сохранения файла?
Добрый день! Написал простейший текстовый редактор для Windows. Все работает, текст читает из файла и сохраняет. Но я...

Запись данных в базу данных mdb с использованием DataAdapter и DataSet
Попробовал сделать Update для таблицы контактов: private void Form1_Load(object sender, EventArgs e) { OleDbConnection...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru