1. 程式人生 > >ADO.NET中DataTable的應用(讀書筆記4)

ADO.NET中DataTable的應用(讀書筆記4)

errors 訪問 cep ati 設置 datarow ember for sql

一.思維導圖

技術分享圖片

二.知識點描述

DataTable是一個臨時保存數據的網格虛擬表(表示內存中數據的一個表。)

1.用法介紹:

(1)可以使用相應的 DataTable 構造函數創建 DataTable 對象。 可以通過使用 Add 方法將其添加到 DataTable 對象的 Tables集合中,將其添加到 DataSet 中。

(2)使用 DataAdapter 對象的 Fill 方法或 FillSchema 方法在 DataSet 中創建,或者使用 DataSet 的 ReadXml、ReadXmlSchema 或InferXmlSchema 方法從預定義的或推斷的 XML 架構中創建。 請註意,將一個 DataTable 作為成員添加到一個 DataSet 的 Tables 集合中後,不能再將其添加到任何其他 DataSet 的表集合中。

(3)在為 DataTable 定義了架構之後,可通過將 DataRow 對象添加到表的 Rows 集合中來將數據行添加到表中。

2.在DataTable中處理數據

(1)向數據表中添加數據

(2)說明如何創建新行並將它們添加到表中。

(3)查看數據表中的數據

(4)說明如何訪問行中的數據,包括數據的原始版本和當前版本。

(5)Load 方法

(6)說明如何通過 Load 方法使用行填充 DataTable。

(7)DataTable 編輯

(8)說明如何修改行中的數據,包括掛起對行的更改,直至驗證並接受了建議的更改。

(9)行狀態與行版本

(10)提供有關行的不同狀態的信息。

(11)DataRow 刪除

(12)說明如何從表中移除行。

(13)行錯誤信息

(14)說明如何插入每行的錯誤信息,幫助解決應用程序中的數據問題。

(15)AcceptChanges 和 RejectChanges

(16)說明如何接受或拒絕對行的更改。

3.屬性和方法

(1)屬性:

名稱 說明
CaseSensitive 指示表中的字符串比較是否區分大小寫
Columns 獲取屬於該表的列的集合。
DataSet 獲取此表所屬的 DataSet。
HasErrors 獲取一個值,該值指示該表所屬的 DataSet 的任何表的任何行中是否有錯誤。
Rows 獲取屬於該表的行的集合。
TableName 獲取或設置 DataTable 的名稱

(2)方法:

名稱 方法
Clear 清除所有數據的 DataTable。
Clone 克隆 DataTable 的結構,包括所有 DataTable 架構和約束。
Compute 計算用來傳遞篩選條件的當前行上的給定表達式
Copy 復制該 DataTable 的結構和數據。
GetErrors 獲取包含錯誤的 DataRow 對象的數組。
GetType 獲取當前實例的 Type。 (繼承自 Object。)
ImportRow 將 DataRow 復制到 DataTable 中,保留任何屬性設置以及初始值和當前值

三.示例代碼和效果截圖

