Программный коннект к SQL Server и DataAdapter.Update()

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

Модератор: BV

AlekseyVB
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 71
Зарегистрирован: 10.04.2009 (Пт) 18:47

Программный коннект к SQL Server и DataAdapter.Update()

Сообщение AlekseyVB » 21.02.2010 (Вс) 22:17

Столкнулся с проблемой сохранения изменений в базу данных через элементы управления (DataGridView, TextBox и т.д.), используя метод DataAdapter.Update()
Оказалось, проблема крылась в нехватке - SqlCommandBuilder(), который формирует SQL запросы на INSERT, DELETE, UPDATE, которые возвращают измененные данные DataSet обратно в базу данных.

Кроме того, DataAdapter.Update() ругается, если в загруженной в DataSet таблице отсутствует PrimaryKey, то есть идентификатор каждой строки таблицы.

Код: Выделить всё
Imports System.Data.SqlClient

Public Class Form1
    Dim SqlCon As New SqlConnection
    Dim Command As New SqlCommand
    Dim DA As New SqlDataAdapter
    Dim DS As New DataSet
    'Создаем SqlCommandBuilder для преобразования действия метода DA.Update() в SQL-команду, которая вносит соответствующие изменения в базу данных
    Dim SqlBuilder As New SqlCommandBuilder(DA)

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim strSQLServerName As String
        Dim strPathToDB As String

        'Изменяем значение строки на ИМЯ SQL SERVER к которому коннектимся
        strSQLServerName = ".\SQLEXPRESS"
        'Изменяем значение строки на полный путь к файлу базы данных, или используем Application.StartupPath с указанием файла если необхожимо открыть БД из папки приложения
        strPathToDB = "C:\ExampleDB\ExampleDBFile.mdf"

        SqlCon.ConnectionString = "Data Source=" & strSQLServerName & ";AttachDbFilename=" & strPathToDB & ";Integrated Security=True;Connect Timeout=30;User Instance=True"
        'Открываем соединение, создаем запрос и заполняем DataAdapter и DataGridView данными таблицы "tblTable" (не забываем заменить имя таблицы на имя своей)
        SqlCon.Open()

        Command = SqlCon.CreateCommand
        Command.CommandText = "SELECT * FROM tblTable"

        DA.SelectCommand = Command
        DA.Fill(DS, "tblTable")

        DGView.DataSource = DS
        DGView.DataMember = "tblTable"
    End Sub

    Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click
        'Сохраяем измения, произведенные в DataGridView, в базу данных
        DA.Update(DS, "tblTable")
    End Sub

    Private Sub btnExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExit.Click
        'Закрываем соединение и очищаем память
        Command = Nothing
        DA = Nothing

        SqlCon.Close()
        SqlCon.Dispose()
        End
    End Sub
End Class


Данный способ также в точности подходит к SQLite, только свойству ConnectionString присваевается применимое к SQLite значение.

Вернуться в Наши проекты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

    TopList