So sánh kiểu dữ liệu ngày tháng trong C#

So sánh kiểu dữ liệu ngày tháng trong C#, sử dụng cách sau:

Ví dụ:

dvEvents.RowFilter = “date > ‘” + DateTime.Now.ToString() + “‘”;

Advertisements

Lỗi khi cài đặt SQL Server 12 – Error while enabling Windows feature: NetFx3

Cách khắc phục lỗi khi cài đặt SQL Server 2012/SQL Express 2012 gặp lỗi sau “Error while enabling Windows feature: NetFx3”.

Nguyên nhân:

Windows does not include .NET 3.5 (include .NET 2.0 and 3.0) by default.

Khắc phục

  • Vào Settings > Chọn Control Panel và sau đó chọn Programs
  • Bấm vào Turn Windows features on or off, và sau đó người dùng thấy danh sách các tính năng của Windows.
  • Bật tính năng bằng cách click vào .NET Framework 3.5 (include .NET 2.0 and 3.0)

Lưu ý: Khi cài tính năng này cần phải có kết nối internet.

 

Nguồn: Microsoft

Database index là gì?

Database index (chỉ mục) là gì?

  • Chỉ mục cho phép chương trình tìm dữ liệu trong bảng mà không cần quét toàn bộ bảng.
  • Chỉ mục được dùng để tìm kiếm dữ liệu, con trỏ chỉ mục được sử dụng để định vị (chỉ ra) hàng có chứa giá trị cần tìm kiếm.
  • Chỉ mục xây dung hợp lý có thể cải thiện hiệu suất cơ sở dữ liệu đáng kể.

Chỉ mục có 2 loại: Chỉ mục vật lý và chỉ mục logic

  • Mỗi bảng chỉ có một chỉ mục vật lý và có thể có nhiều hơn 1 chỉ mục logic
  • Chỉ mục vật lý các dòng dữ liệu sắp xếp theo thứ tự vật lý lưu trữ trên đĩa
  • Chỉ mục logic lưu bảng chỉ mục và địa chỉ của dữ liệu được lưu trữ, mỗi khi tìm thấy dữ liệu cần tìm hệ quản trị  csdl truy cập đến địa chỉ được đánh số để lấy dữ liệu mà không cần phải duyệt qua tất cả các bản ghi

Cách tạo chỉ mục

CREATE [UNIQUE] [CLUSTERED|NONCLUSTERED]
INDEX index_name
ON table_name (column_name[, column_name]…)
[WITH
[PAD_INDEX]
[[,]FILLFACTOR=x]
[[,]DROP_EXISTING]
]

Ví dụ

– – Clustered index

CREATE CLUSTERED INDEX CLINDX_titleid ON Roysched (title_id)

– – Noncluster index

CREATE NONCLUSTERED INDEX NCLINDX_ordnum ON sales (ord_num)

Tham số FILLFACTOR là khoảng trống để dành để chèn dữ liệu trong trường hợp sử dung Clustered index để tránh trường hợp khi trang dữ liệu đầy phải tách trang để bổ sung không gian trống. Số fillfactor 100% là sử dung full, không để dành phần trống trong trang dữ liệu.

CLR-Stored Procedures

CLR stored procedures là gì?

CLR stored procedures là stored procedure được tạo bởi managed code (C#, VB.NET, …)

Khi nào sử dụng CLR stored procedures?

Khi stored procedure không viết được với T-SQL

Cách tạo clr stored procedures?

Các bước dưới đây hướng dẫn cách xây dựng CLR – Stored Procedured

1. Tạo Database project trong C# và viết mã như sau

using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;

public partial class StoredProcedures
{
[Microsoft.SqlServer.Server.SqlProcedure]
public static void SqlStoredProcedure1 ()
{
SqlPipe pipe = SqlContext.Pipe;
pipe.Send(“Hello world”);
}
}

2. Viết mã trong SQL Server

clrSP

Script check database and table was existed

Script check database and table was existed

DECLARE @dbname nvarchar(128)
SET @dbname = N’dbTest5′

IF (EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE (‘[‘ + name + ‘]’ = @dbname OR name = @dbname)))
begin
use master
drop database dbtest5
end
go
create database dbtest5
go

use dbtest5
go

— Run this script at any time, either to:
— (a) Create the demo tables in a different database (see note in previous example)
— (b) Restore the demo tables to their original state

if exists (select * from sysobjects where name = ‘PurchaseItem’) drop table PurchaseItem
if exists (select * from sysobjects where name = ‘Purchase’) drop table Purchase
if exists (select * from sysobjects where name = ‘Customer’) drop table Customer
if exists (select * from sysobjects where name = ‘MedicalArticles’) drop table MedicalArticles
if exists (select * from sysobjects where name = ‘Product’) drop table Product
go

create table Customer
(
ID int not null primary key,
Name nvarchar(30) not null
)

create table Purchase
(
ID int not null primary key,
CustomerID int null references Customer (ID),
Date datetime not null,
Description varchar(30) not null,
Price decimal not null
)

create table PurchaseItem
(
ID int not null primary key,
PurchaseID int not null references Purchase (ID),
Detail varchar(30) not null,
Price decimal not null
)

create table MedicalArticles
(
ID int not null primary key,
Topic varchar (20),
Abstract nvarchar (2000)
)