對DataTable執行初始化、數據填充、克隆等操作。

  1 using System;
  2 using System.Collections.Generic;
  3 using System.ComponentModel;
  4 using System.Data;
  5 using System.Drawing;
  6 using System.Linq;
  7 using System.Text;
  8 using System.Windows.Forms;
  9 using System.Data.SqlClient;
 10 using System.Configuration; 
 11 
 12 namespace LOGIN
 13 {
 14     public partial class OrdersTable : Form
 15     {
 16         private DataTable ordersTable;
 17         private DataView OrdersViewByName;
 18         private DataView OrdersViewBysupplyer;
 19         public OrdersTable()
 20         {
 21             InitializeComponent();
 22            
 23             //this.StartPosition = FormStartPosition.CenterScreen;                               
 24             this.dgv_orders.AllowUserToAddRows = false;                          
 25             //this.dgv_orders.RowHeadersVisible = false;                                                     
 26             this.dgv_orders.BackgroundColor = Color.White;                                  
 27             this.dgv_orders.AutoSizeColumnsMode =
 28                 DataGridViewAutoSizeColumnsMode.AllCells;                                      
 29         }
 30 
 31         private void OrdersTable_Load(object sender, EventArgs e)
 32         {
 33             SqlConnection sqlConnection = new SqlConnection();
 34             sqlConnection.ConnectionString =
 35                 "Server=(local);Database=MyHospital;Integrated Security=sspi";
 36             SqlCommand sqlCommand = new SqlCommand();
 37             SqlCommand sqlCommand1 = new SqlCommand();
 38          
 39             sqlCommand.Connection = sqlConnection;
 40             sqlCommand1.Connection = sqlConnection;
 41             
 42             sqlCommand.CommandText = "select OrderID,SupplyID,OrderKinds,OrderDate,GetDate,ProducePla,State,c.DrugName,cs.IndPrice,Num,TolPrice,cs.Guige FROM orders cs JOIN dbo.medicineData c ON cs.MedicineID=c.MedicineID;";
 43             sqlCommand1.CommandText = "select SupplyID,Supplyname from supplyer;";
 44             
 45             SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();
 46             sqlDataAdapter.SelectCommand = sqlCommand;
 47             //DataTable ordersTable = new DataTable();
 48             SqlDataAdapter sqlDataAdapter1 = new SqlDataAdapter();                                        
 49             sqlDataAdapter1.SelectCommand = sqlCommand1;                                                 
 50             DataTable supplyerTable = new DataTable();
 51             sqlDataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;                           
 52             this.ordersTable = new DataTable();
 53             
 54             sqlConnection.Open();
 55             sqlDataAdapter.Fill(this.ordersTable);
 56             sqlDataAdapter1.Fill(supplyerTable);
 57            
 58             sqlConnection.Close();
 59             this.ordersTable.TableName = "tablename";
 60             this.OrdersViewByName = new DataView();                                                        
 61             this.OrdersViewByName.Table = this.ordersTable;                                                
 62             this.OrdersViewByName.Sort = "DrugName ASC";
 63 
 64             this.OrdersViewBysupplyer = new DataView();                                                        
 65             this.OrdersViewBysupplyer.Table = this.ordersTable;                                               
 66             this.OrdersViewBysupplyer.Sort = "ProducePla ASC";               
 67   
 68             this.dgv_orders.DataSource = ordersTable;
 69             dgv_orders.Columns["OrderID"].ReadOnly = true;
 70             dgv_orders.Columns["OrderKinds"].ReadOnly = true;
 71             dgv_orders.Columns["State"].ReadOnly = true;
 72             dgv_orders.Columns["DrugName"].ReadOnly = true;
 73             dgv_orders.Columns["OrderID"].HeaderText = "訂單號";
 74             dgv_orders.Columns["SupplyID"].Visible=false;
 75             dgv_orders.Columns["OrderKinds"].HeaderText = "訂單";
 76             dgv_orders.Columns["OrderDate"].HeaderText = "訂單日期";
 77             dgv_orders.Columns["GetDate"].HeaderText = "到貨日期";
 78             dgv_orders.Columns["ProducePla"].HeaderText = "生產地";
 79             dgv_orders.Columns["State"].HeaderText = "是否入庫";
 80             dgv_orders.Columns["DrugName"].HeaderText = "藥品";
 81             dgv_orders.Columns["DrugName"].DisplayIndex=3;
 82             dgv_orders.Columns["IndPrice"].HeaderText = "單價";
 83             dgv_orders.Columns["Num"].HeaderText = "數量";
 84             dgv_orders.Columns["TolPrice"].HeaderText = "總價";
 85             dgv_orders.Columns["Guige"].HeaderText = "規格";
 86             this.dgv_orders.Columns[this.dgv_orders.Columns.Count - 1].AutoSizeMode =                       
 87                 DataGridViewAutoSizeColumnMode.Fill;
 88 
 89             DataGridViewComboBoxColumn supplyerColumn = new DataGridViewComboBoxColumn();                   
 90             supplyerColumn.Name = "Supplyname";                                                                  
 91             supplyerColumn.HeaderText = "供應商";                                                           
 92             supplyerColumn.DataSource = supplyerTable;
 93             supplyerColumn.DisplayMember = "Supplyname";                                                             
 94             supplyerColumn.ValueMember = "SupplyID";                                                             
 95             supplyerColumn.DataPropertyName = "SupplyID";                                                 
 96             supplyerColumn.DisplayIndex = 1;                                                               
 97             //supplyerColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;                           
 98             this.dgv_orders.Columns.Add(supplyerColumn);
 99 
100             DataGridViewColumn medicineColumn = new DataGridViewColumn();                      
101             medicineColumn.Name = "medicine";                                                                   
102             medicineColumn.HeaderText = "藥品名";
103             
104 
105             
106             
107         }
108 
109         private void update_Click(object sender, EventArgs e)
110         {
111             SqlConnection sqlConnection = new SqlConnection();                                           
112             sqlConnection.ConnectionString =
113                 ConfigurationManager.ConnectionStrings["Sql"].ConnectionString;                             
114             SqlCommand updateCommand = new SqlCommand();                                                  
115             updateCommand.Connection = sqlConnection;                                                         
116             updateCommand.CommandText =                                                                      
117                 "UPDATE orders"
118                 + " SET SupplyID=@SupplyID,OrderDate=@OrderDate,GetDate=@GetDate,ProducePla=@ProducePla,IndPrice=@IndPrice,Num=@Num,TolPrice=@TolPrice,Guige=@Guige,state=@state"
119                 + " WHERE OrderID=@OrderID;";
120             updateCommand.Parameters.Add("@OrderID", SqlDbType.Char, 10, "OrderID");
121             updateCommand.Parameters.Add("@SupplyID", SqlDbType.Char, 10, "SupplyID");                      
122             updateCommand.Parameters.Add("@OrderDate", SqlDbType.DateTime, 0, "OrderDate");
123             updateCommand.Parameters.Add("@GetDate", SqlDbType.DateTime, 0, "GetDate");
124             updateCommand.Parameters.Add("@ProducePla", SqlDbType.VarChar, 0, "ProducePla");
125             updateCommand.Parameters.Add("@IndPrice", SqlDbType.Char, 0, "IndPrice");
126             updateCommand.Parameters.Add("@Num", SqlDbType.Int, 0, "Num");
127             updateCommand.Parameters.Add("@TolPrice", SqlDbType.Int, 10, "TolPrice");
128             updateCommand.Parameters.Add("@Guige", SqlDbType.VarChar, 10, "Guige");                        
129             updateCommand.Parameters.Add("@state", SqlDbType.Int, 0, "state");
130 
131 
132             SqlCommand deleteCommand = new SqlCommand();                                                
133             deleteCommand.Connection = sqlConnection;                                                      
134             deleteCommand.CommandText =                                                                  
135                 "DELETE orders"
136                 + " WHERE OrderID=@OrderID;";
137             deleteCommand.Parameters.Add("@OrderID", SqlDbType.Char, 10, "OrderID");
138             SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();                                         
139             //sqlDataAdapter.InsertCommand = insertCommand;                                                   
140             sqlDataAdapter.UpdateCommand = updateCommand;                                               
141             sqlDataAdapter.DeleteCommand = deleteCommand;                                                   
142             DataTable studentTable1 = (DataTable)this.dgv_orders.DataSource;                                
143             sqlConnection.Open();                                                                           
144             int rowAffected = sqlDataAdapter.Update(studentTable1);                                         
145             sqlConnection.Close();                                                                          
146             MessageBox.Show("更新" + rowAffected.ToString() + "行。");     
147         }
148 
149         private void input_Click(object sender, EventArgs e)
150         {
151             Orders f = new Orders();
152             f.Show();
153         }
154 
155         private void search_Click(object sender, EventArgs e)
156         {
157             
158             if (this.comboBox1.SelectedIndex == 0 && this.search.Text != "") 
159             {
160                 DataRow searchResultRow = this.ordersTable.Rows.Find(this.textBox1.Text.Trim());            
161                 DataTable searchResultTable = this.ordersTable.Clone();                                      
162                 searchResultTable.ImportRow(searchResultRow);                                              
163                 this.dgv_orders.DataSource = searchResultTable;
164             }
165             else if (this.comboBox1.SelectedIndex == 1 && this.search.Text != "")
166             {
167                 DataRowView[] searchResultRowViews = 
168                 this.OrdersViewByName.FindRows(this.textBox1.Text.Trim());                      
169             DataTable searchResultTable = this.ordersTable.Clone();                                     
170             foreach (DataRowView dataRowView1 in searchResultRowViews)                                 
171             {
172                 searchResultTable.ImportRow(dataRowView1.Row);                                          
173             }
174             this.dgv_orders.DataSource = searchResultTable; 
175             }
176             else if (this.comboBox1.SelectedIndex == 2 && this.search.Text != "")
177             {
178                 DataRowView[] searchResultRowViews =
179                 this.OrdersViewBysupplyer.FindRows(this.textBox1.Text.Trim());            
180                 DataTable searchResultTable = this.ordersTable.Clone();                                       
181                 foreach (DataRowView dataRowView1 in searchResultRowViews)                                     
182                 {
183                     searchResultTable.ImportRow(dataRowView1.Row);                                     
184                 }
185                 this.dgv_orders.DataSource = searchResultTable; 
186             }
187             
188            
189         }
190     }
191 }

技術分享圖片

ADO.NET中DataTable的應用(讀書筆記4)