ĐỒ ÁN TỐT NGHIỆP TÌM HIỂU NGÔN NGỮ C# VÀ VIẾT MỘT ỨNG ...
Có thể bạn quan tâm
- Miễn phí (current)
- Danh mục
- Khoa học kỹ thuật
- Công nghệ thông tin
- Kinh tế, Tài chính, Kế toán
- Văn hóa, Xã hội
- Ngoại ngữ
- Văn học, Báo chí
- Kiến trúc, xây dựng
- Sư phạm
- Khoa học Tự nhiên
- Luật
- Y Dược, Công nghệ thực phẩm
- Nông Lâm Thủy sản
- Ôn thi Đại học, THPT
- Đại cương
- Tài liệu khác
- Luận văn tổng hợp
- Nông Lâm
- Nông nghiệp
- Luận văn luận án
- Văn mẫu
- Luận văn tổng hợp
- Home
- Luận văn tổng hợp
- ĐỒ ÁN TỐT NGHIỆP TÌM HIỂU NGÔN NGỮ C# VÀ VIẾT MỘT ỨNG DỤNG MINH HỌA PHẦN 6
Lập trình với C# Gvhd: Nguyễn Tấn Trần Minh Khang 143 thêm hay bớt đi một bước trong luồng công việc cài đặt. Ví dụ hộp thoại thuộc tính của mục Welcome. Hình 13-19 Cửa sổ thuộc tính của mục Welcome trong quá trình cài đặt. Hiệu chỉnh thêm cho quá trình cài đặt Nếu quá trình cài đặt trong cửa sổ User Interface vẫn không đủ thỏa mãn nhu cầu cài đặt của ứng dụng, thì ta có thể tự hiệu chỉnh các thông số cho tiến trình cài đặt : điều kiện để chạy tiến trình cài đặt … Ta chọn mục Custom Option trong View Menu để thực hiện mục đích này. Kết thúc việc tạo chương trình cài đặt Sau khi hoàn tất mọi hiệu chỉnh, ta chỉ cần chạy ứng dụng và .NET sẽ tạo ra một tập tin cài đặt MSD để cài đặt ứng dụng của ta. Truy cập dữ liệu với ADO.NET Gvhd: Nguyễn Tấn Trần Minh Khang 144 Chương 14 Truy cập dữ liệu với ADO.NET Trong thực tế, có rất nhiều ứng dụng cần tương tác với cơ sở dữ liệu. .NET Framework cung cấp một tập các đối tượng cho phép truy cập vào cơ sở dữ liệu, tập các đối tượng này được gọi chung là ADO.NET. ADO.NET tương tự với ADO, điểm khác biệt chính ở chỗ ADO.NET là một kiến trúc dữ liệu rời rạc, không kết nối (Disconnected Data Architecture). Với kiến trúc này, dữ liệu được nhận về từ cơ sở dữ liệu và được lưu trên vùng nhớ cache của máy người dùng. Người dùng có thể thao tác trên dữ liệu họ nhận về và chỉ kết nối đến cơ sở dữ liệu khi họ cần thay đổi các dòng dữ liệu hay yêu cầu dữ liệu mới. Việc kết nối không liên tục đến cơ sở dữ liệu đã đem lại nhiều thuận lợi, trong đó điểm lợi nhất là việc giảm đi một lưu lượng lớn truy cập vào cơ sở dữ liệu cùng một lúc, tiết kiệm đáng kể tài nguyên bộ nhớ. Giảm thiểu đáng kể vấn đề hàng trăm ngàn kết nối cùng truy cập vào cơ sở dữ liệu cùng một lúc. Command, Recordset. Remote Data Services ( RDS ) của Microsoft cho phép dùng ADO thông qua các giao thức HTTP, HTTPS và DCOM để truy cập dữ liệu qua Web. Microsoft Data Access Components (MDAC) là tổ hợp của ODBC, OLEDB, ADO và cả RDS. Ta có thể kết nối dữ liệu bằng một trong các cách: dùng ODBC driver (DSN), dùng OLEDB thông qua ODBC hoặc OLEDB không thông qua ODBC. 14.3 Kiến trúc ADO.NET ADO.NET được chia ra làm hai phần chính rõ rệt, được thể hiện qua hình Hình 14-1 Kiến trúc ADO.NET DDataSet là thành phần chính cho đặc trưng kết nối không liên tục của kiến trúc ADO.NET. DataSet được thiết kế để có thể thích ứng với bất kỳ nguồn dữ liệu nào. DataSet chứa một hay nhiều đối tượng DataTable mà nó được tạo từ tập các dòng và cột dữ liệu, cùng với khoá chính, khóa ngoại, ràng buộc và các thông tin liên Truy cập dữ liệu với ADO.NET Gvhd: Nguyễn Tấn Trần Minh Khang 146 quan đến đối tượng DataTable này. Bản thân DataSet được dạng như một tập tin XML. Thành phần chính thứ hai của ADO.NET chính là NET Provider Data, nó chứa các đối tượng phục vụ cho việc thao tác trên cơ sở dữ liệu được hiệu quả và nhanh chóng, nó bao gồm một tập các đối tượng Connection, Command, DataReader và DataAdapter. Đối tượng Connection cung cấp một kết nối đến cơ sở dữ liệu, Command cung cấp một thao tác đến cơ sở dữ liệu, DataReader cho phép chỉ đọc dữ liệu và DataAdapter là cấu nối trung gian giữa DataSet và nguồn dữ liệu. 14.4 Mô hình đối tượng ADO.NET Có thể nói mô hình đối tượng của ADO.NET khá uyển chuyển, các đối tượng của nó được tạo ra dựa trên quan điểm đơn giản và dễ dùng. Đối tượng quan trọng nhất trong mô hình ADO.NET chính là Dataset. Dataset dòng ta cũng có thuộc tính Rows. ADO. NET không đưa ra khái niệm RecordSet, thay vào đó để duyệt qua các dòng ( Row ), ta có thể truy cập các dòng thông qua thuộc tính Rows bằng vòng lặp foreach. 14.4.5 Đối tượng SqlConnection và SqlCommand Đối tượng SqlConnection đại diện cho một kết nối đến cơ sở dữ liệu, đối tượng này có thể được dùng chung cho các đối tượng SqlCommand khác nhau. Đối tượng SqlCommand cho phép thực hiện một câu lệnh truy vấn trực tiếp : như SELECT, UPDATE hay DELETE hay gọi một thủ tục (Store Procedure) từ cơ sở dữ liệu. 14.4.6 Đối tượng DataAdapter ADO.NET dùng DataAdapter như là chiếc cầu nối trung gian giữa DataSet và DataSource ( nguồn dữ liệu ), nó lấy dữ liệu từ cơ sở dữ liệu sau đó dùng phương Fill() để đẩy dữ liệu cho đối tượng DataSet. Nhờ đối tượng DataAdapter này mà DataSet tồn tại tách biệt, độc lập với cơ sở dữ liệu và một DataSet có thể là thể hiện của một hay nhiều cơ sở dữ liệu. Ví dụ : //Tạo đối tượng SqlDataAdapter SqlDataAdapter sda = new SqlDataAdapter(); // cung cấp cho sda một SqlCommand và SqlConnection // lấy dữ liệu //tạo đối tượng DataSet mới DataSet ds = new DataSet("tenDataSet"); Truy cập dữ liệu với ADO.NET Gvhd: Nguyễn Tấn Trần Minh Khang 148 //Đẩy dữ liệu trog sda vào ds bằng hàm Fill(); sda.Fill(ds); 14.5 Trình cung cấp dữ liệu (.NET Data Providers) commandString, connectionString); Truy cập dữ liệu với ADO.NET Gvhd: Nguyễn Tấn Trần Minh Khang 149 Hàm khởi tạo của đối tượng này gồm hai tham số commandString và connectionString. commandString là chuỗi chứa câu lệnh truy vấn trên dữ liệu mà ta muốn nhận về : string commandString = "Select CompanyName, ContactName from Customers"; Biến connectString chứa các thông số để kết nối đến cơ sở dữ liệu. Ứng dụng của ta dùng hệ quản trị cơ sở dữ liệu SQL Server, vì thế để đơn giản ta sẽ để đối số password là trống, uid là sa, máy chủ server là localhost và tên cơ sở dữ liệu là NorthWind : string connectionString = "server=localhost; uid=sa; pwd=; database=northwind"; Với đối tượng DataAdapter được tạo ở trên, ta sẽ tạo ra một đối tượng DataSet mới và đẩy dữ liệu vào nó bằng phương thức Fill() của đối tương DataAdapter. DataSet dataSet = new DataSet( ); DataAdapter.FillDataSet(dataSet,"Customers"); Đối tượng DataSet chứa một tập các DataTable, nhưng ở đây ta chỉ cần lấy dữ liệu của bảng đầu tiên là “Customers” : DataTable dataTable = dataSet.Tables[0]; Ta sẽ duyệt qua từng dòng của bảng bằng vòng lặp foreach để lấy về từng DataRow một, sau đó sẽ truy cập đến trường cần lấy dữ liệu thông qua tên cột, rồi thêm vào ListBox. foreach (DataRow dataRow in dataTable.Rows) { lbCustomers.Items.Add( dataRow["CompanyName"] + " (" + dataRow["ContactName"] + ")" ); } Sau đây là đoạn mã đầy đủ của ứng dụng : new SqlDataAdapter(commandString, connectionString); DataSet DataSet = new DataSet( ); // đẩy dữ liệu vào DataSet DataAdapter.Fill(DataSet,"Customers"); // lấy về một bảng dữ liệu DataTable dataTable = DataSet.Tables[0]; // duyệt từng dòng để lấy dữ liệu thêm vào ListBox foreach (DataRow dataRow in dataTable.Rows) { lbCustomers.Items.Add(dataRow["CompanyName"] + " (" + dataRow["ContactName"] + ")" ); } } public override void Dispose( ) { base.Dispose( ); components.Dispose( ); } private void InitializeComponent( ) { this.components = new System.ComponentModel.Container(); this.lbCustomers = new System.Windows.Forms.ListBox(); lbCustomers.Location = new System.Drawing.Point(48, 24); lbCustomers.Size = new System.Drawing.Size(368, 160); lbCustomers.TabIndex = 0; DataSet dataSet = new DataSet( ); • Đẩy bảng dữ liệu Customers lấy từ DataAdapter vào dataSet DataAdapter.Fill(dataSet,"Customers"); • Trích đối tượng DataTable từ dataSet trên DataTable dataTable = DataSet.Tables[0]; • Đẩy dữ liệu trong bảng dataTable vào ListBox foreach (DataRow dataRow in dataTable.Rows) { lbCustomers.Items.Add(dataRow["CompanyName"] + " (" + dataRow["ContactName"] + ")" ); } 14.7 Sử dụng trình cung cấp dữ liệu được quản lý Ở ví dụ trên chúng ta đã khảo sát qua cách truy cập dữ liệu thông qua trình cung cấp dữ liệu SQL Server .NET Data Provider. Trong phần này chúng ta sẽ tiếp tục khảo sát sang trình cung cấp dữ liệu OLE DB .NET Data Provider, với trình cung cấp dữ liệu này ta có thể kết nối đến bất kỳ hệ quản trị cơ sở dữ liệu nào có hỗ trợ trình cung cấp dữ liệu OLE DB Providers, cụ thể là Microsoft Access. So với ứng dụng trên, ta chỉ cần thay đổi một vào dòng mã là có thể hoạt động được. Đầu tiên là chuỗi kết nối : string connectionString = "provider=Microsoft.JET.OLEDB.4.0; " + "data source = c:\\northwind.mdb"; Truy cập dữ liệu với ADO.NET Gvhd: Nguyễn Tấn Trần Minh Khang 152 Chuỗi trên sẽ kết nối đến cơ sở dữ liệu northwind trên ổ đĩa C. Kế tiếp ta thay đổi đối tượng DataAdapter từ SqlDataAdapter sang // duyệt qua từng dòng dữ liệu foreach (DataRow dataRow in dataTable.Rows) { lbCustomers.Items.Add(dataRow["CompanyName"] + " (" + dataRow["ContactName"] + ")" ); } } 14.8 Làm việc với các điều khiển kết buộc dữ liệu ADO.NET hỗ trợ khá hoàn chỉnh cho các điều khiển kết buộc dữ liệu (Data-Bound), các điều khiển này sẽ nhận vào một DataSet, sau khi gọi hàm DataBind() thì dữ liệu sẽ tự động được hiển thị lên điều khiển. 14.8.1 Đẩy dữ liệu vào điều khiển lưới DataGrid Ví dụ sau sẽ dùng điều khiển lưới DataGrid để thực hiện kết buộc dữ liệu, điều khiển lưới này được hỗ trợ cho cả ứng dụng Windows Forms và WebForms. Truy cập dữ liệu với ADO.NET Gvhd: Nguyễn Tấn Trần Minh Khang 153 Trong ứng dụng trước, ta phải duyệt qua từng dòng của đối tượng DataTable để lấy dữ liệu, sau đó hiển thị chúng lên điều khiển ListBox. Trong ứng dụng này công việc hiển thị dữ liệu lên điều khiển được thực hiện đơn giản hơn, ta chỉ cần lấy về đối tượng DataView của DataSet, sau đó gán DataView này cho thuộc tính DataSource của điều khiển lưới, sau đó gọi hàm DataBind() thì tự động dữ liệu sẽ được đẩy lên điều khiển lưới dữ liệu. CustomerDataGrid.DataSource = DataSet.Tables["Customers"].DefaultView; Trước tiên ta cần tạo ra đối tượng lưới trên Form bằng cách kéo thả, đặt tên lại cho điều khiển lưới là CustomerDataGrid. Sau đây là mã hoàn chỉnh của ứng dụng kết buộc dữ liệu cho điều khiển lưới : using System; using System.Drawing; using System.Collections; // kết buộc dữ liệu của DataSet cho lưới CustomerDataGrid.DataSource= DataSet.Tables["Customers"].DefaultView; } public override void Dispose( ) { base.Dispose( ); components.Dispose( ); } Truy cập dữ liệu với ADO.NET Gvhd: Nguyễn Tấn Trần Minh Khang 154 private void InitializeComponent( ) { this.components = new System.ComponentModel.Container(); this.CustomerDataGrid = new DataGrid(); CustomerDataGrid.BeginInit(); CustomerDataGrid.Location = new System.Drawing.Point (8, 24); CustomerDataGrid.Size = new System.Drawing.Size (656, 224); CustomerDataGrid.DataMember = ""; CustomerDataGrid.TabIndex = 0; CustomerDataGrid.Navigate += new NavigateEventHandler(this.dataGrid1_Navigate); this.Text = "ADOFrm3"; this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size (672, 273); this.Controls.Add (this.CustomerDataGrid); CustomerDataGrid.EndInit ( ); Đối tượng Connection sẽ được tạo riêng với chuỗn kết nối : string connectionString = "server=localhost; uid=sa; pwd=; database=northwind"; myConnection = new System.Data.Sql.SqlConnection(connectionString); Sau đó ta sẽ mở kết nối : myConnection.Open( ); Ta có thể thực hiện nhiều giao tác trên cơ sở dữ liệu khi kết nối được mở và sau khi dùng xong ta chỉ đơn giản đóng kết nối lại. Tiếp theo ta sẽ tạo ra đối tượng DataSet: myDataSet = new System.Data.DataSet( ); Và tiếp tục tạo đối tượng Command, gắn cho nó đối tượng Connection đã mở và chuỗi truy vấn dữ liệu : myCommand = new System.Data.SqlClient.SqlCommand( ) myCommand.Connection=myConnection; myCommand.CommandText = "Select * from Customers"; Cuối cùng ta cần tạo ra đối tượng SqlDataAdapter, gắn đối tượng SqlCommand vừa tạo ở trên cho nó, đồng thời phải tiến hành ánh xạ bảng dữ liệu nó nhận được từ câu truy vấn của đối tượng Command để tạo sự đồng nhất về tên các cột khi đẩy bảng dữ liệu này vào DataSet. DataAdapter = new System.Data.SqlClient.SqlDataAdapter( ); DataAdapter.SelectCommand= myCommand; DataAdapter.TableMappings.Add("Table","Customers"); DataAdapter.Fill(myDataSet); Bây giờ ta chỉ việc gắn DataSet vào thuộc tính DataSoucre của điều khiển lưới: dataGrid1.DataSource=myDataSet.Tables["Customers"].DefaultView; Dưới đây là mã hoàn chỉnh của ứng dụng này : using System; using System.Drawing; using System.Collections; using System.ComponentModel; // tạo đối tượng command mới và gắn cho đối tượng // connectio và chuỗi truy vấn cho nó myCommand = new System.Data.SqlClient.SqlCommand( ); myCommand.Connection=myConnection; myCommand.CommandText = "Select * from Customers"; // tạo đối tượng DataAdapter với đối tượng Command vừa // tạo ở trên, đồng thời thực hiện ánh xạ bảng dữ liệu DataAdapter = new SqlDataAdapter( ); DataAdapter.SelectCommand= myCommand; DataAdapter.TableMappings.Add("Table","Customers"); // đẩy dữ liệu vào DataSet DataAdapter.Fill(myDataSet); // gắn dữ liệu vào lưới dataGrid1.DataSource = myDataSet.Tables["Customers"].DefaultView; } public override void Dispose() { base.Dispose(); components.Dispose(); } private void InitializeComponent( ) { this.components = new System.ComponentModel.Container(); một lưới và thể hiện quan hệ một nhiều của hai bảng ngay trên lưới. Để làm được điều này ta chỉ cần dùng chung một đối tượng Connetion, hai đối tượng tượng SqlDataAdapter và hai đối tượng SqlCommand. Sau khi tạo đối tượng SqlDataAdapter cho bảng Customers tương tự như ví dụ trên, ta tiến tạo tiếp đối tượng SqlDataAdapter cho bảng Orders : myCommand2 = new System.Data.SqlClient.SqlCommand(); DataAdapter2 = new System.Data.SqlClient.SqlDataAdapter(); myCommand2.Connection = myConnection; myCommand2.CommandText = "SELECT * FROM Orders"; Lưu ý là ở đây đối tượng DataAdapter2 có thể dùng chung đối tượng Connection ở trên, nhưng đối tượng Command thì khác. Sau đó gắn đối tượng Command2 cho DataAdapter2, ánh xạ bảng dữ liệu và đẩy dữ liệu vào DataSet ở trên. DataAdapter2.SelectCommand = myCommand2; DataAdapter2.TableMappings.Add ("Table", "Orders"); DataAdapter2.Fill(myDataSet); Tại thời điểm này, ta có một đối tượng DataSet nhưng chứa hai bảng dữ liệu : Customers và Orders. Do ta cần thể hiện cả quan hệ của hai bảng ngay trên điều khiển lưới, cho nên ta cần phải định nghĩa quan hệ này cho đối tượng DataSet của chúng ta. Nếu không làm điều này thì đối tượng DataSet sẽ bỏ qua quan hệ giữa 2 bảng này. Do đó ta cần khai báo thêm đối tương DataRelation : System.Data.DataRelation dataRelation; Truy cập dữ liệu với ADO.NET Gvhd: Nguyễn Tấn Trần Minh Khang 158 Do mỗi bảng Customers và Orders đều có chứa một thuộc tính CustomersId, nên ta cũng cần khái báo thêm hai đối tượng DataColumn tương ứng với hai thuộc tính này. System.Data.DataColumn dataColumn1; System.Data.DataColumn dataColumn2; Mỗi một DataColumn sẽ giữ giá trị của một cột trong bảng của đối tượng DataSet : private System.Data.SqlClient.SqlConnection myConnection; private System.Data.DataSet myDataSet; private System.Data.SqlClient.SqlCommand myCommand; private System.Data.SqlClient.SqlCommand myCommand2; private System.Data.SqlClient.SqlDataAdapter DataAdapter; private System.Data.SqlClient.SqlDataAdapter DataAdapter2; public ADOForm1( ) { InitializeComponent( ); // tạo kết nối string connectionString = "server=Neptune; uid=sa;" + " pwd=oWenmEany; database=northwind"; Truy cập dữ liệu với ADO.NET Gvhd: Nguyễn Tấn Trần Minh Khang 159 myConnection = new SqlConnection(connectionString); myConnection.Open( ); // tạo DataSet myDataSet = new System.Data.DataSet( ); // tạo đối tượng Command và DataSet cho bảng Customers myCommand = new System.Data.SqlClient.SqlCommand( ); myCommand.Connection=myConnection; myCommand.CommandText = "Select * from Customers"; DataAdapter =new System.Data.SqlClient.SqlDataAdapter(); DataAdapter.SelectCommand= myCommand; DataAdapter.TableMappings.Add("Table","Customers"); DataAdapter.Fill(myDataSet); public override void Dispose( ) { base.Dispose( ); components.Dispose( ); } private void InitializeComponent( ) { this.components = new System.ComponentModel.Container(); this.dataGrid1 = new System.Windows.Forms.DataGrid(); dataGrid1.BeginInit( ); dataGrid1.Location = new System.Drawing.Point(24, 32); dataGrid1.Size = new System.Drawing.Size(480, 408); Truy cập dữ liệu với ADO.NET Gvhd: Nguyễn Tấn Trần Minh Khang 160 dataGrid1.DataMember = ""; dataGrid1.TabIndex = 0; this.Text = "ADOFrm1"; this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size (536, 501); this.Controls.Add (this.dataGrid1); dataGrid1.EndInit ( ); } public static void Main(string[] args) { Application.Run(new ADOForm1( )); } } liệu. Truy cập dữ liệu với ADO.NET Gvhd: Nguyễn Tấn Trần Minh Khang 162 8. Gọi phương thức AcceptChanges() của DataSet để cập nhật các thay đổi vào DataSet này hay phương thức RejectChanges() nếu từ chối cập nhật thay đổi cho DataSet hiện hành. Với luồng công việc trên, cho phép ta có thể kiểm soát tốt được việc thay đổi trên cơ sở dữ liệu hay việc gỡ lỗi cũng thuận tiện hơn. Trong ví dụ dưới đây , ta sẽ cho hiện thị dữ liệu trong bảng Customers lên một ListBox, sau đó ta tiến hành các thao tác thêm, xóa hay sửa trên cơ sở dữ liệu. Để dễ hiểu, ta giảm bớt một số thao tác quản lý ngoại lệ hay lỗi, chỉ tập trung vào mục đích chính của ta. Giao diện chính của ứng dụng sau khi hoàn chỉnh : Hình 14-8 Hiệu chỉnh dữ liệu trên bảng Customers. Trong Form này, ta có một ListBox lbCustomers liệt kê các khách hàng, một Button btnUpdate cho việc cập nhật dữ liệu, một Button Xóa, ứng với nút thêm mới ta có tám hộp thoại TextBox để nhận dữ liệu gõ vào từ người dùng. Đồng thời ta có thêm một lblMessage để hiển thị các thông báo ứng với các thao tác trên. 14.9.1 Truy cập và hiển thị dữ liệu Ta sẽ tạo ra ba biến thành viên : DataAdapter, DataSet và Command : private SqlDataAdapter DataAdapter; private DataSet DataSet; private DataTable dataTable; Việc khai báo các biến thành viên như vậy sẽ giúp ta có thể dùng lại cho các phương thức khác nhau. T khai báo chuỗi kết nối và truy vấn : string connectionString = "server=localhost; uid=sa; pwd=; database=northwind"; string commandString = "Select * from Customers"; Các chuỗi được dùng làm đối số để tạo đối tượng DataAdapter : DataAdapter=new SqlDataAdapter(commandString,ConnectionString); targetRow.EndEdit(); Lấy về các thay đổi trên đối tượng DataSet để kiểm tra xem các thay đổi có xảy ra bất kỳ lỗi nào không. Ở đây ta sẽ dùng một biến cờ có kiểu true/false để xác định là có lỗi là true, không có lỗi là false.Kiểm tra lỗi bằng cách dùng hai vòng lặp tuần tự trên bảng và dòng của DataSet mới lấy về ở trên, ta dùng thuộc tính HasErrors để kiểm tra lỗi trên bảng, phương thức GetErrors()để lấy về các dòng có lỗi trong bảng. DataSet DataSetChanged; DataSetChanged = DataSet.GetChanges(DataRowState.Modified); bool okayFlag = true; if (DataSetChanged.HasErrors) { okayFlag = false; string msg = "Error in row with customer ID "; foreach (DataTable theTable in DataSetChanged.Tables) { if (theTable.HasErrors) Truy cập dữ liệu với ADO.NET Gvhd: Nguyễn Tấn Trần Minh Khang 164 { DataRow[] errorRows = theTable.GetErrors( ); foreach (DataRow theRow in errorRows) msg = msg + theRow["CustomerID"]; } luôn vào cơ sở dữ liệu : dataTable.Rows[lbCustomers.SelectedIndex].Delete( ); DataSet.AcceptChanges( ); DataAdapter.Update(DataSet,"Customers"); Khi gọi hàm AccceptChanges()để cập nhật thay đổi cho DataSet thì nó sẽ lần lượt gọi hàm này cho các DataTable, sau đó cho các DataRow để cập nhật chúng. Ta cũng cần chú ý khi gọi hàm xóa trên bảng Customers, dòng dữ liệu DataRow của khách hàng này chỉ được xóa nếu nó không vi phạm ràng buộc trên các bảng khác, ở đây khách hàng chỉ được xóa nếu nếu khách hàng không có một hóa đơn nào trên bảng Orders. Nếu có ta phải tiến hành xóa trên bảng hóa đơn trước, sau đó mới xóa trên bảng Customers. Truy cập dữ liệu với ADO.NET Gvhd: Nguyễn Tấn Trần Minh Khang 165 14.9.4 Tạo một dòng dữ liệu mới Sau khi người dùng cung cấp các thông tin về khách hàng cần tạo mới và nhấn Button tạo mới ( New ), ta sẽ viết mã thực thi trong hàm bắt sự kiện nhấn nút tạo mới này. Đầu tiên ta sẽ tạo ra một dòng mới trên đối tượng DataTable, sau đó gán dữ liệu trên các TextBox cho các cột của dòng mới này : DataRow newRow = dataTable.NewRow( ); newRow["CustomerID"] = txtCompanyID.Text; newRow["CompanyName"] = txtCompanyName.Text; newRow["ContactName"] = txtContactName.Text; newRow["ContactTitle"] = txtContactTitle.Text; newRow["Address"] = txtAddress.Text; newRow["City"] = txtCity.Text; newRow["PostalCode"] = txtZip.Text; newRow["Phone"] = txtPhone.Text; Thêm dòng mới với dữ liệu vào bảng DataTable, cập nhật vào cơ sở dữ liệu, hiển thị câu truy vấn, cập nhật DataSet, hiển thị dữ liệu mới lên hộp ListBox. Làm trắng các điều khiển TextBox bằng hàm thành viên ClearFields(). private System.Windows.Forms.TextBox txtAddress; private System.Windows.Forms.Label label4; private System.Windows.Forms.TextBox txtContactName; private System.Windows.Forms.Label label3; private System.Windows.Forms.TextBox txtCompanyName; Truy cập dữ liệu với ADO.NET Gvhd: Nguyễn Tấn Trần Minh Khang 166 private System.Windows.Forms.Label label2; private System.Windows.Forms.TextBox txtCompanyID; private System.Windows.Forms.Label label1; private System.Windows.Forms.Button btnNew; private System.Windows.Forms.TextBox txtCustomerName; private System.Windows.Forms.Button btnUpdate; private System.Windows.Forms.Label lblMessage; private System.Windows.Forms.Button btnDelete; private System.Windows.Forms.ListBox lbCustomers; private SqlDataAdapter DataAdapter; // biết thành viên DataSet và dataTable cho phép ta sử // dụng trên nhiều hàm khác nhau private DataSet DataSet; private DataTable dataTable; public ADOForm1( ) { InitializeComponent( ); string connectionString = "server=Neptune; uid=sa;" + " pwd=oWenmEany; database=northwind"; string commandString = "Select * from Customers"; DataAdapter = this.lblMessage = new System.Windows.Forms.Label(); this.btnUpdate = new System.Windows.Forms.Button(); this.txtContactName= new System.Windows.Forms.TextBox(); this.txtZip = new System.Windows.Forms.TextBox(); this.btnDelete = new System.Windows.Forms.Button(); Truy cập dữ liệu với ADO.NET Gvhd: Nguyễn Tấn Trần Minh Khang 167 this.txtContactTitle=new System.Windows.Forms.TextBox(); this.txtAddress = new System.Windows.Forms.TextBox(); this.txtCompanyName=new System.Windows.Forms.TextBox( ); this.label5 = new System.Windows.Forms.Label( ); this.label6 = new System.Windows.Forms.Label( ); this.label7 = new System.Windows.Forms.Label( ); this.label8 = new System.Windows.Forms.Label( ); this.label9 = new System.Windows.Forms.Label( ); this.label4 = new System.Windows.Forms.Label( ); this.lbCustomers = new System.Windows.Forms.ListBox( ); this.txtPhone = new System.Windows.Forms.TextBox( ); this.btnNew = new System.Windows.Forms.Button( ); this.label1 = new System.Windows.Forms.Label( ); this.label2 = new System.Windows.Forms.Label( ); this.label3 = new System.Windows.Forms.Label( ); txtCustomerName.Location = new System.Drawing.Point(256, 120); txtCustomerName.TabIndex = 4; txtCustomerName.Size = new System.Drawing.Size(160, 20); txtCity.Location = new System.Drawing.Point(384, 245); txtCity.TabIndex = 15; txtCity.Size = new System.Drawing.Size (160, 20); txtCompanyID.Location = txtAddress.Location = new System.Drawing.Point(384, 216); txtAddress.TabIndex = 13; txtAddress.Size = new System.Drawing.Size (160, 20); txtCompanyName.Location= new System.Drawing.Point (136, 245); txtCompanyName.TabIndex = 9;
Tải File Word Nhờ tải bản gốc Tài liệu, ebook tham khảo khác- Tìm hiểu ngôn ngữ c# và viết một ứng dụng minh họa
- TÌM HIỂU NGÔN NGỮC# VÀ VIẾT MỘT ỨNG DỤNG MINH HỌA
- Đồ án tốt nghiệp Tìm hiểu Chữ kí nhóm và ứng dụng trong giao dịch điện tử
- Đố án tốt nghiệp
- Đồ án tốt nghiệp Tìm hiểu về wimax, nhiễu và ảnh hưởng của nhiễu trong wimax
- Đề tài
- Đồ án tốt nghiệp: Tìm hiểu về rong câu và nghiên cứu sản xuất thạch rau câu
- Đồ án tốt nghiệp - Tìm hiểu Chữ kí nhóm và ứng dụng trong giao dịch điện tử
- ĐỒ ÁN TỐT NGHIỆP TÌM HIỂU NGÔN NGỮ C# VÀ VIẾT MỘT ỨNG DỤNG MINH HỌA PHẦN 10
- ĐỒ ÁN TỐT NGHIỆP TÌM HIỂU NGÔN NGỮ C# VÀ VIẾT MỘT ỨNG DỤNG MINH HỌA PHẦN 9 doc
- Hạch toán kế toán nghiệp vụ mua hàng và thanh toán tiền hàng tại Công ty cổ phần đầu tư xây dựng và thương mại TNC
- Hoàn thiện kế toán tiền lương và khoản trích theo lương tại công ty cổ phần thương mại và đầu tư Mai Anh
- Hoàn thiện kế toán chi phí sản xuất và tính giá thành sản phẩm tại Công ty Cổ phần Xây dựng - Dịch vụ và Thương mại 68
- Nâng cao chất lượng công tác thẩm định dự án vay vốn tín dụng đầu tư phát triển của Nhà nước tại ngân hàng phát triển Việt Nam
- Một số giải pháp thúc đẩy tiêu thụ thép trên thị trường nội địa của công ty TNHH Công Nghiệp Quang Minh
- Phát triển thị trường Khách du lịch Pháp tại công ty Cổ phần du lịch Việt Nam
- Một số biện pháp thúc đẩy tiêu thụ sản phẩm chè của công ty cổ phần chè Quân Chu
- Thực trạng và một số giải pháp nhằm thúc đẩy sản xuất và tiêu thụ rau an toàn trên địa bàn huyện Gia Lâm
- Giải pháp xóa đói giảm nghèo tại tỉnh Phú Thọ đến năm 2015
- Các biện pháp tăng cường ứng dụng marketing vào hoạt động kinh doanh của Adsoft
Học thêm
- Nhờ tải tài liệu
- Từ điển Nhật Việt online
- Từ điển Hàn Việt online
- Văn mẫu tuyển chọn
- Tài liệu Cao học
- Tài liệu tham khảo
- Truyện Tiếng Anh
Copyright: Tài liệu đại học ©
TopTừ khóa » Duyệt Từng Dòng Trong Datatable C#
-
Hỏi: Duyệt Giá Trị Từng Dòng Trong Databse Như Nào - Cộng đồng C Việt
-
Chủ đề: Duyệt Từng Dòng Trên DataTable...Help! - Diễn Đàn Tin Học
-
Vấn đề Duyệt Tất Cả Các Dòng Trên Cơ Sở Dữ Liệu Trong C#
-
(ADO.NET) DataAdapter DataSet Và DataTable Tìm Hiểu Và Sử Dụng
-
Thay đổi Các Bản Ghi Của Cơ Sở Dữ Liệu
-
Tìm Hiểu C# Và ứng Dụng: Khởi Sự Với ADO.NET
-
Làm Cách Nào để Lấy Tên Cột để In Trong Chương Trình C # Này?
-
Sử Dụng DataView để Filter Dữ Liệu Từ DataTable C - Lập Trình .NET
-
Cách Loại Bỏ Các DataRow Bị Trùng Trong DataTable C
-
[BÀI 2] Đơn Giản Hóa Lập Trình Với Cơ Sở Dữ Liệu (ADO.NET) - Sử ...
-
Học Lập Trình C# – Lấy Danh Sách Server Trong SQL
-
Hướng Dẫn Sử Dụng DataReader, DataSet, DataAdapter And ...
-
DataTable.Select Method (System.Data) - Microsoft Docs
-
Lập Trình C# - TRUSTWEB.VN