Asp.net數據庫SQL數據庫操作學習筆記


1.注意:在使用SqlConnection類時,需要使用命名空間using System.Data.SqlClient;

  而連接Access數據庫時,需要使用命名空間using System.Data.OleDb。
2.在SQL數據庫的連接中,需要使用.NET提供的SqlConnection對象來對數據庫進行連接。
在連接數據庫前,需要爲連接設置連接串,連接串就相當於告訴應用程序怎樣找到數據
庫去進行連接,然後程序才能正確的與SQL建立連接,連接字串示例代碼如下所示:
 server='服務器地址';database='數據庫名稱';uid='數據庫用戶名';pwd='數據庫密碼';

上述代碼說明了數據庫連接字串的基本格式,如果需要連接到本地的mytable數據庫,則
編寫相應的SQL連接字串進行數據庫的連接,示例代碼如下所示:
  string strcon; //聲明連接字串
  strcon = "server='(local)';database='mytable';uid='sa';pwd='sa';";    
            //設置連接字串

上述代碼聲明瞭一個數據庫連接字串,SqlConnection類將會通過此字串來進行數據庫的連接。
其中,server是SQL服務器的地址,如果相對於應用程序而言數據庫服務器是本地服務器,則
只需要配置爲(loacal)即可,而如果是遠程服務器,則需要填寫具體的ip。另外,uid是數據
庫登錄時的用戶名,pwd是數據庫登錄時使用的密碼。在聲明瞭數據庫連接字串後,可以使用
SqlConnection類進行連接,示例代碼如下所示:
            string strcon;                                                    //聲明連接字串
            strcon = "server='(local)';database='mytable';uid='sa';pwd='sa';";                //編寫連接字串
            SqlConnection con = new SqlConnection(strcon);                            //新建SQL連接
            try
            {
                con.Open();                                                    //打開SQL連接
                Label1.Text = "連接數據庫成功";                                    //提示成功信息
            }
            catch
            {
                Label1.Text = "無法連接數據庫";                                    //提示失敗信息
            }
3.填充DataSet數據集
DataSet數據集表示來自一個或多個數據源數據的本地副本,是數據的集合,也可以看作是一個
虛擬的表。DataSet對象允許Web窗體半獨立於數據源運行。DataSet能夠提高程序性能,因爲
DataSet從數據源中加載數據後,就會斷開與數據源的連接,開發人員可以直接使用和處理這些
數據,當數據發生變化並要更新時,則可以使用DataAdapter重新連接並更新數據源。
DataAdapter可以進行數據集的填充,創建DataAdapter對象的代碼如下所示。
            SqlDataAdapter da=new SqlDataAdapter("select * from news",con);            //創建適配器
上述代碼創建了一個DataAdapter對象並初始化DataAdapter對象,DataAdapter對象的構造函數
允許傳遞兩個參數初始化,第一個參數爲SQL查詢語句,第二個參數爲數據庫連接的
SqlConnection對象。初始化DataAdapter後,就需要將返回的數據的集合存放到數據集中,示
例代碼如下所示。
            DataSet ds = new DataSet();                                        //創建數據集
            da.Fill(ds, "tablename");                                            //Fill方法填充
上述代碼創建了一個DataSet對象並初始化DataSet對象,通過DataAdapter對象的Fill方法,
可以將返回的數據存放到數據集DataSet中。DataSet可以被看作是一個虛擬的表或表的集合,
這個表的名稱在Fill方法中被命名爲tablename。

顯式DataSet
當返回的數據被存放到數據集中後,可以通過循環語句遍歷和顯示數據集中的信息。當需要顯
示表中某一行字段的值時,可以通過DataSet對象獲取相應行的某一列的值,示例代碼如下所示。
            ds.Tables["tablename"].Rows[0]["title"].ToString();                            //獲取數據集
上述代碼從DataSet對象中的虛表tablename中的第0行中獲取title列的值,當需要遍歷DataSet
時,可以使用DataSet對象中的Count來獲取行數,示例代碼如下所示。
            for (int i = 0; i < ds.Tables["tablename"].Rows.Count; i++)                //遍歷DataSet數據集
            {
                Response.Write(ds.Tables["tablename"].Rows[i]["title"].ToString()+"<br/>");
            }
