【黑馬程序員】6. ADO.NET

---------------------- ASP.Net+Android+IOS開發.Net培訓、期待與您交流! ----------------------

一、     ADO.NET基礎

  在.net框架下程序和數據庫之間進行交互操作,使用的技術叫ADO.NET。通過ADO.NET就能在程序中執行SQL語句了,ADO.NET提供了對各種數據庫的統一操作接口。

  直接在項目中添加.mdf文件的方式使用數據庫的步驟:右擊項目名è添加è新建項è數據庫è基於服務的數據庫。雙擊.mdf文件會在“服務器資源管理器”中打開.mdf文件,操作方式和在Management Studio中沒有什麼本質不同。要拷貝.mdf文件需要關閉所有指向.mdf文件的鏈接。和在數據庫服務器上創建數據庫沒什麼區別,運行的時候會自動附加(Attach)到SQL Server上。

二、     ADO.NET五大對象

  SqlConnection:用於創建程序到數據庫的連接,一個SqlConnection對象代表一個到數據庫的連接。要連接到哪個數據庫,需要使用哪種身份認證信息等,這些信息就組成了“連接字符串”。SqlConnection有兩非常重要的方法:Open():打開程序到數據庫的連接,Close()關閉連接,注意連接Close之後可以再次調用Open()方法打開。

  SqlCommand:負責發送命令(SQL語句)給數據庫並得到執行結果的。它有一個重要的屬性:CommandText,要發送的SQL語句。ExecuteNonQuery()方法發送的是更新、刪除、增加的命令,而用此方法發送查詢命令的時候數據庫並不執行ExecuteReader()方法專門用來發送查詢命令。

  SqlDataReader:對於這個類,官方給出的解釋是:提供一種從Sql Server數據庫讀取行的只進流的方式。對這個解釋多少有些不理解。它有一個非常重要的方法:Read()方法,官方解釋是:使SqlDataReader前進到下一條記錄。SqlDataReader可以對返回的數據進行操作,但只是只讀的,而且必須要保持與數據庫的連接纔行.

  SqlDataAdapter:官方的解釋是:表示用於填充DataSet和更新SQL Server數據庫的一組命令和一個數據庫連接。它可以把數據庫裏的數據讀出來,然後把這些數據一次性就裝到DataSet中,而且還可以把DataSet中的數據一次性更新到數據庫裏。之所以它能做到這些,因爲它有個重要的方法叫SqlDataAdater.Fill(),調用這個方法就可以把數據填充到DataSet中。

  DataSet:官方的解釋叫做:表示數據在內存中的緩存。dataset其實相當於一個小型的離線的數據庫,只不過是在內存中的。dataset有兩大部分組成表與關係.表就是datatable關係就是Relation

三、     連接SQL Server

  ADO.Net中的連接類都實現了IDisposable接口,可能使用using進行資源的釋放。

示例代碼:

	//定義連接字符串
	stringstrConn=@"DataSource=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True";
    	using (SqlConnection conn = new SqlConnection(strConn)) //new一個連接的對象
        {
         	  conn.Open();//打開數據庫連接
                   MessageBox.Show("連接成功!");
	}

注意:using可以確保在其using內部時連接始終是打開的,出了using這個範圍以後自動調用Dispose方法來釋放連接所佔用的所有資源。
四、執行簡單的數據插入

//定義連接字符串
stringstrConn=@"DataSource=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True";
using (SqlConnection conn = new SqlConnection(strConn)) //new一個連接的對象
{
       conn.Open();//打開數據庫連接         
         //簡單的插入數據
         string sqlCmd = @"Insert into Employees(employeeid,firstname,city,country)
values(003,'李四','北京','中國')";
       //使用指定的連接new一個發送命令的SqlCommand對象
         using (SqlCommand cmd = new SqlCommand(sqlCmd, conn))
       {                    
           int i = cmd.ExecuteNonQuery();//將Sql語句發送給數據庫並由數據庫執行插入
              MessageBox.Show(i + "條數據插入成功!");
       }
}


五、執行簡單的查詢