create table Product
(
ID int not null primary key,
Description varchar(30) not null,
Discontinued bit not null,
LastSale datetime not null
)

Sử dụng trigger (2)

Bài trước chúng ta đã đề cập về cú pháp và cách sử dụng Trigger, bài này ứng dụng trigger vào vấn đề tự động hóa một số tác vụ của hệ thống.

Nếu bạn chưa biết cú pháp sử dụng trigger, tham khảo bài viết này trước khi đọc tiếp bài viết này Trigger và cách sử dụng

Bài toán thực tế đặt ra như sau:

Hệ thống quản lý thư viện có các bảng trong đó có bảng Sách để quản lý số sách có trong thư viện, cấu trúc của bảng sách gồm các trường

Sach
ID (Char(10))
Tieude
Tacgia
Tomtat
Soluong

Bảng mượn trả để theo dõi thành viên mượn và trả sách, cấu trúc các trường của bảng MuonTra

MuonTra
Id
ThanhVienID
SachId
NgayMuon
NgayTra

Nghiệp vụ bài toán được cho là, khi một người mượn sách, một bản ghi được thêm vào bảng mượn trả và số sách giảm 1 cuốn. Khi trả sách, số lượng của cuốn sách đó tăng thêm 1 và khi trả sách, thủ thư chỉ cần cập nhật trường ngày trả của hàng tương ứng với việc mượn trả sách

Bây giờ chúng ta cài đặt trigger để tự động hóa việc tăng hoặc giảm số lượng khi cho mượn hoặc nhận lại sách

Trigger 1 – Giảm số lượng sách khi cho mượn

Create trigger InsTrigger on MuonTra

FOR INSERT

As

Declare @bookCode char(10)

select @bookCode = Id from inserted

update Sach set Soluong = Soluong – 1 where Id = @bookCode

Trigger 2- tăng số lượng sách khi nhận lại sách

Create trigger UpdTrigger on MuonTra

FOR Update

As

Declare @bookcode char(10)

select @bookcode = Id from inserted

update Sach set Soluong = Soluong + 1 where Id = @bookcode

Trigger và cách sử dụng

Trigger là gì?

Về bản chất, trigger là một đối tượng của SQL Server, giống như stored procedures hoặc function nhưng điểm KHÁC là trigger được tự động thực hiện mỗi khi có các thao tác dữ liệu trên bảng hoặc đối tượng mà chúng ta cài đặt Trigger.

Trigger sử dụng vào mục đích gì?

Khi nói đến ràng buộc dữ liệu (constraints), chúng ta thường được đề cập các loại ràng buộc sau:

  • Primary key – Khóa chính
  • Foreign key – khóa ngoại
  • Unique key – duy nhất (không trùng lặp giá trị)
  • Not null – không được phép để rỗng
  • Default – giá trị mặc định
  • Check – ràng buộc kiểm tra
  • Trigger – trigger

Với các ràng buộc dữ liệu phức tạp, không cài đặt được với các loại ràng buộc trên, chúng ta sử dụng loại ràng buộc này – trigger.

Bên cạnh đó, trigger còn được dùng tự động lưu nhật ký các thao tác dữ liệu xảy ra. Ví dụ, khi giao dịch ngân hàng, một phát sinh giao dịch xảy ra có thể lưu nhật ký TỰ ĐỘNG bằng trigger thực hiện một cách đơn giản.

Bảng Inserted, deleted

Khi trigger xảy ra, SQL Server sử dụng 2 bảng này để phục vụ cho công việc mà trigger đảm trách, chức năng của từng bảng như sau

Thao tác dữ liệu Inserted Deleted
INSERT Dữ liệu thêm mới được lưu vào bảng này Không sử dụng
DELETE Không sử dụng Dữ liệu sẽ xóa được lưu vào bảng này
UPDATE Dữ liệu mới sẽ thay đổi Dữ liệu cũ trước khi thay đổi

Cú pháp

CREATE TRIGGER Trigger_name
ON table_name
FOR [DELETE, INSERT, UPDATE]
AS

Sql_statements

Giải thích

Trigger có tên Trigger_name được tạo ra trên bảng table_name và trigger được gọi (chạy) khi có thao tác DELETE, INSERT, UPDATE trên bảng đó

Ví dụ 1

CREATE TRIGGER CheckDiscountUpd

ON Products

FOR UPDATE AS

IF (SELECT discount FROM inserted) > (select max(Maxdisc) from discounts)

BEGIN

PRINT ‘You cannot assign a discount greater than max allowed discount’

ROLLBACK TRANSACTION

END

Giải thích ví dụ

Giả sử ràng, bảng Products có trường discount, khi cập nhật giá trị discount thì hệ thống kiểm tra xem giá trị discount có nằm trong phạm vi cho phép hay không? Nếu vượt quá thì hủy việc thay đổi đó.

Ví dụ 2: bạn không được phép thay đổi giá trị của trường payments trong bảng sales

CREATE TRIGGER NoUpdatePayterms

ON sales

FOR UPDATE AS

IF UPDATE (payterms)

BEGIN

PRINT ‘You cannot modify the payment terms for an order’

ROLLBACK TRANSACTION

END

Bài tiếp theo sẽ giải thích loại ràng buộc phức tạp không thiết lập được bằng các loại ràng buộc khác mà phải sử dụng ràng buộc loại này – Trigger