3 回答

TA貢獻1803條經驗 獲得超6個贊
關于 Dataset 的fill 方法:
使用DataAdapter填充DataSet
在選擇了DataAdapter的類型(SqlDataAdapter或OleDbDataAdapter)并配置了DataAdapter來執行所需的任務之后,可以用創建的DataAdapter來填充DataSet。
1.使用DataAdapter填充DataSet
可以使用DataAdapter來填充DataSet。調用DataAdapter的Fill方法,并指定要填充的DataSet表。Fill方法隱式執行DataAdapter的SelectCommand中的SQL查詢,查詢的結果用于定義DataSet表的結構,并用數據來填充表。此外,Fill方法是可重載的。例如:
12345 | rowsAffected = aDataAdapter.Fill(DataSet); rowsAffected = aDataAdapter.Fill(DataSet,strDataTableName); rowsAffected = aDataAdapter Fil](DataTable); |
當填充DataSet時,DataAdapter會強制一些約束,例如主鍵唯一性。為了提高性能,在填充DataSet前將EnforceConstraints屬性設置為false,這將在數據加載過程中禁用約束檢查。
1 | aDataset.EnforceConstraints= false ; |
使用Datadapter填充DataSet。
下面創建一個DataSet,它包含一個名為Department的表。使用名為daDepartment的DataAdapter來填充該表,并調用BeginLoadData方法來優化性能。
填充完該表之后,將一個DataGridView控件綁定到該表,該DataGridView將在屏幕上顯示信息。
123456789101112131415 | SqlDataAdapter daDept = new SqlDataAdapter( "select * from humanresources.department" , cn); DataSet dsDept = new DataSet(); dsDept.Tables.Add( new DataTable( "Department" )); dsDept.Tables[0].BeginLoadData(); daDept.Fill(dsDept, "Department" ); dsDept.Tables[0].EndLoadData(); dataGridView1.DataSource = dsDept.Tables[ "Department" ]; |
DataAdapter和Command在如何處理Connection對象上有一個主要的區別:在調用一個Command對象的執行方法前,將打開與該Command相關聯的Connection對象,否則Command會拋出一個異常;DataAdapter則沒有這樣的需求。
如果要調用DataAdapter對象的Fill方法,并且SelectCommand屬性的Connection已經關閉,DataAdapter將自動打開連接、提交查詢、提取結果,然后關閉Connection。讀者也許會發現DataAdapter非常有條不紊,它總是將SelectCommand屬性的Connection恢復到其初始狀態。但是如果在調用Fill方法之前已經打開Connection,調用以后Connection仍然處于打開狀態。因此使用DataAdapter的Fill方法時,不需要手工打開Connection。
但在一些特殊情況下,也需要在執行DataAdapter的Fill方法之前先打開Connection。例如,在應用程序啟動時,用多個DataAdapter對象將多個查詢的結果填充到DaraSet中??梢允褂肈ataAdapter對象的構造函數強制每個DataAdapter都使用相同的Connection對象。代碼如下:
1234567891011121314151617 | string strConn = "Provider=SQLOLEDB;Data Souroe=(local)" + "Initial catalog=Northwind;Trusted_connection=Yes;" ; OleDbConnection cn = new OleObconnection(strconn); OleDbOataAdapter daCustomers,daOrders; daCustomers = new OleDbDataAdapter( "SELECT ... FROM Customers" ,cn); daOrders = new OleDbDataAdapter( "SELECT ... FROM orders" ,cn); ds= new DataSet(); daCustomers Fill(ds): daOrders.Fill(ds); |
實際上,當兩次打開和關閉Connection時,每次都調用DataAdapter對象的Fill方法。為了避免重復地多次打開和關閉Connection對象,在對DataAdapter對象調用Fill方法之前,先調用Connection對象的Open方法。如果要在填充數據以后關閉Connection,則應該像下面例子中顯示的那樣調用Close方法。
1234567 | cn.Open(); daCusomers.Fill(ds); daOrders.Fill(ds); cn.Close(); |
總結以上所說,一個完整的算法可以這樣寫:
12345678910111213141516171819202122232425 | //創建SqlConnection數據庫連接對象 SqlConnection Conn = new SqlConnection(sConnectionString); //打開Conn Conn.Open(); //創建并初始化SqlCommand對象 SqlDataAdapter Customer = new SqlDataAdapter( "Select * From Customers" , Conn); DataSet ds = new DataSet(); //使用SqlDataAdapter的Fill方法填充DataSet Customer.Fill(ds, "Customers" ); DataTable tblCustomers; //創建一個DataTable數據表 tblCustomers = ds.Tables[ "Customers" ]; //關閉數據連接 Conn.Close ( ) ; |
- 3 回答
- 0 關注
- 1504 瀏覽
添加回答
舉報