//定義連接字符串
stringstrConn=@"DataSource=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True";
using (SqlConnection conn=newSqlConnection(strConn)) //new一個連接的對象            
{
       conn.Open();//打開數據庫連接
         MessageBox.Show("連接成功!");
       //簡單的查詢數據
         string sqlCmd="select employeeid,firstname,city,country from Employees";
       //使用指定的連接new一個發送命令的SqlCommand對象
         using (SqlCommand cmd=newSqlCommand(sqlCmd, conn))
         {                    
	         //創建一個SqlDataReader對象用來接收cmd.ExecuteReader()的執行結果
                   SqlDataReader reader=cmd.ExecuteReader();
		  //通過reader.Read()方法來逐行向下讀取SqlDataReader中的數據
                   while(reader.Read())
               {
                   //獲取指定列32位有符號整數的值
                        int id=reader.GetInt32(reader.GetOrdinal("employeeid"));
                   //獲取指定列的字符串形式的值
                        string name=reader.GetString(reader.GetOrdinal("firstname"));
                   string city=reader.GetString(reader.GetOrdinal("city"));
                   MessageBox.Show("employeeid="+id+",firstname="+name+",city="+city);
               }
         }  
}


六、     SqlDataAdapterDataSet
的使用

  SqlDataAdapter,可以把數據庫裏的數據讀出來,然後把這些數據一下就裝到了dataset.而且還可以把dataset裏的數據一下又裝到數據庫裏(或更新到數據裏)。它有個重要的方法叫:SqlDataAdater.Fill(...).調用這個方法的時候就可以把數據填充到dataset裏的SqlDataAdapter能自動打開到數據庫的連接。

SqlDataAdater怎麼從數據庫裏得到數據呢?看下面一段代碼:

//定義連接字符串
string strConn = @"Data Source=.\SQLEXPRESS; 
AttachDBFilename=|DataDirectory|\Database1.mdf; Integrated Security=True;User Instance=True";
string sqlcmd = "select employeeid,firstname,city,country from Employees";
using (SqlConnection conn = new SqlConnection())
{
      DataSet ds = new DataSet();
      //用指定的sql語句和連接來new一個SqlDataAdapter 對象
      SqlDataAdapter sda = new SqlDataAdapter(sqlcmd,conn);
      //開始發送命令(SqlCommand)給數據庫,把返回的數據填充到dataset裏的表名叫table1的表裏
      sda.Fill(ds, "table1");
      //上面已經把ds裏的table1填充上數據了,所以可以綁定到table1
      GridView1.DataSource = ds.Tables["table1"].DefaultView;
      GridView1.DataBind();
}


注:

上述代碼中沒有調用cn.open()方法,是因爲SqlDataAdapter能自動打開到數據庫的連接。

sda.Fill(ds, "table1")中參數的意思是把數據填充到dstable1裏。

sda.Fill(ds, "table1")方法還需要完成的事有:

1、打開到數據庫的連接;

2、發送SqlCommand到數據庫;

3、 把數據庫返回的數據填充到DataSet中,還指定了往DataSet的哪個表中放數據,如果沒有指定的表就自動創建一個名叫table1的表;

4、關閉數據庫連接。

 

七、     映射

//定義連接字符串
string strConn=@"Data Source=.\SQLEXPRESS; AttachDBFilename=|DataDirectory|\Database1.mdf; Integrated Security=True;User Instance=True";
string sqlcmd = "select employeeid,firstname,city,country from Employees";
using (SqlConnection conn = new SqlConnection())
{
      DataSet ds =  DataSet();
      //用指定的sql語句和連接來new一個SqlDataAdapter 對象                             //添加一個映射,源表名爲:employees,dataset裏表名稱爲:table1
       SqlDataAdapter sda = new SqlDataAdapter(sqlcmd,conn);
     sda.TableMappings.Add("Employees", "table1");
      //字段名稱的對應關係
       da.TableMappings[0].ColumnMappings.Add("employeeid",          "id號");
      da.TableMappings[0].ColumnMappings.Add("firstname", "姓名");
      da.TableMappings[0].ColumnMappings.Add("city", "城市");
      da.TableMappings[0].ColumnMappings.Add("country", "國家");
      //如果添加了映射,那麼sda.Fill(ds,源表名)方法的第二個參數必須和            //sda.TableMappings.Add("Employees", "table1")第一個參數相同
	sda.Fill(ds, "Employees");
	GridView1.DataSource = ds.Tables["table1"].DefaultView;
	GridView1.DataBind();
}

 

---------------------- ASP.Net+Android+IOS開發.Net培訓、期待與您交流! ----------------------

詳細請查看:http://edu.csdn.net

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章