DataSet不僅可以通過編程的方法來實現顯示,也可以使用ASP.NET中提供的控件來綁定數據集並
顯示。
ASP.NET中提供了常用的顯示DataSet數據集的控件,包括Repeater、DataList、GridView等數據
綁定控件。將DataSet數據集綁定到DataList控件中可以方便的在控件中顯示數據庫中的數據並
實現分頁操作,示例代碼如下所示。
            DataList1.DataSource = ds;                                        //綁定數據集
            DataList1.DataMember = "tablename";
            DataList1.DataBind();                                            //綁定數據
上述代碼就能夠將數據集ds中的數據綁定到DataList控件中。DataList控件還能夠實現分頁、
自定義模板等操作,非常方便開發人員對數據開發。

4..使用System.Data.OleDb
在使用System.Data.OleDb時,只需要修改連接字串即可。在這裏需要強調一點的是,Access
數據庫是一種桌面級的數據庫,同文件類型的數據庫類似,所以連接Access數據庫時,必須
指定數據庫文件的路徑,或者使用Server.MapPath來確定數據庫文件的相對位置。示例代碼
如下所示。
            string str = "provider=Microsoft.Jet.OLEDB.4.0 ;Data Source="
            + Server.MapPath("access.mdb") + "";                                //使用相對路徑
            OleDbConnection con = new OleDbConnection(str);                    //構造連接對象
            try
            {
                con.Open();                                                //打開連接
                Label1.Text = "連接成功";                                    //提示連接成功
                con.Close();
            }
            catch(Exception ee)                                            //拋出異常
            {
                Label1.Text = "連接失敗";
            }
Server.MapPath能夠確定文件相對於當前目錄的路徑,如果不使用Server.MapPath,則需要
指定文件在計算機的路徑,如“D:\服務器\文件夾\數據庫路徑”。但是這樣會暴露數據庫
的物理路徑,讓程序長期處於不安全的狀態。

5.打開和關閉連接
無論是使用System.Data.SqlClient還是System.Data.OleDb創建數據庫連接對象,都可以
使用Open方法來打開連接。同樣,也可以使用Close方法來關閉連接,示例代碼如下所示。
            SqlConnection con = new SqlConnection(str);                        //創建連接對象
            OleDbConnection con2 = new OleDbConnection(str2);                    //創建連接對象
            con.Open();                                                    //打開連接
            con.Close();                                                    //關閉連接
            con2.Open();                                                //打開連接
            con2.Close();                                                //關閉連接
注意:如果使用了連接池,雖然顯式的關閉了連接對象,其實並不會真正的關閉與數據庫
之間的連接,這樣能夠保證再次進行連接時的連接性能。

6.在創建了數據庫連接後,就需要對數據集DataSet進行填充,在這裏就需要使用DataAdapter
對象。在沒有數據源時,DataSet對象對保存在Web窗體可訪問的本地數據庫是非常實用的,
這樣降低了應用程序和數據庫之間的通信次數。然而DataSet必須要與一個或多個數據源進行
交互,DataAdapter就提供DataSet對象和數據源之間的連接。
爲了實現這種交互,微軟提供了SqlDataAdapter類和OleDbDataAdapter類。SqlDataAdapter
類和OleDbDataAdapter類各自適用情況如下。
?    SqlDataAdapter:該類專用於SQL數據庫,在SQL數據庫中使用該類能夠提高性能,
SqlDataAdapter與OleDbDataAdapter相比,無需適用OLEDB提供程序層,可直接在SQL Server
上使用。
?    OleDbDataAdapter:該類適用於由OLEDB數據提供程序公開的任何數據源,包括SQL
數據庫和Access數據庫。
若要使一個使用DataAdapter對象的DataSet要能夠和一個數據源之間交換數據,則可以使用
DataAdapter屬性來指定需要執行的操作,這個屬性可以是一條SQL語句或者是存儲過程,示例
代碼如下所示。
            string str = "server='(local)';database='mytable';uid='sa';pwd='sa'";        //創建連接字串
            SqlConnection con = new SqlConnection(str);
            con.Open();                                                    //打開連接
            SqlDataAdapter da = new SqlDataAdapter("select * from news", con);        //DataAdapter對象
            con.Close();                                                    //關閉連接
