Lập trình với Microsoft SQL Server CE

Ngôn ngữ truy vấn có cấu trúc (SQL) Server 2000 Windows CE Edition (SQL Server CE) rất nhỏ so với bộ

máy CSDL Microsoft’s SQL Server 2000. Mặc dù kích cỡ của nó như vậy, nhưng SQL Server CE cung cấp

đủ để lưu trữ dữ liệu và các chức năng.

SQL Server CE hỗ trợ CSDL có dung lượng lớn nhất đến 2GB. SQL Server CE hỗ trợ tập con các ngôn

ngữ định nghĩa dữ liệu và ngôn ngữ thao tác dữ liệu. Có hỗ trợ nhiều cột chỉ số, khóa chính, ràng buộc.

Khi phát triển ứng dụng SQL Server CE, chúng ta cần phải thêm hai assembly references để dự án của

chúng ta làm việc như đoạn mã. SQL Server CE quản lý sự tồn tại System.Data.SqlServerCe. Chúng ta

sẽ cần thêm một tham chiếu System.Data.Common. Như trong đoạn mã sau:

using System.Data;

using System.Data.Common;

using System.Data.SqlServerCe;

pdf14 trang | Chuyên mục: SQL Server | Chia sẻ: dkS00TYs | Lượt xem: 1706 | Lượt tải: 1download
Tóm tắt nội dung Lập trình với Microsoft SQL Server CE, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
g thức
SqlCeCommand.Prepare.
Thu vien Hoc Lieu Mo Viet Nam module: m49413 10
Listing 5.7 Thực thi m ột tham số SQL command
public static void GetPackageInfo(int pckgID) {
string pckgStr =
"Package Data\nID: {0}\nCode: {1}\nDestination: {2}";
string connstr = @"Data Source=\My Documents\PTSystem.sdf";
using(SqlCeConnection conn = new SqlCeConnection(connstr)) {
conn.Open();
string dmlPackageInfo = "SELECT * FROM Package WHERE ID = ?";
SqlCeCommand cmdGetPackageInfo = null;
SqlCeDataReader drPackageInfo = null;
try {
cmdGetPackageInfo = new SqlCeCommand(dmlPackageInfo, conn);
cmdGetPackageInfo.CommandType = CommandType.Text;
cmdGetPackageInfo.Parameters.Add("ID", pckgID);
cmdGetPackageInfo.Prepare();
drPackageInfo =
cmdGetPackageInfo.ExecuteReader(CommandBehavior.SingleRow);
while(drPackageInfo.Read()) { System.Windows.Forms.MessageBox.Show(
string.Format(pckgStr, drPackageInfo.GetInt32(0),
drPackageInfo.GetString(1),
drPackageInfo.GetString(2)));
}
} catch(SqlCeException scee) {
for(int curExNdx = 0; curExNdx < scee.Errors.Count; ++curExNdx)
{ System.Windows.Forms.MessageBox.Show(
"Error:"+ scee.Errors[curExNdx].ToString()+"\n");
}
} finally {
if( cmdGetPackageInfo != null )
cmdGetPackageInfo.Dispose();
if( drPackageInfo != null )
drPackageInfo.Close();
}
}
}
Truy vấn có tham số có thể được sử dụng trong hầu hết các câu SQL, DDL và DML. Nó có thể được sử
dụng nhiều hơn một tham số trong truy vấn. Ví dụ, truy vấn sau có thể được sử dụng để SELECT.
SELECT * FROM Package WHERE Code = ? OR DestinationID = ?
Khi sử dụng câu lệnh SELECT cùng với nhiều tham số, chúng ta phải thêm đối tượng SqlCeParameters vào
tập hợp Parameters theo thứ tự dấu ? xuất hiện từ trái sang phải.
Listing 5.8 Thực thi SQL command cùng với nhiều tham số
public static void GetPackageInfo(int[] pckgID) {
string pckgStr =
"Package Data\nID: {0}\nCode: {1}\nDestination: {2}";
string connstr = @"Data Source=\My Documents\PTSystem.sdf";
using(SqlCeConnection conn = new SqlCeConnection(connstr)) {
Thu vien Hoc Lieu Mo Viet Nam module: m49413 11
conn.Open();
string dmlPackageInfo = "SELECT * FROM Package WHERE ID = ?";
SqlCeCommand cmdGetPackageInfo = null;
SqlCeDataReader drPackageInfo = null;
try {
cmdGetPackageInfo = new SqlCeCommand(dmlPackageInfo, conn);
cmdGetPackageInfo.CommandType = CommandType.Text;
cmdGetPackageInfo.Parameters.Add("ID", SqlDbType.Int);
cmdGetPackageInfo.Prepare();
for(int pckgNdx = 0; pckgNdx < pckgID.Length; ++pckgNdx)
{ cmdGetPackageInfo.Parameters[0].Value = pckgID[pckgNdx]; try {
drPackageInfo =
cmdGetPackageInfo.ExecuteReader(CommandBehavior.SingleRow);
while(drPackageInfo.Read()) { System.Windows.Forms.MessageBox.Show(
string.Format(pckgStr, drPackageInfo.GetInt32(0),
drPackageInfo.GetString(1),drPackageInfo.GetString(2)));
}
} catch(SqlCeException scee) {}
for(int curExNdx=0;curExNdx<scee.Errors.Count;++curExNdx) {
System.Windows.Forms.MessageBox.Show(
"Error:"+ scee.Errors[curExNdx].ToString()+"\n");
}
} finally {
if( drPackageInfo != null )
drPackageInfo.Close();}
}
} finally {
if( cmdGetPackageInfo != null )
cmdGetPackageInfo.Dispose();
}
}
}
6 Lọc một DataSet bằng SqlCeDataAdapter
Compact Framework cung cấp khả năng lập dữ liệu trực tiếp từ SQL Server CE vào một DataSet. Điều này
được hoàn thành bằng cách sử dụng SqlCeDataAdapter đưa vào DataSet. SqlCeDataAdapter có thể đưa
vào DataSet và cập nhật vào CSDL. DataSet có thể quản lý tất cả các giao tiếp giữa ứng dụng và CSDL
SQL Server CE .
Quản lý SqlCeDataAdapter trong CSDL bằng cách chạy các câu lệnh khác nhau. Có bốn câu lệnh được
đưa ra như là thuộc tính trên SqlCeDataAdapter, đó là SelectCommand, InsertCommand, UpdateCommand,
và DeleteCommand.
Thuộc tính SelectCommand là đối tượng SqlCeCommand xác định là câu lệnh SQL mà SqlCeDataAdapter
sẽ sử dụng để nhậ dữ liệu từ CSDL SQL Server CE database. SqlCeDataAdapter sẽ sử dụng dữ liệu để đưa
vào DataSet.
Bao gồm các bước sau:
Bước 1: Xây dựng một DataSet
Bước 2: Nhận dữ liệu
Bước 3: Đưa vào DataSet
Trước tiên, SqlCeDataAdapter khởi tạo giản đồ DataSet tương ứng với giản đồ trong nguồn dữ liệu, Điều
này có nghĩa là DataTables được xây dựng tương ứng với bảng CSDL nguồn như là xây dựng DataColumns
Thu vien Hoc Lieu Mo Viet Nam module: m49413 12
tương ứng với cột bảng CSDL nguồn. Quan hệ giữa DataSet và CSDL nguồn được biết như là ánh xạ
bởi vì chúng ánh xạ đối tượng DataSet vào đối tượng CSDL. Tiếp theo dữ liệu được nhận về từ CSDL nguồn
bằng cách sử dụng thuộc tính SelectCommand. Cuối cùng DataRows được tạo để nhận dữ liệu, và các dòng
được trèn vào DataTables.
Sau đây là đoạn mã đưa dữ liệu vào một DataSet bằng cách sử dụng SqlCeDataAdapter rất đơn giản.
Listing 5.9 mô tả cách đưa dữ liệu của bảng Package vào DataSet bằng cách sử dụng SqlCeDataAdapter.
Listing 5.9 Đ ưa dữ l i ệu vào DataSet cùng với nội dung của bảng Package
public static DataSet GetPackageDataSet() {
string connstr = @"Data Source=\My Documents\PTSystem.sdf";
using(SqlCeConnection conn = new SqlCeConnection(connstr)) {
conn.Open();
string dmlPackageInfo = "SELECT * FROM Package";
SqlCeDataAdapter daPackages = new SqlCeDataAdapter();
daPackages.MissingMappingAction = MissingMappingAction.Passthrough;
daPackages.MissingSchemaAction = MissingSchemaAction.Add;
daPackages.SelectCommand = new SqlCeCommand(dmlPackageInfo, conn);
DataSet dsPackages = new DataSet();
daPackages.Fill(dsPackages);
return dsPackages;
}
Trước tiên tạo và mở một kết nối tới CSDL SQL Server CE. Sau đó tạo một đối tượng SqlCeDataAdapter
và thiết lập MissingMappingAction và thuộc tính MissingSchemaAction. Thiết lập thuộc tính mặc định.
Tiếp theo, thiết lập SelectCommand thành một đối tượng SelectCommand lựa chọn tất cả dữ liệu từ bảng
Package. Cuối cùng, tạo đối tượng DataSet và gọi phương thức SqlCeDataAdapter.Fill để đưa dữ liệu
vào DataSet với dữ liệu trong bảng Package.
7 Cập nhật CSDL Microsoft SQL Server CE sử dụng SqlCeDataAdapter
DataSet đã đưa dữ liệu vào bằng cách sử dụng SqlCeDataAdapter, chúng ta có thể tạo sự thay đổi dữ
liệu và cập nhật dữ liệu nguồn, chúng ta phải chỉ ra ba thuộc tính thêm vào đối tượng SqlCommand cho
SqlCeDataAdapter là: UpdateCommand,InsertCommand, và DeleteCommand.
Listing 5.11 Sử dụng SqlCeDataAdapter để cập nhật dữ l i ệu
public static
SqlCeDataAdapter GetPackageDataAdapter(SqlCeConnection conn){
string dmlPackageInfo = "SELECT * FROM Package";
string dmlUpdatePackage="UPDATE Package " +
"SET CODE = ?, " +
" DestinationID = ? " + "WHERE ID = ?";
string dmlInsertPackage="INSERT INTO " +
"Package(Code, DestinationID) " +
"VALUES (?, ?)";
string dmlDeletePackage="DELETE FROM " + "Package " + "WHERE ID = ?";
SqlCeDataAdapter daPackages = new SqlCeDataAdapter();
daPackages.SelectCommand = new SqlCeCommand(dmlPackageInfo, conn);
daPackages.UpdateCommand = new SqlCeCommand(dmlUpdatePackage, conn);
daPackages.UpdateCommand.Parameters.Add("Code", SqlDbType.NVarChar);
daPackages.UpdateCommand.Parameters.Add("DestinationID",
SqlDbType.NVarChar);
daPackages.UpdateCommand.Parameters.Add("ID", SqlDbType.Int);
Thu vien Hoc Lieu Mo Viet Nam module: m49413 13
daPackages.InsertCommand = new SqlCeCommand(dmlInsertPackage, conn);
daPackages.InsertCommand.Parameters.Add("Code", SqlDbType.NVarChar);
daPackages.InsertCommand.Parameters.Add("DestinationID",
SqlDbType.NVarChar);
daPackages.DeleteCommand = new SqlCeCommand(dmlDeletePackage, conn);
daPackages.DeleteCommand.Parameters.Add("ID", SqlDbType.Int);
return daPackages;
}
SqlCeDataAdapter cập nhật dữ liệu nguồn khi chúng ta gọi phương thức Update.
Phương thức Update thao tác qua 5 bước khi cập nhật dữ liệu:
Bước1: Các giá trị cập nhật được nạp vào từ đối tượng DataRow trong tham số câu lệnh có liên quan.
Bước 2: Sự kiện RowUpdating được đưa ra.
Bước 3: Câu lệnh liên quan được thực thi đối với dữ liệu nguồn.
Bước 4: Sự kiện RowUpdated được đưa ra.
Bước 5: Thuộc tính RowSet của DataRow được thiết lập lại RowState.Unchanged bằng cách gọi phương
thức AcceptChanges.
Listing 5.12 Cập nhật b ảng Package sử dụng SqlDataAdapter
public static void UpdatePackageTable(DataSet dsPackages) {
string connstr = @"Data Source=\My Documents\PTSystem.sdf";
using(SqlCeConnection conn = new SqlCeConnection(connstr)) {
conn.Open();
SqlCeDataAdapter daPackages = GetPackageDataAdapter(conn);
daPackages.Update(dsPackages);
}
}
Thao tác với sự kiện c ậ p nhật SqlCeDataAdapter
Khi chúng ta gọi phương thức cập nhật trên SqlCeDataAdapter, có hai sự kiện được đưa ra. Sự kiện
RowUpdating được đưa ra trước câu lệnh Update được thực thi với dữ liệu nguồn. Sự kiện RowUpdated được
phát sinh sau khi câu lệnh Update được thực thi với dữ liệu nguồn.
Khi chúng ta nhận một sự kiện RowUpdating, chúng ta sẽ xác định thuộc tính của đối tượng SqlCeRowUpdatingEventArgs
và quyết định tiếp tục cập nhật hay không.
8 Đối tượng SqlCommand với SqlCeCommandBuilder
Trước tiên, chúng ta cần khởi tạo SqlCeDataAdapter và thuộc tính SelectCommand. Sau đó chúng ta tạo
SqlCeCommandBuilder thông qua SqlCeDataAdapter như là tham số để cấu trúc SqlCeCommandBuilder.
SqlCeCommandBuilder sẽ tạo một câu lệnh cho thuộc tính UpdateCommand, InsertCommand, and DeleteCommand
của SqlCeDataAdapter. Listing5.14 mô tả cách sử dụng SqlCeCommandBuilder để xây dựng một SqlCeDataAdapter
cho bảng Package.
Listing 5.14 Sử dụng SqlCeCommandBuilder
public static
SqlCeDataAdapter GetPackageDataAdapter(SqlCeConnection conn)
{ string dmlPackageInfo = "SELECT * FROM Package";
SqlCeDataAdapter daPackages = new SqlCeDataAdapter();
daPackages.SelectCommand = new SqlCeCommand(dmlPackageInfo, conn);
SqlCeCommandBuilder cmdBldr = new SqlCeCommandBuilder(daPackages);
MessageBox.Show(cmdBldr.GetUpdateCommand().CommandText);
MessageBox.Show(cmdBldr.GetInsertCommand().CommandText);
MessageBox.Show(cmdBldr.GetDeleteCommand().CommandText);
Thu vien Hoc Lieu Mo Viet Nam module: m49413 14
return daPackages;
}

File đính kèm:

  • pdfLập trình với Microsoft SQL Server CE.pdf
Tài liệu liên quan