在非連接模式下,,主要討論以下對象:DataAdapter。 1.DataAdapter對象 DataAdapter對象在物理數(shù)據(jù)庫和內(nèi)存數(shù)據(jù)表之間起橋梁的作用。一般用DataAdapter對象從數(shù)據(jù)庫獲取數(shù)據(jù)并裝入DataTable對象中,,也通過DataAdapter對象將DataTable對象中數(shù)據(jù)的修改寫回到物理數(shù)據(jù)庫,。 Code === showMovies.aspx Code 2.DataAdapter的構(gòu)造 在例1中,我們看到了如何構(gòu)造一個SqlDataAdapter對象,,并且使用Fill方法把數(shù)據(jù)表填到一個DataTable中,。它看起來是像下面這樣子的: SqlDataAdapter dad = new SqlDataAdapter("Select Id,Title,Director from Movies", _connectionstring); DataTable dt = new DataTable(); dad.Fill(dt); 在以上的例子中,看不到SqlConnection,SqlCommand對象的出象,,其實,,它們還是隱含存在的,這些對象被SqlDataAdapter對象調(diào)用了而已,,就連SqlConnection對象的Open()方法的調(diào)用也由SqlDataAdapter對象來代勞了,。 public DataTable GetAll() { DataTable dt = new DataTable(); using(SqlConnection conn = new SqlConnection(_connectionstring)) { SqlCommand command = new SqlCommand("Select Id,Title,Director from Movies", conn); SqlDataAdapter dad = new SqlDataAdapter(command); // 初始化Table dad.Fill(dt); } return dt; } 以上,,可以看出,,SqlDataAdapter構(gòu)造函數(shù)可以傳入一個SqlCommand對象。在ADO.Net中SqlDataAdapter構(gòu)造函數(shù)可以使用以下幾種方法進行構(gòu)造 3. SqlDataAdapter的Fill/FillSchema方法 DataAdapter對象的Fill方法,,該方法不止可以傳入DataTable作為參數(shù),也可以傳入DataSet作為參數(shù),。 private void buttonFillData_Click(object sender, EventArgs e) { DataSet userData = new DataSet(); using (SqlConnection testConnection = new SqlConnection(connectionString)) { SqlCommand testCommand = testConnection.CreateCommand(); testCommand.CommandText = "Select FirstName, LastName from userTable; Select PermissionType from PermissionsTable"; SqlDataAdapter dataAdapter = new SqlDataAdapter(testCommand); dataAdapter.Fill(userData); } // testConnection.Dispose called automatically. } protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { string _connectionstring = WebConfigurationManager.ConnectionStrings["DawnEnterpriseDBConnectionString"]. ConnectionString.ToString(); DataSet ds = new DataSet(); using (SqlConnection conn = new SqlConnection(_connectionstring)) { SqlCommand command = new SqlCommand("Select Id,Title,Director from Movies", conn); SqlDataAdapter dad = new SqlDataAdapter(command); dad.Fill(ds, "Movies"); // 調(diào)用Fill方法時,,使用TableName dad.SelectCommand = new SqlCommand("select Id,name from MovieCategories", conn); dad.Fill(ds); // 為使用TableName GridView1.DataSource = ds.Tables["Movies"]; // 使用TableName進行指定 GridView1.DataBind(); GridView2.DataSource = ds.Tables[1]; // 使用inde進行指定 GridView2.DataBind(); } } } Fill被重載的方法有很多,具體可以查看:http://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqldataadapter.fill.aspx sqlDataAdapter1.FillSchema(dataSet1,SchemaType.Source,"authors"); sqlDataAdapter1.Fill(dataSet1,"authors"); DataColumn[] colArr; colArr = dataSet1.Tables["authors"].PrimaryKey; MessageBox.Show("Column Count: " + colArr.Length.ToString()); for(int i = 0; i < colArr.Length; i++) { MessageBox.Show(colArr[i].ColumnName + " " + colArr[i].DataType.ToString()); } 在上例中,,如果不調(diào)用FillSchema, 缺省情況下不會填如PrimaryKey信息。 |
|
來自: Dragon_chen > 《C#》