上述代碼創建了一個DataAdapter對象,DataSet對象可以使用該對象的Fill方法來填充數據集。

7.ExecuteScalar方法
Command的Execute方法提供了返回單個值的功能。在很多時候,開發人員需要獲取剛剛插入的
數據的ID值,或者可能需要返回Count(*),Sum(Money)等聚合函數的結果,則可以使用
ExecuteScalar方法。示例代碼如下所示。
            string str = "server='(local)';database='mytable';uid='sa';pwd='sa'";    //設置連接字串
            SqlConnection con = new SqlConnection(str);                    //創建連接
            con.Open();                                                //打開連接
            SqlCommand cmd = new SqlCommand("select count(*) from mynews", con);    //創建Command
            Label1.Text = cmd.ExecuteScalar().ToString();                    //使用ExecuteScalar執行
上述代碼創建了一個連接,並創建了一個Command對象,使用了可用的構造函數來初始化對象。
當使用ExecuteScalar執行方法時,會返回單個值。ExecuteScalar方法同樣可以執行SQL語句,
但是與ExecuteNonQuery方法不同的是,當語句不爲SELECT時,則返回一個沒有任何數據的
System.Data.SqlClient.SqlDataReader類型的集合。
ExecuteScalar方法執行SQL語句通常是用來執行具有返回值的功能的SQL語句,例如上面所說的
當插入一條新數據時,返回剛剛插入的數值的ID號。這種功能在自動增長類型的數據庫設計中,
經常被使用到,示例代碼如下所示。
            string str = "server='(local)';database='mytable';uid='sa';pwd='sa'";    //設置連接字串
            SqlConnection con = new SqlConnection(str);                    //創建連接
            con.Open();                                                //打開連接
            SqlCommand cmd = new SqlCommand("insert into mynews values ('this is a new title!')
            SELECT  @@IDENTITY  as  'bh'", con);                        //打開連接
            Label2.Text = cmd.ExecuteScalar().ToString();                    //獲取返回的ID值
上述代碼使用了“SELECT  @@IDENTITY  as”語法,“SELECT  @@IDENTITY”語法會自動獲取剛
剛插入的自動增長類型的值,例如,當表中有100條數據時,插入一條數據後數據量就成101,
爲了不需要再次查詢就獲得101這個值,則可以使用“SELECT  @@IDENTITY  as”語法。

8.使用ExecuteReader()操作數據庫,通常情況下是使用ExecuteReader()進行數據庫查詢操作,
使用ExecuteReader()查詢數據庫能夠提升查詢效率,而如果需要進行數據庫事務處理的話,
ExecuteReader()方法並不是理想的選擇。

9.ExecuteNonQuery()通常情況下爲數據庫事務處理的首選,當需要執行插入、刪除、更新等
  操作時,首選ExecuteNonQuery()。
  使用ExecuteNonQuery()操作數據庫時,ExecuteNonQuery()並不返回DataReader對象,返回的是
  一個整型的值,代表執行某個SQL語句後,在數據庫中影響的行數,對於更新、插入和刪除的SQL
   句,ExecuteNonQuery()方法的返回值爲該命令所影響的行數。對於“CREATE TABLE”和
  “DROP TABLE”語句,返回值爲0,而對於所有其他類型的語句,返回值爲-1。
   ExecuteNonQuery()操作數據時,可以不使用DataSet直接更改數據庫中的數據,示例代碼如下所示。
        protected void Button1_Click(object sender, EventArgs e)
        {
            string str = "server='(local)';database='mytable';uid='sa';pwd='sa'";    //創建連接字串
            SqlConnection con = new SqlConnection(str);                    //創建連接對象
            con.Open();                                                //打開連接
            string strsql = "delete from mynews where id>4";                    //編寫執行刪除的SQL語句
            SqlCommand cmd = new SqlCommand(strsql, con);                //創建Command對象
            Label1.Text = "該操作影響了" + cmd.ExecuteNonQuery() + "行";        //返回影響行數
        }
  ExecuteNonQuery()操作主要進行數據庫操作,包括更新、插入和刪除等操作,並返回相應的行數。
在進行數據庫事務處理時或不需要DataSet爲數據庫進行更新時,ExecuteNonQuery()方法是數據操作
的首選。因爲ExecuteNonQuery()支持多種數據庫語句的執行。
注意:有些項目中,通過判斷ExecuteNonQuery()的返回值來判斷SQL語句是否執行成功,這樣是有
失偏頗的,因爲當使用創建表的語句時,就算執行成功也會返回-1。

10.ExecuteScalar()方法也用來執行SQL語句,但是ExecuteScalar()執行SQL語句後的返回值與
ExecuteNonQuery()並不相同,ExecuteScalar()方法的返回值的數據類型是Object類型。如果
執行的SQL語句是一個查詢語句(SELECT),則返回結果是查詢後的第一行的第一列,如果執
行的SQL語句不是一個查詢語句,則會返回一個未實例化的對象,必須通過類型轉換來顯示,
示例代碼如下所示。
            string str = "server='(local)';database='mytable';uid='sa';pwd='sa'";    //創建連接字串
            SqlConnection con = new SqlConnection(str);                    //創建連接對象
            con.Open();                                                //打開連接
            string strsql = "select * from mynews order by id desc";
            SqlCommand cmd = new SqlCommand(strsql, con);
            Label1.Text = "查詢出了Id爲" + cmd.ExecuteScalar() \;            //使用ExecuteScalar查詢
通常情況下ExecuteNonQuery()操作後返回的是一個值,而ExecuteScalar()操作後則會返回
一個對象,ExecuteScalar()經常使用於當需要返回單一值時的情況。例如當插入一條數據
信息時,常常需要馬上知道剛纔插入的值,則可以使用ExecuteScalar()方法。示例代碼如下所示。
            string str = "server='(local)';database='mytable';uid='sa';pwd='sa'";    //創建連接字串
            SqlConnection con = new SqlConnection(str);                    //創建連接對象
            con.Open();                                                //打開連接
            string strsql = "insert into mynews values ('剛剛插入的id是多少?')
            SELECT  @@IDENTITY  as  'bh'";                            //插入語句
            SqlCommand cmd = new SqlCommand(strsql, con);                //執行語句
            Label1.Text = "剛剛插入的行的id是" + cmd.ExecuteScalar();        //返回賦值
上述代碼使用了SELECT  @@IDENTITY語法獲取剛剛執行更新後的id值,然後通過使用
ExecuteScalar()方法來獲取剛剛更新後第一行第一列的值。

11.使用ExecuteXmlReader()操作數據庫
ExecuteXmlReader()方法用於操作XML數據庫,並返回一個XmlReader對象,若需
要使用ExecuteXmlReader()方法,則必須添加引用System.Xml。XmlReader類似
於DataReader,都需要通過Command對象的ExecuteXmlReader()方法來創建
XmlReader的對象並初始化,示例代碼如下所示。
            XmlReader xdr = cmd.ExecuteXmlReader();                            //創建XmlReader對象
ExecuteXmlReader()返回XmlReader對象,XmlReader特性如下所示:
?    XMLReader是面向流的,它把XML文檔看作是文本數據流。
?    XMLReader是一個抽象類。
?    XMLReader使用pull模式處理流。
?    三個派生類:XMLTextReader、XMLNodeReader和XMLValidatingReader
下面代碼實現了獲取當前節點中屬性的個數。
            string str = "server='(local)';database='mytable';uid='sa';pwd='sa'";    //創建連接字串
            SqlConnection con = new SqlConnection(str);                    //創建連接對象
            con.Open();                                                //打開連接
            string strsql = "select * from mynews order by id desc FOR XML AUTO, XMLDATA";
            SqlCommand cmd = new SqlCommand(strsql, con);                //創建Command對象
            XmlReader xdr = cmd.ExecuteXmlReader();                        //創建XmlReader對象
            Response.Write(xdr.AttributeCount);                            //讀取節點個數
上述代碼使用了SQL語言中的FOR XML AUTO,、XMLDATA關鍵字,當執行ExecuteXmlReader()方
法時,會返回XmlReader對象,若不指定FOR XML AUTO,、XMLDATA關鍵字,則系統會拋出異常。













發佈了17 篇原創文章 · 獲贊 7 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章