Crystal Reports for Visual Studio .NET là công cụ báo cáo chuẩn dành cho
Visual Studio.NET. Bạn có thể tiếp quản những báo cáo này trên nền Web và Windows,
và phân bổ chúng ở dạng dịch vụ Web trên một server.
Mục này sẽ trình bày từng bước một cách sinh báo cáo từ một nguồn dữ liệu.
Trước tiên, bạn tạo một dự án ứng dụng Windows mới với tên là CrystalExample. Để
có thể hiển thị Crystal Report, bạn cần thực hiện hai bước chính: thứ nhất là xây dựng
một bản báo cáo, và thứ hai là thêm một điều kiểm CrystalReportViewer vào form để
trình bày báo cáo.
105 trang |
Chia sẻ: nguyenlam99 | Lượt xem: 1179 | Lượt tải: 2
Bạn đang xem trước 20 trang tài liệu Bài giảng Kỹ thuật lập trình – Chương 3: Lập trình hướng đối tượng trong C#, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
DefaultBounds - form được hiển thị tại vị trí mặc
định của Windows và các chiều của chúng phụ thuộc vào hệ
điều hành Windows.
- Center Parent - form được mở như một cửa sổ con của một
form khác và xuất hiện tại vị trí chính giữa so với form cha.
Text Xác định tiêu đề của form tại Title Bar
WindowState Xác định trạng thái xuất hiện của form: normal, maximized,
hay minimized.
Sự kiện trong Windows Form
Event (sự kiện) là gì?
- Sự kiện là những phản ứng của đối tượng. Nói cách khác, sự kiện là những tín hiệu
phát ra khi người dùng thao tác trên đối tượng.
- Nhờ có event, người lập trình sẽ nhận được những tín hiệu và xử lý những tín hiệu đó
để phản hồi lại cho người dùng, tạo nên sự nhịp nhàng cho chương trình.
Bảng trình bày các sự kiện (Events)
Sự kiện Mô tả
Click Gọi đến khi control bị Click. Trong một vài control, event này cũng
xảy ra khi người dùng nhấn phím Enter.
DoubleClick Gọi đến khi control bị Double-Click. Trong một vài control, event này
không báo giờ được gọi. Ví dụ: control Button.
DragDrop Gọi đến khi việc “ rag and rop” được hoàn tất
DragEnter Gọi đến khi đối tượng vừa được “ rag” đến biên của control
DragLeave Gọi đến khi đối tượng vừa được “ rag” ra ngoài biên của control
DragOver Gọi đến khi đối tượng được “ rag” bên trong control
KeyDown Gọi đến khi vừa bấm một phím bất kỳ từ 1 control đang focus.
Sự kiện này luôn được gọi trước sự kiện KeyUp
KeyPress Gọi đến khi vừa bấm một phím bất kỳ từ 1 control được focus.
Sự kiện này được gọi sau sự kiện KeyUp
KeyUp Gọi đến khi vừa bấm một phím bất kỳ rồi thả ra từ 1 control đang
focus.
Sự kiện này luôn được gọi sau sự kiện KeyDown
Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
108
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
GotFocus Gọi đến khi control được focus
LostFocus Gọi đến khi control bị mất focus
MouseDown Gọi đến khi con trỏ chuột nằm trên 1 control và nút chuột được nhắp
nhưng chưa thả ra
MouseMove Gọi đến khi con trỏ chuột đi qua 1 control
MouseUp Gọi đến khi con trỏ chuột nằm trên 1 control và nút chuột vừa được thả
Paint Gọi đến khi control được vẽ
Validated Gọi đến khi control focus, property CaucesValidation được đặt là true
và sau khi gọi việc kiểm tra bằng Validating
Validating Gọi đến khi control mất focus, property CaucesValidation được đặt là
true.
Hàm thao tác với Windows
Form Methods Mô tả Ví dụ
Show() Được sử dụng để xuất hiện
một form bằng cách set
thuộc tính Visible của form
ấy là True
Form1 frmObj = new
Form1();
frmObj.Show();
Activate() Sử dụng để kích hoạt trạng
thái sử dụng của Form và
đưa trạng thái sử dụng về
Form ấy.
frmObj.Activate();
Close() ùng để đóng một Form frmObj.Close();
SetDesktopLocation() Hàm này dùng để định vị
trí của Form trên màn hình
SetDesktopLocation(100,1
50)
4.1.2 Hộp văn bản – TextBox
TextBox là điều khiển cho phép nhận giá trị từ người dùng trên một Form. Mặc định
giá trị lớn nhất mà TextBox nhận là 2048 ký tự.
Property Mô tả Ví dụ
Text Xác định giá trị hiển thị bên
trong TextBox
txtUserName.Text=”pta30000”;
Multiline Cho phép TextBox hiển thị
nhiều dòng chữ.
txtContent.Multiline = true;
PasswordChar Thuộc tính này cho phép lấy một
ký tự làm đại diện cho tất cả các
ký tự khác được nhập vào từ
txtPassword.PasswordChar=”*”;
Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
109
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
người dùng
4.1.3 Nút – Button
Button được sử dụng để thực hiện một tác vụ khi người sử dụng nhấn vào nó.
private void button1_Click(object sender, EventArgs e)
{
this.button1.Text = this.Text;
}
4.1.4 Nhãn – Label
Control được sử dụng để hiển thị chữ trên form và không cho phép người dùng
thay đổi. Label được sử dụng để mô tả thông tin cho những control khác trên Form.
òng chữ xuất hiện bên trên TextBox đó là Label, có mục đích giải thích cho
TextBox.
LinkLabel Control
LinkLabel được sử dụng để hiển thị một chuỗi như một liên kết. Khi bạn nhấn
vào liên kết, nó sẽ mở ra một form khác hoặc một Website.
Để mở ra một form khác, .NET cung cấp sự kiện LinkClicked, bạn thực hiện như sau:
private void linkLabel1_LinkClicked (object sender,
LinkLabelLinkClickedEventArgs e)
{
Form1 frmobj = new Form1();
frmobj.Show();
}
4.1.5 ToolTip
Tooltip là 1 đoạn mô tả ngắn gọn hiện lên khi di chuột qua 1 đối tượng điều
khiển. Tooltip tự động hiện ra khi di chuột, ấn vào đối tượng điều khiển và tự biến mất
khi di chuột ra ngoài. Mục đích của tooltip là nói cho người dùng biết đối tượng này
dùng để làm gì. Ta hoàn toàn có thể dùng Text hay các Image để hiện lên tooltip.
Cách dùng:
Chọn một control cần thêm tooltip, sau đó chọn 1 trong các cách sau:
- Thêm Text cho tooltip:
<Button Style="{StaticResource BackButtonStyle}"
ToolTipService.ToolTip="Back" />
- Thêm Image cho tooltip:
Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
110
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
Nếu muốn dùng Tooltip ở code behind, bạn cũng có thể làm theo các cách sau:
- Thêm Text cho tooltip:
1. Tạo mới 1 đối tượng Tooltip,
2. Đặt thuộc tính Content cho Tooltip là 1 String.
3. ùng phương thức ToolTipService.SetToolTip để điều khiển Control muốn đặt
Tooltip
<ToggleSwitch x:Name="onOffSwitch" OnContent="On" OffContent="Off"
Toggled="onOffSwitch_Toggled"/>
Codebehind:
ToolTip toolTip = new ToolTip();
toolTip.Content = "Flip switch to turn on.";
ToolTipService.SetToolTip(onOffSwitch, toolTip);
ToggleSwitch được định nghĩa trong phần XAML và được đặt tên là onOffSwitch để
thao tác trong codebehind.
4.2 Một số điều khiển khác
4.2.1 Hộp đánh dấu – CheckBox
a. Công dụng
Control này được dùng để gán tùy chọn Yes/No hoặc True/False.
b. Thuộc tính
Những thuộc tính thường sử dụng của CheckBox
4.2.2 Nút tuỳ chọn – RadioButton
a. Công dụng
RadioButton được dùng để cung cấp sự lựa chọn một trong một nhóm tiêu chí
cho người dùng. Chỉ một RadioButton được chọn trong một nhóm.
b. Thuộc tính
Những thuộc tính thường sử dụng của RadioButton giống như CheckBox, bao
gồm: Text, Checked.
4.2.3 Nhóm – GroupBox
Thuộc tính Mô tả Ví du
Text Thuộc tính này sử dụng để nhận
hoặc gán chuỗi ký tự là tiêu đề của
Checkbox
CheckBoxl.Text = "Yes";
Checked Là thuộc tính được sử dụng để xác
định checkbox được chọn
checkBox1.Checked = true;
Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
111
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
Được sử dụng để nhóm những control liên quan lại với nhau. GroupBox thường
được sử dụng để nhóm hai hay nhiều RadioButton để cung cấp một sự lựa chọn duy
nhất giữa chúng.
4.2.4 Hộp danh sách – ListBox
a. Công dụng
ListBox được sử dụng để hiển thị một danh sách phần tử đến người dùng. Một
người dùng có thể chọn một trong những phần tử này.
Bạn có thể thêm danh mục những phần tử vào trong một ListBox bằng cách,
chọn ListBox, tại cửa sổ Properties Window, chọn thuộc tính Items, nhấn vào nút và
cửa sổ String Collection Editor xuất hiện như hình dưới. Nhập vào VietNam, gõ Enter,
nhập vào USA, gõ Enter. Sau đó nhấn OK. ListBox của bạn sẽ có hai phần tử
VietNam và USA. Bạn cũng có thể thêm những phần tử vào ListBox tại lúc chạy
chương trình bằng cách sử dụng phương thức Add() của thuộc tính Items:
ListBox. lstitems.Items.Add("German");
lstitems.Items.Add("China");
b. Thuộc tính
Những thuộc tính thường sử dụng nhất của ListBox được liệt kê theo bảng dưới đây:
Thuộc tính Mô tả Ví dụ
SelectionMode Xác định cách thức mà người dùng lựa
chọn những phần tử trong ListBox. Có
4 giá trị
- None: người dùng không thể chọn bất
cứ phần tử nào trong ListBox
- One: người sử dụng chỉ chọn một giá
trị từ ListBox
- MultiSimple: cho phép người sử
dụng chọn nhiều phần tử từ ListBox.
- MultiExtended: người dùng có thể
chọn nhiều phần tử và sử dụng phím
SHIFT, CTRL và phím mũi tên để
chọn những phần tử từ ListBox.
ListBox1.SelectionMode =
SelectionMode.
MultiSimple;
Sorted Thuộc tính xác định khi nào những ListBox1.Sorted = true;
Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
112
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
thuộc tính trong ListBox được sắp xếp
SelectedIndex Thuộc tính cho phép gán hoặc nhận vị
trí được chọn hiện tại trong ListBox.
ListBox1.SelectedIndex =
2;
SelectedItem Thuộc tính này được dùng để gán hoặc
nhận phần tử đang được chọn
MessageBox.Show(
ListBox1.SelectedItem)
4.2.5 Hộp lựa chọn – ComboBox
a. Công dụng
ComboBox được sử dụng để hiển thị danh sách những phần tử thả xuống.
ComboBox là sự kết hợp của TextBox cho phép người dùng nhập giá trị và một danh
sách thả xuống cho phép người sử dụng chọn phần tử.
b. Thuộc tính
Hầu hết những thuộc tính của ComboBox giống như thuộc tính của ListBox,
nhưng ComboBox có thể thuộc tính Text.
Thuộc tính Text: cho phép gán hoặc nhận giá trị được người sử dụng nhập vào từ
ComboBox. Để thêm những phần tử vào ComboBox, tương tự như với ListBox, bằng
cách sử dụng phương thức Add() của thuộc tính Items.
ComboBox1.Items.Add(“VietNam”);
ComboBox1.Items.Add(“Thailand”);
4.2.6 Điều khiển Panel
a. Công dụng
- Bảng chứa các control hay một nhóm các control.
b. Tạo Panel
- Chọn công cụ
- Rê chuột và vẽ Panel.
c. Thuộc tính
Thuộc tính Mô tả
AutoScroll Tự động cuộn nếu số control nằm ngoài
vùng
BorderStyle None / FixedSingle /
Fixed3D
4.2.7 Điều khiển PictureBox
a. Công dụng
- Khung chứa hình ảnh.
b. Tạo PictureBox
- Chọn công cụ
- Rê chuột và vẽ PictureBox.
Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
113
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
Thuộc tính Mô tả
Image Hình chứa trong PictureBox
4.2.8 Điều khiển Timer
a. Công dụng
- Quy định khoảng thời gian định kỳ để thực hiện một công việc.
b. Tạo Timer
- Chọn công cụ
- Rê chuột và vẽ Timer à là control dạng unvisible (ẩn).
c. Thuộc tính
Thuộc tính Mô tả
Enabled Bật / tắt chế độ hẹn thời gian
Interval Khoảng thời gian định kỳ
4.2.9 ErrorProvider ( )
a. Công dụng
- Hỗ trợ thông báo lỗi cho các control khác.
- Thường được dùng với control input (ví dụ: TextBox) ràng buộc với 1 điều kiện nhập
nào đó.
b. Tạo ErrorProvider
- Chọn công cụ
- Rê chuột và vẽ ErrorProvider à là control dạng unvisible (ẩn).
4.3 Các hộp thoại thông dụng
4.3.1 Hộp hội thoại Open File
Open File là lớp công cụ cho phép người dùng kiểm tra sự tồn tại của một tập
tin và mở nó. Hầu hết các chức năng của hộp thoại được tìm thấy trong lớp FileDialog.
Hộp thoại này chỉ cho phép mở một tập tin do có thuộc tính ShowReadOnly, nếu bạn
muốn mở một thư mục thì sử dụng hộp thoại FolderBrowser ialog để thay thế.
Một số thuộc tính của hộp thoại Open File được liệt kê trong bảng sau:
Thuộc tính Mô tả
CheckFileExists Hộp thoại cảnh báo sẽ được hiển thị nếu người dùng yêu
cầu tập tin không tồn tại.
CheckPathExxist Hộp thoại cảnh báo sẽ được hiển thị nếu người dùng yêu
cầu đường dẫn không tồn tại.
FileName Trả về một chuỗi ký tự chứa tên tập tin được lựa chọn
trong hộp thoại
FileNames Trả về tên của tất cả các tập tin được chọn trong hộp thoại
Filter Thiết lập một chuỗi hiển thị trong hộp thoại “Save as file ”
hoặc “Files of type” cho biết thông tin để lọc tên các tập
Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
114
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
tin được lựa chọn
FilterIndex Trả về chỉ số của bộ lọc của tập tin đang được lựa chọn
Một số phương thức:
Phương thức Mô tả
OpenFile Mở tập tin với quyền đọc/ghi được lựa chọn bởi người
dùng
Reset Thiết lập lại các giá trị mặc định cho hộp thoại
ShowDialog() Hiển thị một hộp thoại thông thường với người dùng mặc
định
Ví dụ: Đoạn code sau tạo ra một hộp thoại OpenFile ialog, thiết lập một số thuộc tính
và hiển thị hộp thoại bằng cách click vào nút button.
private void button1_Click(object sender, System.EventArgs e)
{
Stream myStream = null;
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.InitialDirectory = "c:\\" ;
openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*" ;
openFileDialog1.FilterIndex = 2 ;
openFileDialog1.RestoreDirectory = true ;
if(openFileDialog1.ShowDialog() == DialogResult.OK)
{
try
{
if ((myStream = openFileDialog1.OpenFile()) != null)
{
using (myStream)
{
// Insert code to read the stream here.
}
}
}
catch (Exception ex)
{
MessageBox.Show("Error: Could not read file from disk. Original
error: " + ex.Message);
}
}
}
Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
115
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
4.3.2 Hộp thoại SaveFile và luồng FileStream
Save File là lớp công cụ cho phép người dùng mở và ghi đè lên một tập tin hiện
có hoặc tạo ra một tập tin mới. Hầu hết các chức năng của hộp thoại được tìm thấy
trong lớp File ialog.
Một số thuộc tính của hộp thoại Open File được liệt kê trong bảng sau:
Thuộc tính Mô tả
CheckFileExists Hộp thoại cảnh báo sẽ được hiển thị nếu người dùng chỉ
định tập tin không tồn tại.
CheckPathExxist Hộp thoại cảnh báo sẽ được hiển thị nếu người dùng yêu
cầu đường dẫn không tồn tại.
FileName Trả về một chuỗi ký tự chứa tên tập tin được lựa chọn
trong hộp thoại
FileNames Trả về tên của tất cả các tập tin được chọn trong hộp thoại
Filter Thiết lập một chuỗi hiển thị trong hộp thoại “Save as file ”
hoặc “Files of type” cho biết thông tin để lọc tên các tập
tin được lựa chọn
FilterIndex Trả về chỉ số của bộ lọc của tập tin đang được lựa chọn
OverWritePrompt Hiển thị hộp thoại “Save as” nếu người dùng chỉ định một
tập tin đã tồn tại
CreatePrompt Hiển thị hộp thoại nhắc nhở nếu người dùng chỉ định tập
tin không tồn tại
Các phương thức giống như hộp thoại OpenFileDialog.
Ví dụ: Đoạn code sau tạo ra một hộp thoại SaveFile ialog, thiết lập một số thuộc tính
và hiển thị hộp thoại bằng cách click vào nút button.
private void button1_Click(object sender, System.EventArgs e)
{
Stream myStream ;
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*" ;
saveFileDialog1.FilterIndex = 2 ;
saveFileDialog1.RestoreDirectory = true ;
if(saveFileDialog1.ShowDialog() == DialogResult.OK)
{
if((myStream = saveFileDialog1.OpenFile()) != null)
{
// Code to write the stream goes here.
myStream.Close();
Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
116
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
}
}
}
4.3.3 Hộp thoại Color
Color ialog là lớp công cụ màu sắc cho phép người sử dụng lựa chọn màu sắc
từ bảng màu. Sử dụng công cụ này bằng cách kéo thả ColorDialog từ ToolBox vào
trong Form.
Bạn mong muốn rằng sau khi nhấn Button “Change Backgroud Color” và
lựa chọn màu sắc thì màu nền của Form sẽ thay đổi theo màu được chọn, bạn thực
hiện như sau:
Tại sự kiện Click() của Button, thực hiện đoạn mã lệnh
private void button1_Click(object sender, EventArgs e)
{
colorDialog1.ShowDialog();
this.BackColor = colorDialog1.Color;
}
Màu nền của Form đã được thay đổi khi lựa chọn màu từ bảng màu:
Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
117
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
4.3.4 Hộp thoại Font
Giống như Color ialog, Font ialog được sử dụng để người dùng lựa chọn kiểu
hiển thị, kích thước của chữ. Để sử dụng Font ialog, bạn thực hiện theo các bước sau
đây
- Kéo thả Font ialog từ ToolBox vào Form.
- Thực hiện đoạn mã lệnh sau
private void button2_Click(object sender, EventArgs e){
fontDialog1.ShowDialog();
this.label1.Font = fontDialog1.Font;
}
Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
118
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
Lựa chọn Font để thay đổi với Font ialog
4.4 Menu
4.4.1 Menu – MenuStrip
Trong môi trường Windows, bạn có thể sử dụng Menu để tăng sự tiện ích cho
người sử dụng ứng dụng. Menus có hai dạng, Menu xuất hiện tại thanh Menu và menu
xuất hiện khi người sử dụng nhấn chuột phải, được gọi là Context menus.
Menus xuất hiện tại Menu Bar được khởi tạo bằng cách kéo thả control
MenuStrip từ ToolBox vào Form esign, khi ấy Menu xuất hiện cho phép bạn khởi
tạo danh mục menu như hình sau
Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
119
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
4.4.2 Popup menu – ContextMenuStrip
Context Menus được xuất hiện khi người sử dụng nhấn chuột phải. Để tạo ra
context menu, bạn có thể thực hiện như sau:
Kéo thả điều khiển ContextMenuStrip vào cửa sổ thiết kế ứng dụng. ContextMenu
xuất hiện như hình sau:
Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
120
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
121
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
Chương 5: Lập trình cơ sở dữ liệu
5.1 Hệ quản trị cơ sở dữ liệu MS SQL Server 2008
Trong một thế giới dữ liệu ngày nay, dữ liệu và các hệ thống quản lý dữ liệu đó
cần phải luôn luôn được bảo đảm và ở trạng thái có sẵn. SQL Server 2008 cho phép
các nhà phát triển giảm được sự phức tạp của cơ sở hạ tầng trong khi đó vẫn bảo đảm
cung cấp một nền tảng dữ liệu doanh nghiệp có khả năng bảo mật, khả năng mở rộng
và quản lý tốt hơn, cùng với thời gian chết của ứng dụng giảm.
5.1.1 Tổng quan về SQL Server 2008
Nền tảng cho các nhiệm vụ then chốt - SQL Server 2008 cho phép các tổ chức
có thể chạy hầu hết các ứng dụng phức tạp của họ trên một nền tảng an toàn, tin cậy và
có khả năng mở rộng. Bên cạnh đó còn giảm được sự phức tạp trong việc quản lý cơ
sở hạ tầng dữ liệu. SQL Server 2008 cung cấp một nền tảng tin cậy và an toàn bằng
cách bảo đảm những thông tin có giá trị trong các ứng dụng đang tồn tại và nâng cao
khả năng sẵn có của dữ liệu. SQL Server 2008 giới thiệu một cơ chế quản lý cách tân
dựa trên chính sách, cơ chế này cho phép các chính sách có thể được định nghĩa quản
trị tự động cho các thực thể máy chủ trên một hoặc nhiều máy chủ. Thêm vào đó, SQL
Server 2008 cho phép thi hành truy vấn dự báo với một nền tảng tối ưu.
Sự phát triển động - SQL Server 2008 cùng với .NET Framework đã giảm được
sự phức tạp trong việc phát triển các ứng dụng mới. A O.NET Entity Framework cho
phép các chuyên gia phát triển phần mềm có thể nâng cao năng suất bằng làm việc với
các thực thể dữ liệu logic đáp ứng được các yêu cầu của doanh nghiệp thay vì lập trình
trực tiếp với các bảng và cột. Các mở rộng của ngôn ngữ truy vấn tích hợp (LINQ)
mới trong .NET Framework đã cách mạng hóa cách các chuyên gia phát triển truy vấn
dữ liệu bằng việc mở rộng Visual C#® và Visual Basic® .NET để hỗ trợ cú pháp truy
vấn giống SQL vốn đã có. Hỗ trợ cho các hệ thống kết nối cho phép chuyên gia phát
triển xây dựng các ứng dụng cho phép người dùng mang dữ liệu cùng với ứng dụng
này vào các thiết bị và sau đó đồng bộ dữ liệu của chúng với máy chủ trung tâm.
- Dữ liệu quan hệ mở rộng - SQL Server 2008 cho phép các chuyên gia phát
triển khai thác triệt để và quản lý bất kỳ kiểu dữ liệu nào từ các kiểu dữ liệu truyền
thống đến dữ liệu không gian địa lý mới.
- Thông tin trong toàn bộ doanh nghiệp - SQL Server 2008 cung cấp một cơ sở
hạ tầng có thể mở rộng, cho phép quản lý các báo cáo, phân tích với bất kỳ kích thước
và sự phức tạp nào, bên cạnh đó nó cho phép người dùng dễ dàng hơn trong việc truy
cập thông tin thông qua sự tích hợp sâu hơn với Microsoft Office. Điều này cho phép
CNTT đưa được thông tin của doanh nghiệp rộng khắp trong tổ chức. SQL Server
2008 tạo những bước đi tuyệt vời trong việc lưu trữ dữ liệu, cho phép người dùng hợp
nhất các trung tâm dữ liệu vào một nơi lưu trữ dữ liệu tập trung của toàn doanh nghiệp.
Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
122
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
5.1.2 SQL Server Management Studio
Mở SQL Server Management Studio ta làm như sau: Vào start -> chọn
program -> chọn Microsoft SQL Server 2008 -> chọn SQL Server Management
Studio.
Chú ý những thành phần trên hộp thoại sau:
- Server Type: Như ví dụ của cuốn sách này, cho phép server type là atabase
Engine. Các tùy chọn khác là kiểu dữ liệu khác nhau của servers nó sẽ hiển thị kết nối.
- Server Name: Hộp combo thứ 2 chứa 1 danh sách của SQL Server cài đặt mà chọn.
Trong hộp thoại hình 12, bạn sẽ thầy tên của máy tính được cài đặt trên local. Nếu bạn
mở hộp Server name bạn có thể tìm kiếm nhiều server local hoặc network connection
bằng cách chọn .
- Authentication: Combobox cuối cùng xác định các loại hình kết nối bạn muốn sử
dụng.Trong giáo trình này chúng ta kết nối đến SQL Server sử dụng Windowns
Authentication. Nếu bạn cài đặt SQL Server với chế độ hỗn hợp(mix mode), thì bạn có
thể thay đổi chọn lựa SQL Server authentication, thì nó sẽ mở hai hộp thoại và cho
phép nhập username và password.
Sau khi nhấn nút Connect sẽ xuất hiện màn hình sau:
Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
123
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
5.1.3 Tạo cơ sở dữ liệu (database)
Chọn database -> Click phải -> Chọn New atabase
Trong hộp thoại New atabase đặt tên cho database name -> Chọn OK
Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
124
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
Tạo bảng (table)
Vào database quản lý bán hàng chọn table. Sau đó click phải lên table ->
Chọn New Table.
Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
125
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
Khi chọn New Table sẽ xuất hiện bên phải màn hình bên dưới Sau đó ta
nhập Column Name, ata Type Nhấn Enter để nhập cột kết tiếp.
Lưu table trên thanh Standard toolbar -> chọn Save.
Tạo quan hệ kết nối giữa các bảng (relatetionship) gồm 2 bước:
Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
126
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
Bước 1. Tạo khóa chính (Primary key) cho table trong SQL Server
Management Studio, tạo cột và kiểu dữ liệu. Sau đó trên thanh toolbar, chọn nút Set
Primary Key . Bạn cũng có thể click phải lên column chọn Set Primary Key.
Bước 2: Tạo khóa ngoại (Foreign key) trong cửa sổ thiết kế table. Foreign
được dùng để liên kết các table lại với nhau.
Cần lưu ý khi tạo foreign key là tên cột, kiểu dữ liệu giống tên cột của khóa
chính mà table nó đại diện. Ví dụ sau Ma MSP làm foreign key
Bước 3: Tạo sơ đồ (Diagrams) iagrams là 1 cửa sổ hiển thị mối quan hệ giữa
các table của 1 database. Tạo diagram ta thực hiện như sau:
- Trong cửa sổ Object Explorer chọn tên database cần tạo -> Click phải vào
Database Diagrams -> Chọn New atabase iagram
Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
127
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
- Sau khi chọn New atabase iagram sẽ xuất hiện hộp thoại để Add các table,
sau khi add xong chọn Close.
Để thiết lập mối quan hệ giữa các table ta chọn cột dữ liệu của cột làm khóa
chính trong bảng cha (parent table) và kéo nó đến khóa ngoại trong bảng con (child
table)
Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
128
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
- Sau khi kéo mối quan hệ cho 2 table sẽ xuất hiện hộp thoại như hình trên.
- Khi ta chọn OK giữa 2 table sẽ xuất hiện một kết nối giữa 2 table
5.1.3 Truy vấn dữ liệu cơ bản
a. Khái niệm cơ bản về T-SQL
Transact-SQL là ngôn ngữ SQL mở rộng dựa trên SQL chuẩn của ISO
(International Organization for Standardization) và ANSI (American National
Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
129
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
Standards Institute) được sử dụng trong SQL Server khác với PL-SQL ((Procedural
Language/Structured Query Language) dùng trong Oracle.
Data Definition Language (DDL):
Ðây là những lệnh dùng để quản lý các thuộc tính của một database như định nghĩa
các hàng hoặc cột của một table, hay vị trí data file của một database..., thường có
dạng như sau :
- Create object_Name
- Alter object_Name
- Drop object_Name
Trong đó object_Name có thể là một table, view, stored procedure, indexes...
Ví dụ: Lệnh Create sau sẽ tạo ra một table tên Importers với 3 cột CompanyI ,
CompanyName, Contact USE Northwind (sử dụng cơ sở dữ liệu Northwind sẵn có của
SQL Server 2008) CREATE TABLE Importers (CompanyID int NOT NULL,
CompanyName varchar(40) NOT NULL, Contact varchar(40) NOT NULL). Lệnh
Alter sau đây cho phép ta thay đổi định nghĩa của một table như thêm(hay bớt) một cột
hay một Constraint... Trong ví dụ này ta sẽ thêm cột ContactTitle vào table Importers
USE Northwind ALTER TABLE Importers ADD ContactTitle varchar(20) NULL
Lệnh rop sau đây sẽ hoàn toàn xóa table khỏi database nghĩa là cả định nghĩa của
table và data bên trong table đều biến mất (khác với lệnh elete chỉ xóa data nhưng
table vẫn tồn tại). USE Northwind ROP TABLE Importers
Data Control Language (DCL):
Ðây là những lệnh quản lý các quyền truy cập lên từng object (table, view, stored
procedure...). Thường có dạng sau:
- Grant
- Revoke
- Deny
Ví dụ:
Lệnh sau sẽ cho phép user trong Public Role được quyền Select đối với table
Customer trong database Northwind (Role là một khái niệm giống như Windows
Group sẽ được bàn kỹ trong phần Security) USE Northwind GRANT SELECT ON
Customers TO PUBLIC Lệnh sau sẽ từ chối quyền Select đối với table Customer trong
database Northwind của các user trong Public Role USE Northwind ENY SELECT
ON Customers TO PUBLIC Lệnh sau sẽ xóa bỏ tác dụng của các quyền được cho
phép hay từ chối trước đó USE Northwind REVOKE SELECT ON Customers TO
PUBLIC
Data Manipulation Language (DML):
Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
130
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
Ðây là những lệnh phổ biến dùng để xử lý data như Select, Update, Insert, elete
Ví dụ:
Select USE Northwind SELECT CustomerID, CompanyName, ContactName
FROM Customers WHERE (CustomerID = 'alfki' OR CustomerID = 'anatr')
ORDER BY ContactName
Insert USE Northwind INSERT INTO Territories VALUES (98101, 'Seattle', 2)
Insert USE Northwind INSERT INTO Territories VALUES (98101, 'Seattle', 2)
Update USE Northwind UPDATE Territories SET TerritoryDescription =
'Downtown Seattle' WHERE TerritoryID = 98101
Delete USE Northwind DELETE FROM Territories WHERE TerritoryID = 98101
Chú ý : trong lệnh elete bạn có thể có chữ From hay không đều được. Để kiểm tra
các ví dụ trên ta làm như sau: Trên thanh toolbar của màn hình SQL Server
Mangement Studio -> Chọn New Query và gõ các câu lệnh như trên. Sau đây là 1
ví dụ tạo table bằng câu lệnh T-SQL.
Cú pháp của T-SQL
Phần này chúng ta sẽ bàn về các thành phần tạo nên cú pháp của T-SQL
Identifiers Ðây chính là tên của các database object. Nó dùng để xác định một object.
(Chú ý khi nói đến Object trong SQL Server là chúng ta muốn đề cập đến table, view,
stored procedure, index.....Vì hầu như mọi thứ trong SQL Server đều được thiết kế
theo kiểu hướng đối tượng (object-oriented)). Trong ví dụ sau TableName, KeyName,
escription là những identifiers CREATE TABLE TableName (KeyName INT
PRIMARY KEY, escription NVARCHAR(80)) Có hai loại Identifiers một loại
Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
131
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
thông thường (Regular Identifier) và một loại gọi là Delimited Identifier, loại này
cần có dấu "" hay dấu [] để ngăn cách. Loại elimited được dùng đối với các chữ
trùng với từ khóa của SQL Server (reserved keyword) hay các chữ có khoảng trống. Ví
dụ: SELECT * FROM [My Table] WHERE [Order] = 10 Trong ví dụ trên chữ Order
trùng với keyword Order nên cần đặt trong dấu ngoặc vuông []. Hàm (Functions) Có
2 loại hàm một loại là built-in và một loại user-defined Các hàm Built-In được chia
làm 3 nhóm:
- Rowset Functions : Loại này thường trả về một object và được đối xử như một table.
Ví dụ như hàm OPENQUERY sẽ trả về một recordset và có thể đứng vị trí của một
table trong câu lệnh Select.
- Aggregate Functions : Loại này làm việc trên một số giá trị và trả về một giá trị đơn
hay là các giá trị tổng. Ví dụ như hàm AVG sẽ trả về giá trị trung bình của một cột.
- Scalar Functions : Loại này làm việc trên một giá trị đơn và trả về một giá trị đơn.
Trong loại này lại chia làm nhiều loại nhỏ như các hàm về toán học, về thời gian, xử lý
kiểu dữ liệu String....Ví dụ như hàm MONTH('2002-09-30') sẽ trả về tháng 9.
- Các hàm User-Defined (được tạo ra bởi câu lệnh CREATE FUNCTION và phần
body thường được gói trong cặp lệnh BEGIN...EN ) cũng được chia làm các nhóm
như sau:
- Scalar Functions : Loại này cũng trả về một giá trị đơn bằng câu lệnh RETURNS.
- Table Functions : Loại này trả về một table
- Chú Thích (Comments) T-SQL dùng dấu -- để đánh dấu phần chú thích cho câu
lệnh đơn và dùng /*...*/ để chú thích cho một nhóm
b. Thực thi các câu lệnh SQL
- Thực thi một câu lệnh đơn: Một câu lệnh SQL được phân ra thành các thành
phần cú pháp như trên bởi một parser, sau đó SQL Optimizer (một bộ phận quan
trọng của SQL Server) sẽ phân tích và tìm cách thực thi (Execute Plan) tối ưu nhất
ví dụ như cách nào nhanh và tốn ít tài nguyên của máy nhất... và sau đó SQL Server
Engine sẽ thực thi và trả về kết quả.
- Thực Thi một nhóm lệnh (Batches) Khi thực thi một nhóm lệnh SQL Server sẽ
phân tích và tìm biện pháp tối ưu cho các câu lệnh như một câu lệnh đơn và chứa
execution plan đã được biên dịch (compiled) trong bộ nhớ sau đó nếu nhóm lệnh
trên được gọi lại lần nữa thì SQL Server không cần biên dịch mà có thể thực thi
ngay điều này giúp cho một batch chạy nhanh hơn. Lệnh GO Lệnh này chỉ dùng để
gởi một tín hiệu cho SQL Server biết đã kết thúc một batch job và yêu cầu thực thi.
Nó vốn không phải là một lệnh trong T-SQL.
5.2 Kết nối CSDL
5.2.1 Giới thiệu về ADO.NET
Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
132
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
Ngày nay, những ứng dụng thương mại cần thiết để quản lý khối lượng dữ liệu
khổng lồ. ữ liệu thường được lưu trữ trong những bảng quan hệ trong cơ sở dữ liệu.
Nhận dữ liệu và thao tác dữ liệu trực tiếp từ một cơ sở dữ liệu đòi hỏi kiến thức về
những câu lệnh thao tác trên cơ sở dữ liệu để truy cập đến dữ liệu. Và ứng dụng cần
giao tiếp với Cơ sở dữ liệu để thực hiện những công việc sau:
- Nhận dữ liệu được lưu trữ trong cơ sở dữ liệu và hiển thị chúng ra giao diện
người dùng.
- Cập nhật dữ liệu, thực hiện thêm, hiệu chỉnh, và xóa dữ liệu.
A O.NET là một mô hình được những ứng dụng .NET sử dụng để giao tiếp với cơ sở
dữ liệu cho việc nhận, truy cập, và cập nhật dữ liệu.
Mô hình ADO.NET
Một data provider được sử dụng cho việc kết nối đến cơ sở dữ liệu, nhận, lưu
trữ dữ liệu trong dataset, đọc, nhận và cập nhật dữ liệu trong cơ sở dữ liệu.
Có hai loại data provider:
- Ole DB data provider - loại này làm việc với tất cả Ole B Provider như Sql
Ole B Provider, Oracle Ole b provider, và Jet Ole b Provider. Được biết đến trong
môi trường .NET với namespace System. ata.Ole b.
Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
133
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
- Sql Server data provider - loại này làm việc chỉ với Microsoft SQL Server.
Cho phép thao tác với tốc độ tối ưu với hệ cơ sở dữ liệu MSSQL Server, được biết đến
với namespace System. ata.SqlClient.
5.2.2 Kết nối
Kết nối là một component được sử dụng để thiết lập một kết nối đến cơ sở dữ
liệu từ một data source. Có hai kiểu đối tượng kết nối thường sử dụng nhất là
Ole bConnection và SqlConnection. Bảng sau đây hiển thị những thuộc tính và
phương thức hay sử dụng nhất của một đối tượng kết nối.
Tên Mô tả
ConnectionString Cung cấp thông tin như datasource, tên cơ sở dữ liệu, được sử dụng
để thiết lập kết nối với một cơ sở dữ liệu
Open() Mở một kết nói với datasource được khai báo tại ConnectionString
Close() Được sử dụng để đóng kết nối với data source
State Được sử dụng để kiểm tra trạng thái của một kết nối. 0: kết nối
đang đóng, 1: kết nối đang mở.
Data Adapter
ata Adapter là thành phần của A O.NET, có tác dụng chuyển tiếp dữ liệu từ
và đến cơ sở dữ liệu. data Adapter nhận dữ liệu từ cở sở dữ liệu vào một ataSet. Khi
bạn thay đổi dữ liệu trong dataset, cũng là thay đổi trong cơ sở dữ liệu bởi dataadapter.
Có hai kiểu data adapter thường dùng để cấu hình kết nối đến cơ sở dữ liệu trong
Visual Studio .NET:
- SqlDataAdapter - làm việc chỉ với hệ cơ sở dữ liệu MS SQL Server
- OleDbDataAdapter - kiểu này được cấu hình để làm việc với hầu hết các hệ cơ
sở dữ liệu được hỗ trợ bởi Ole b data provider.
ata Adapter sử dụng đối tượng kết nối Ole bConnection và SqlConnection
được cung cấp bởi data provider để giao tiếp với cơ sở dữ liệu.
Thuộc tính và phương thức của Data Adapter
ata Adapter giao tiếp với cơ sở dữ liệu trong khi nhận, thêm mới, xóa và cập
nhật dữ liệu. Những thuộc tính sau đây được thiết lập để thực hiện những tác vụ khác
nhau trên một hệ cơ sở dữ liệu
- SelectCommand - nhận dữ liệu từ CS L thông qua một câu truy vấn hoặc stored
procedures
- InsertCommand - thêm dữ liệu vào CS L qua câu lệnh insert.
- UpdateCommand - cập nhật cơ sở dữ liệu với câu lệnh update
- DeleteCommand - xóa dữ liệu khỏi cơ sở dữ liệu thông qua câu lệnh delete
- Fill() - là phương thức đẩy dữ liệu từ CS L vào một dataset.
Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
134
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
- Update() - là phương thức thực thi InsertComand, Update Command, hoặc
eleteCommand cho mỗi câu lệnh thêm, hiệu chỉnh hoặc xóa dòng để thực hiện thay
đổi trong CS L.
Data Command
ataCommand là đối tượng thực thi những câu lệnh SQL hoặc stored procedure
được sử dụng để thao tác với CS L. ata Command là đối tượng của lớp
SqlCommand và OleDbCommand.
Ví dụ sử dụng ata Command:
string connectionstring = "PROVIDER=SQLOLEDB;
server=(local);uid=_net;pwd=;database=_NET";
OleDbConnection conObj = new OleDbConnection(connectionstring);
conObj.Open();
OleDbCommand cmd = new OleDbCommand("delete from books where
ibookid='003'",conObj);
int result = cmd.ExecuteNonQuery();
conObj.Close();
string connectionstring = "PROVIDER=SQLOLEDB;
server=(local);uid=_net;pwd=;database=_NET";
OleDbConnection conObj = new OleDbConnection(connectionstring);
conObj.Open();
OleDbCommand cmd = new OleDbCommand("select * from books");
OleDbDataReader dr;
dr = cmd.ExecuteReader();
while (dr.Read())
{
lbltestdatareader.Text = dr["BookID"].ToString();
}
conObj.Close();
}
5.3 Các đối tượng hiển thị và xử lý dữ liệu
5.3.1 DataSet
Là đối tượng nhận dữ liệu từ cơ sở dữ liệu thông qua ataAdapter, ataSet
hoạt động như một cơ sở dữ liệu ảo chứa những bảng, dòng, và cột.
Mô hình ataSet như sau
Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
135
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
Các đối tượng thuộc tính cần quan tâm với đối tượng ataSet bao gồm:
DatatableCollection, DataRelationCollection, ExtendedProperties, DataTable,
DataRelation, DataRowCollection, DataView, PrimaryKey, DataColumnCollection.
Chi tiết những đối tượng thuộc tính này sẽ được đề cập trong các phần sau.
Ví dụ sử dụng ataAdapter đẩy dữ liệu từ cơ sở dữ liệu vào ataSet.
private void button3_Click(object sender, EventArgs e)
{
string connectionstring =
"PROVIDER=SQLOLEDB;server=(local);uid=_net;pwd=;database=_NET";
OleDbConnection conObj = new OleDbConnection(connectionstring);
conObj.Open();
OleDbCommand cmd = new OleDbCommand("select * from books");
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds, "books");
conObj.Close();
}
a. Lọc và sắp xếp dữ liệu
ữ liệu lấy về từ cơ sở dữ liệu bởi câu lệnh truy vấn select bao gồm tất cả các
dòng dữ liệu trong một bảng. Yêu cầu đặt ra là chỉ lấy một số dòng xác định tương ứng
với một mã số nào đó. Để giải quyết vấn đề này, A O.NET cung cấp hai cách thức để
thực hiện: lọc dữ liệu trong ataSet và thực hiện lấy dữ liệu cần thiết qua câu lệnh
SQL có tham số.
Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
136
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
b. Lọc một Dataset
ữ liệu từ một table trong cơ sở dữ liệu được lất toàn bộ và đổ vào ataset, sau
đó tiến hành lọc những dòng dữ liệu cần thiết.
Ví dụ sau mô tả cách thực hiện này.
private void button4_Click(object sender, EventArgs e)
{
string connectionstring = "PROVIDER=SQLOLEDB;
server=(local);uid=_net;pwd=;database=_NET";
OleDbConnection conObj = new OleDbConnection(connectionstring);
conObj.Open();
OleDbCommand cmd = new OleDbCommand("select * from books",conObj);
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds, "books");
MessageBox.Show( ds.Tables["books"].Rows.Count.ToString());
// filter data
DataView dv = new DataView(ds.Tables["books"]);
dv.RowFilter = "fprice>20000";
dv.Sort = "fprice DESC";
MessageBox.Show(dv.Table.Rows.Count.ToString());
conObj.Close();
}
c. Thêm, cập nhật, xóa dữ liệu trong cơ sở dữ liệu
Thêm mới dữ liệu vào cơ sở dữ liệu
string connectionstring = "PROVIDER=SQLOLEDB;
server=(local);uid=_net;pwd=;database=_NET";
OleDbConnection conObj = new OleDbConnection(connectionstring);
conObj.Open();
OleDbCommand cmd = new OleDbCommand("insert books values(?,?,?,?)",
conObj);
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue(“@inxb", 2);// Nha xuat ban tre
cmd.Parameters.AddWithValue(“@vmasach", "MS0002");
cmd.Parameters.AddWithValue(“@vtensach", "Lập trình .NET cho cuộc
sống");
cmd.Parameters.AddWithValue(“@fgia", 75000);
cmd.ExecuteNonQuery();
Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
137
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
MessageBox.Show("Đã thêm một sách vào CSDL");
conObj.Close();
private void button7_Click(object sender, EventArgs e)
{
string connectionstring = "PROVIDER=SQLOLEDB;
server=(local);uid=_net;pwd=;database=_NET";
OleDbConnection conObj = new OleDbConnection(connectionstring);
conObj.Open();
OleDbCommand cmd = new OleDbCommand("update books set
vtensach=?,fgia=? where vmasach=?",conObj);
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue(“@vtensach", ".NET for Real Life");
cmd.Parameters.AddWithValue(“@fgia", 85000);
cmd.Parameters.AddWithValue(“@vmasach", "MS0002");
cmd.ExecuteNonQuery();
MessageBox.Show("Đã sửa đổi nội dung sách trong CSDL");
conObj.Close();
}
5.3.2 Xây dựng một lớp CSDL dùng chung
Khi thao tác với CS L, việc tạo kết nối, mở kết nối, thực hiện câu truy vấn dữ
liệu, và đóng kết nối được thực hiện rất nhiêu lần, Sẽ là rất tốt thời gian nếu chúng
ta cứ lập đi lập lại quá trình này.
Chúng ta sẽ cùng xây dựng một lớp chuyên biệt để thực hiện việc giao tiếp với
CS L, và người lập trình sẽ không phải mất công thực hiện lại các bước thao tác với
các đối tượng như Connection, ataAdapter và cuối cùng là giúp giảm thiểu thời
gian cho việc xây dựng ứng dụng.
Xây dựng lớp giao tiếp với CSDL – DBClass
Mã lệnh của lớp BClass như sau
using System;
using System.Data;
using System.Data.OleDb;
public class OleDBClass
{
static string strConStr = "";
public static string ConnectingString
{
get
Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
138
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
{
if (!strConStr.Equals(""))
return strConStr;
else
return null;
}
set
{
strConStr = value;
}
}
public static OleDbConnection GetConnection()
{
OleDbConnection con = new OleDbConnection(strConStr);
con.Open();
return con;
}
public static DataTable GetData(OleDbCommand cmd)
{
try
{
if (cmd.Connection != null)
{
using (DataSet ds = new DataSet())
{
using (OleDbDataAdapter da = new OleDbDataAdapter())
{
da.SelectCommand = cmd;
da.Fill(ds);
return ds.Tables[0];
}
}
}
else
{
using (OleDbConnection conn = GetConnection())
{
Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
139
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
using (DataSet ds = new DataSet())
{
using (OleDbDataAdapter da = new OleDbDataAdapter())
{
da.SelectCommand = cmd;
da.SelectCommand.Connection = conn;
da.Fill(ds);
return ds.Tables[0];
}
}
}
}
}
finally { }
}
public static OleDbDataReader GetReadOnlyData(OleDbCommand cmd)
{
try
{
if (cmd.Connection != null)
{
return cmd.ExecuteReader();
}
else
{
using (OleDbConnection conn = GetConnection())
{
cmd.Connection = conn;
datareader = cmd.ExecuteReader();
return cmd.ExecuteReader();
}
}
}
finally {}
}
Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
140
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
public static DataSet GetDsData(OleDbCommand cmd)
{
try
{
if (cmd.Connection != null)
{
using (DataSet ds = new DataSet())
{
using (OleDbDataAdapter da = new OleDbDataAdapter())
{
da.SelectCommand = cmd;
da.Fill(ds);
return ds;
}
}
}
else
{
using (OleDbConnection conn = GetConnection())
{
using (DataSet ds = new DataSet())
{
using (OleDbDataAdapter da = new OleDbDataAdapter())
{
da.SelectCommand = cmd;
da.SelectCommand.Connection = conn;
da.Fill(ds);
return ds;
}
}
}
}
}
finally { }
}
public static DataTable GetData(string sql)
Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
141
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
{
try
{
using (OleDbConnection conn = GetConnection())
{
using (OleDbCommand cmd = conn.CreateCommand())
{
cmd.CommandType = CommandType.Text;
cmd.CommandText = sql;
using (DataSet ds = new DataSet());
{
using (OleDbDataAdapter da = new OleDbDataAdapter())
{
da.SelectCommand = cmd;
da.SelectCommand.Connection = conn;
da.Fill(ds);
return ds.Tables[0];
}
}
}
}
}
finally {}
}
public static void ExecuteNonQuery(OleDbCommand cmd)
{
try
{
using (OleDbConnection conn = GetConnection())
{
cmd.Connection = conn;
cmd.ExecuteNonQuery();
}
}
finally {}
}
Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
142
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
public static object ExecuteScalar(OleDbCommand cmd)
{
try {
using (OleDbConnection conn = GetConnection())
{
cmd.Connection = conn;
return cmd.ExecuteScalar();
}
}
finally { }
}
}
Sử dụng lớp giao tiếp với CSDL - DBClass
Việc bây giờ là chúng ta sẽ sử dụng lớp CS L như thế nào. Sau đây là mã lệnh
mẫu để sử dụng.
DBClass.ConnectingString = "PROVIDER=SQLOLEDB;
server=(local);uid=_net;pwd=;database=_NET";
// việc gọi một câu truy vấn bây giờ đơn giản là việc gọi hàm trong lớp
DBClass
DataTable dt = DBClass.GetData("select * from items");
Chúng ta có thể thấy đó là việc thực hiện câu truy vấn dữ liệu từ bảng items
đã trở nên cực kỳ đơn giản hơn bao giờ hết. Không cần phải mở kết nối
Connection, sử dụng ataAdapter bạn vẫn có được dữ liệu từ bảng items. Nói
cho đúng thì chúng ta đã đưa những công doạn này vào trong lớp Ole BClass và
giờ đây chúng ta chỉ quan tâm tới mục đích sử dụng câu truy vấn mà không mất
quá nhiều mã lệnh để thực hiện các bước chuẩn bị.
5.4 Thiết kế báo cáo
Crystal Reports for Visual Studio .NET là công cụ báo cáo chuẩn dành cho
Visual Studio.NET. Bạn có thể tiếp quản những báo cáo này trên nền Web và Windows,
và phân bổ chúng ở dạng dịch vụ Web trên một server.
Mục này sẽ trình bày từng bước một cách sinh báo cáo từ một nguồn dữ liệu.
Trước tiên, bạn tạo một dự án ứng dụng Windows mới với tên là CrystalExample. Để
có thể hiển thị Crystal Report, bạn cần thực hiện hai bước chính: thứ nhất là xây dựng
một bản báo cáo, và thứ hai là thêm một điều kiểm CrystalReportViewer vào form để
trình bày báo cáo.
Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
143
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
Việc xây dựng một bản báo cáo được mô tả trong 11 bước nhỏ dưới đây:
1. Từ thanh trình đơn chính của IDE, chọn Project | Add New Item và chọn Crystal
Report. Nhắp Open.
2. Crystal Report Wizard sẽ nhắc ta chọn kiểu báo cáo cần xây dựng. Giữ nguyên báo
cáo chuẩn mặc định, rồi nhắp OK.
3. Crystal Report Wizard hiển thị hộp thoại Standard Report Expert. Nhắp vào dấu
cộng kế thư mục OLE DB (ADO) trong hộp danh sách Available Data Sources.
Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
144
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
4. Bạn sẽ thấy hộp thoại OLE DB (ADO). Chọn Microsoft OLE DBProvider for SQL
Server, rồi nhắp Next.
5. Kế tiếp, chúng ta cần báo với trình thuật sĩ cơ sở dữ liệu nào sẽ được kết nối. Chọn
cơ sở dữ liệu Northwind. Nhắp Next.
Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
145
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
6. Crystal Report Wizard hiển thị hộp thoại Advanced Information. Chúng ta không
cần thay đổi thông tin nào cho ví dụ này, cho nên nhắp Finish. Trong cửa sổ Standard
Report Expert, chọn bảng Categories và Products cho bản báo cáo của chúng ta. Nhắp
Next.
Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
146
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
7. Trong thẻ Links của hộp thoại Standard Report Expert, giữ nguyên các mặc định
như hình. Bạn có thể thấy trình thuật sĩ ánh xạ khóa chính trong Categories đến khóa
ngoại trong Products. Nhắp Next để hiển thị thẻ Fields.
8. Từ bảng Categories, chọn CategoryName và Description. Từ bảng Products, chọn
ProductName, QuantityPerUnit, UnitPrice, và UnitsInStock (xem h.nh 10.23). Nhắp
Next để hiển thị thẻ Group.
Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
147
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
9. Chọn CategoryName và ProductName để phân nhóm.
10. Nhắp Next nhiều lần để chấp nhận các thiết lập mặc định cho các thẻ Total, Top N,
Chart, và Select. Khi đến thẻ cuối cùng (thẻ Style), g. tiêu đề Category - Product
Report (xem h.nh 10.25).
Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
148
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
11. Nhắp Finish. File CrystalReport1.rpt (xem h.nh 10.26) sẽ được thêm vào dự án.
Chúng ta đã xây dựng xong bản báo cáo. Bước thứ hai là thiết lập một cơ chế
để xem bản báo cáo này. Bước này khá dễ dàng. Bạn h.y kéo điều kiểm
CrystalReportViewer từ hộp công cụ vào form mặc định.
Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
149
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
Nhắp phải vào CrystalReportViewer, và chọn Properties. Tìm thuộc tính Dock
và chọn Fill
Tùy chọn này sẽ khiến CrystalReportViewer lấp đầy vùng client của form. Kế
tiếp, tìm thuộc tính ReportSource, và nhắp Browse. Chọn file CrystalReport1.rpt mà
chúng ta vừa xây dựng.
Bây giờ, bạn chạy chương trình để xem kết quả.
Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
150
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
Các file đính kèm theo tài liệu này:
- bai_giang_ngon_ngu_lap_trinh_ung_dung_p2_8752.pdf