SqlCommandBuilder với Insert, Update và Delete dữ liệu từ DataGridview đến Database

14:00 ngày 27-10-2017

Nếu DataTable được map hay được select ra từ một bảng. Chúng ta có thể dùng SqlCommandBuilder để tự động tạo ra DeleteComment, InsertCommand và UpadteComment cho DataAdapter. Yêu cầu ở đây chúng ta phải có câu lệnh SelectCommand cho DataAdapter. Và câu lệnh phải trả về ít nhất 1 khóa hoặc là unique column. Nếu không chúng ta sẽ nhận Exeption khi cố gắng delete hoặc update một column (Nó vẫn có thể hoạt động cho Insert)

Dưới đây là ví dụ để Insert, UpdateDelete dự liệu trong database từ DataGridview. Với ví dụ này, chúng ta có thể sửa, xóa, thêm dữ liệu trực tiếp trên Gridview. Những thay đổi trên Gridview sẽ thông qua DataSource cập nhật trực tiếp lên DataTable. Sau khi bấm Save, DataAdapter sẽ gọi hàm Update cho DataTable, dữ liệu sẽ được cập nhật vào Database.
Luồng dữ liệu được thể hiện như sau

DataGridview <=> DataSource <=> DataTable <=> DataAdapter <=> Database

 - Ở chiều View: Dữ liệu từ database sẽ được DataAdapter thông qua SelectCommand sẽ Fill vào DataTable. DataTable được gán cho DataSource của Gridview. Sau đó dữ liệu được Bind lên View
 - Ở chiều hiệu chỉnh: Dữ liệu được người dùng xóa, sửa hay thêm trực tiếp lên Gridview. Những thay đổi này sẽ cập nhật trưc tiếp DataTable (được chỉ định thông qua DataSource). Thông qua DataAdapter, hàm update sẽ cập nhật dữ liệu từ DataTable vào Database

Script tạo Table

USE [Test]
GO

/****** Object:  Table [dbo].[Customers]    Script Date: 10/27/2017 2:38:06 PM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[Customers](
	[Id] [int] IDENTITY(1,1) NOT NULL,
	[Name] [nvarchar](500) NULL,
	[Address] [nvarchar](500) NULL,
	[Note] [nvarchar](500) NULL,
 CONSTRAINT [PK_Customers] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

 

Form1.css file

using System;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;

namespace DataGridViewAndSQLExample
{
    public partial class Form1 : Form
    {
        private string connectionString = "Data Source=.;Initial Catalog=Test;Integrated Security=True";
        private string selectQueryString = "SELECT * FROM Customers"; 
        private SqlConnection connection = null;
        private SqlDataAdapter dataAdapter = null;
        private DataTable dataTable = null;

        public Form1()
        {
            InitializeComponent();
        }

        private void ReLoadData()
        {
            try
            {
                connection.Open();
                dataTable.Clear();
                dataAdapter.Fill(dataTable);
                dataGridView1.DataSource = dataTable;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                connection.Close();
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            try
            {
                connection = new SqlConnection(connectionString);
                connection.Open();
                dataAdapter = new SqlDataAdapter(selectQueryString, connection);
                var sqlCommandBuilder = new SqlCommandBuilder(dataAdapter);
                dataTable = new DataTable();
                dataAdapter.Fill(dataTable);
                dataGridView1.DataSource = dataTable;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                connection.Close();
            }
        }

        private void btSave_Click(object sender, EventArgs e)
        {
            try
            {
                connection.Open();
                dataAdapter.Update(dataTable);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                connection.Close();
            }
            ReLoadData();
        }
    }
}

Link dowload source tại đây

 

Phản Hồi

Viết Phản Hồi

Chuyên Mục

Phản Hồi Mới