asp.net提供了ADO.NET技術,它是ASP.NET應用程序與數據庫進行交互的一種技術。
ADO.NET技術把對數據庫的操作分為幾個步驟,并為每個步驟提供對象來封裝操作過程,從而使對數據庫的操作變得簡單易行。
ADO.NET組件通過以下兩個主要的組件將數據訪問與數據處理分離:
1. ADO.NET體系結構的一個核心元素是.NET數據提供程序,它是專門為數據處理以及快速地只進、只讀訪問數據而設計的組件,包括Connection、Command、DataReader和DataAdapter對象的組件。
2. DataSet是ADO.NET體系結構中另一個核心組件,它是專門為各種數據源的數據訪問獨立性而設計的,所以它可以用于多個不同的數據源、xml數據或管理應用程序的本地數據,如內存中的數據高速緩存。
基本的SQL
1.選擇數據
SELECT語句語法:
SELECT 列名1,列名2,列名3,...FROM 表名(SELECT * FROM 表名),例如:
SELECT * FROM Student
該SQL語句表示從Student表中選取所有的列。
SELECT 列名1,列名2,列名3,...FROM 表名 ORDER BY 列名1 ASC/DESC,列名2 ASC/DESC,列名3 ASC/DESC...(ASC表示升序,DESC表示降序)
SELECT * FROM Student ORDER BY StuName DESC。
該SQL語句表示從Student表中選取所有的列并按照StuName降序排序。
SELECT 列名1,列名2,列名3,...FROM 表名 WHERE子句 ORDER BY 列名1 ASC/DESC,列名2 ASC/DESC,列名3 ASC/DESC... (WHERE子句是條件子句,WHERE子句能夠對條件進行設置,只有滿足條件的行才會顯示到結果中)。
SELECT * FROM Student WHERE StuClass=‘中藥一班’
有時選擇條件不止一個,這時需要邏輯連接符把這些條件連接起來,常用的邏輯連接符有AND和OR,AND表示關系與,OR表示關系或。
SELECT * FROM Student WHERE StuClass=‘中藥一班’OR StuClass=‘中藥二班’
2.插入數據
INSERT INTO 表名(列名1,列名2,列名3,...)
VALUES(值1,值2,值3,...)
向Student表中添加一條數據,SQL語句如下:
INSERT INTO Student(StuName,StuClass,StuSex)
VALUES(‘李瑩’,‘中藥三班’,‘女’)
也可以采用下面的語句實現:
INSERT INTO Student
VALUES(‘李瑩’,‘中藥三班’,‘女’)
此語句忽略了列名,此時會按照列在數據表中的排列順序逐個插入。在執行INSERT語句時值與列的數據類型必須一致,否則會報錯。
3.更新數據
UPDATE 表名 SET
列名1=值1,
列名2=值2,
...
WHERE子句
更新Student表中的數據:
UPDATE Student Set
StuClass=“中藥四班”,
WHERE StuName=“李瑩”
4.刪除數據
DELETE FROM 表名 WHRER子句
在VS中執行數據查詢
查詢數據可以使用SQL語句實現,也可以使用SQL SERVER提供的管理工具來生成和測試SQl語句。在VS中執行數據查詢的操作如下:
1.在“服務器資源管理器”窗口中,找到“表”節點。
2.右鍵單擊“表”節點,在彈出的菜單中選擇“新建查詢”。
3.在彈出的“添加表”對話框中選擇要操作的表、視圖、函數、同義詞,單擊“添加”,在新建的查詢窗口中會顯示被選中的對象。
創建數據庫
在編寫ASP.NET網站應用程序之前,首先要做的是設計和創建數據庫。
連接數據庫
.NET Framework數據提供程序使用Connection對象提供與Microsoft SQL Server 的連接。
SqlConnection連接字符串常用參數:
1.Data Source:數據庫服務器的名稱。
2.Initial Catalog:數據庫的名稱。
3.Integrated Security:決定連接是否是安全的,取值可以是True、False或SSPI。
4.User ID:SQL Server登錄帳戶。
5.PassWord:SQL Server帳戶的登錄密碼。
創建數據庫連接
可以通過以下方式創建數據庫連接:
1.使用Connection對象創建數據庫連接。
1 SqlConnection connection=new SqlConnection();2 connection.ConnectionString="server=localhost; Integrated Security=True;Initial Catalog=SuperMarket";
2.使用連接字符串來初始化SqlConnection對象創建數據庫連接。
1 string connectionString = "Data Source=追風的蝸牛;Initial Catalog=Adrotator;Integrated Security=True";2 SqlConnection connection = new SqlConnection(connectionString);
3.使用構造函數來初始化SqlConnection對象創建數據庫連接。
構造函數
1 public class ConnectionString2 {3 public static string connectionString = "Data Source=追風的蝸牛;Initial Catalog=Adrotator;Integrated Security=True";4 }
4.初始化SqlConnection對象,創建數據庫連接。
SqlConnection connection = new SqlConnection(ConnectionString.connectionString);
5.獲取在配置文件中的<connectionStrings>節中利用鍵值對存儲的數據庫連接字符串,創建數據庫連接。
利用鍵值對存儲數據庫連接字符串。
1 <connectionStrings >2 <add name="connection1" connectionString="Data Source=追風的蝸牛;Initial Catalog=Adrotator;Integrated Security=True"/>3 </connectionStrings>
獲取配置文件中的數據庫連接字符串。
1 SqlConnection connection = new SqlConnection(System.Web.Configuration.WebConfigurationManager.ConnectionStrings["connection1"].ConnectionString.ToString());
查看連接信息
1 try 2 { 3 connection.Open(); 4 Response.Write("服務器版本:" + connection.ServerVersion.ToString()); 5 Response.Write("<br>數據庫名稱:" + connection.Database.ToString()); 6 Response.Write("<br>數據庫連接:" + connection.State.ToString()); 7 connection.Close(); 8 } 9 catch (Exception ex)10 {11 Response.Write("連接錯誤!" + ex.Message.ToString());12 }13 finally14 {15 connection.Close();16 }
獲取數據
1.Command對象
Command對象使用SELECT、INSERT、UPDATE、DELETE等SQL命令與數據源通信,此外,Command對象還可以調用存儲過程操作數據庫。
創建Command對象的方法:
1.創建Command對象,指定SQL命令,設置可利用的數據庫連接。
1 SqlCommand command = new SqlCommand();2 command.Connection = connection;3 command.CommandText = "select * from Advertisements";
2.在創建Command對象時指定SQL命令和可利用的數據庫連接。
1 SqlCommand command = new SqlCommand("select * from Advertisements", connection);
2.DataReader對象
可以使用DataReader從數據庫中檢索只讀、只進的數據流。“只讀”,是指在數據閱讀器DataReader上不可更新、刪除、增加記錄。“只進”是指記錄的接收是順序進行且不可后退的。
數據閱讀器DataReader接收到的數據是以數據庫的記錄為單位的。查詢結果在查詢執行時返回,并存儲在客戶端的網絡緩沖區中,直到用戶使用DataReader的Read方法對它們發出請求。
使用DataReader可以提高應用程序的性能,原因是它只要數據可用就立即檢索數據,并且在默認情況下一次只在內存中存儲一行,減少了系統開銷。
在創建一個Command對象的實例之后,可以通過對命令調用ExecuteReader方法來創建DataReader,該方法從在Command對象中指定的數據源檢索一些行,填充DataReader。
使用
1.獲取數據并綁定到控件中。
在Default.aspx中:
1 <div> 2 <asp:Label ID="Label1" Text="請選擇:" runat="server" /> 3 <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged"> 4 <asp:ListItem Text="請選擇" Enabled="true"></asp:ListItem> 5 </asp:DropDownList> 6 <br /> 7 <asp:Label ID="Label2" runat="server" Text="廣告的詳細信息:" /> 8 <br /> 9 <asp:Label ID="Label3" runat="server" Height="200" Width="300" />10 </div>
在Default.aspx.sc中:
1 PRotected void Page_Load(object sender, EventArgs e) 2 { 3 if (!this.IsPostBack) 4 { 5 SqlCommand command = new SqlCommand("select AlternateText,ID from Advertisements", connection); 6 SqlDataReader dataReader; 7 try 8 { 9 connection.Open();10 dataReader = command.ExecuteReader();11 12 while (dataReader.Read())13 {14 ListItem listItem = new ListItem();15 listItem.Text = dataReader["AlternateText"].ToString();16 listItem.Value = dataReader["ID"].ToString();17 DropDownList1.Items.Add(listItem);18 }19 dataReader.Close();20 }21 catch (Exception ex)22 {23 Label3.Text = "讀取失敗" + ex.Message.ToString();24 }25 finally26 {27 connection.Close();28 }29 }30 }
2.獲取控件數據信息并查詢。
在Default.aspx.sc中:
1 protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) 2 { 3 SqlConnection connection = new SqlConnection(System.Web.Configuration.WebConfigurationManager.ConnectionStrings["connection1"].ConnectionString.ToString()); 4 string selectSql = "select * from Advertisements where ID='" + DropDownList1.SelectedItem.Value + "'";//定義SQL語句獲取廣告信息 5 6 SqlCommand command = new SqlCommand(selectSql, connection); 7 SqlDataReader dataReader; 8 try 9 {10 connection.Open();11 dataReader = command.ExecuteReader();12 dataReader.Read();13 string stringText;14 stringText ="ID:"+ dataReader["ID"].ToString() + "<br>" +"圖片地址:"+ dataReader["ImageUrl"].ToString() + "<br>" +"鏈接地址:"+ dataReader["NavigateUrl"].ToString() + "<br>" +"顯示頻率:"+ dataReader["Impressions"].ToString() + "<br>" +"描述信息:"+ dataReader["AlternateText"].ToString();15 Label3.Text = stringText.ToString();16 dataReader.Close();17 18 }19 catch (Exception ex)20 {21 Label3.Text = "讀取失敗" + ex.Message.ToString();22 }23 finally24 {25 connection.Close();26 }27 }
3.DataAdapter對象
DataAdapter對象充當數據庫和ADO.NET對象模型中非連接對象之間的橋梁,能夠用來保存和檢索數據。DataAdapter對象類的Fill方法用于將查詢結果引入DataSet或DataTable中,以便能夠脫機處理數據。根據不同的數據源DataAdapter對象,可以分為四類:
1.SqlDataAdapter:用于對SQL Server數據庫執行命令。
2.OleDBDataAdapter:用于對支持OleDB的數據庫執行命令。
3.OdbcDataAdapter:用于支持Odbc的數據庫執行命令。
4.OracleDataAdapter:用于對Oracle數據庫執行命令。
使用SqlDataAdapter的步驟:
1. 建立數據庫連接。
2. 建立SqlCommand對象,設置要執行的SQL語句
3. 建立并實例化一個SqlDataAdapter對象。
4. 建立一個DataSet對象,用于接收執行SQL命令返回的數據集。
5. 填充數據集。
6. 綁定數據控件。
7. 關閉數據庫連接。
4.DataSet對象
DataSet在ADO.NET對實現從數據庫抽取數據起到關鍵作用,數據從數據庫完成數據抽取后存放在DataSet中,是各種數據源中的數據在計算機內存中映射成的緩存,從某種意義上可以把DataSet可以看成是一個數據容器。
DataSet也被稱為內存中的數據庫,因為在DataSet可以包含很多數據表以及數據表之間的關系。
DataSet在客戶端實現讀取、更新數據庫等過程中起到了中間部件的作用。
DataSet從數據源中獲取數據后就會斷開與數據源之間的連接。允許在DataSet中定義數據約束和表關系,增加、刪除和編輯記錄,還可以對DataSet中的數據進行查詢、統計等。當完成了各項操作以后還可以把DataSet中的數據送回數據源。DataSet的產生滿足了多層分布式程序的需要,它能夠在斷開數據源的情況下對存放在內存中的數據進行操作,這樣可以提高系統整體性能,而且有利于擴展。
創建DataSet的方式
1.建立一個空的數據集,然后再把建立的數據表放到該數據集里。
DataSet dataSet = new DataSet();
2.先建立數據表,然后再建立包含數據表的數據集。
DataSet dataSet = new DataSet(“表名”);
DataSet中經常使用的類
1.DataTable。稱為數據表,用來存放數據。一個Dataset對象可以包含多個DataTable,每個DataTable可以包含多個DataRow和DataColumn。
它的創建方式有兩種:
1.數據加載DataSet時會自動創建DataTable。
2.以編程方式創建DataTable的對象,然后將對象添加到DataSet的Tables集合中。
從DataSet中提取DataTable
DataSet dataset=new DataSet();
DataTable dataTable=dataset.數據表名
2.DataRow。數據表里的行,是給定DataTable中的一行數據(記錄)。DataRow對象的方法提供了對表中數據的增加、刪除、更新、查詢等功能。
提取表中的一行數據(記錄)
DataRow dataRow=DataTable.Row[n];
3.DataColumn。數據表中的列,定義了數據表的數據結構。
獲取某列的值需要在數據行的基礎上進行
string str=dataRow.Column[“字段名稱”].ToString();
或string str=dataRow.Column[“索引”].ToString();
4.DataRelation。
使用DataRelation通過DataColumn對象將兩個DataTable對象相互關聯,此類關系類似于關系數據庫中的主鍵/外鍵關系。關系是在父表和子表中匹配的列之間創建的,兩個列的數據類型必須相同。
創建DataRelation時,首先要驗證是否可以創建關系。在將它添加到DataRelationCollection之后,通過禁止會使關系無效的任何更改來維持此關系。在創建DataRelation和將其添加到DataRelationCollection之間的這段時間,可以對父行或子行進行其他更改,但是會使關系失效,會產生異常。
使用
在配置文件中添加以下內容:
1 <connectionStrings >2 <add name="connection1" connectionString="Data Source=追風的蝸牛;Initial Catalog=Adrotator;Integrated Security=True"/>3 </connectionStrings>
在Default.aspx.cs中添加以下內容:
1 <div> 2 <asp:Label ID="Label1" Text="請選擇:" runat="server" /> 3 <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged"> 4 <asp:ListItem Text="請選擇" Enabled="true"></asp:ListItem> 5 </asp:DropDownList> 6 <br /> 7 <asp:Label ID="Label2" runat="server" Text="廣告的詳細信息:" /> 8 <br /> 9 <asp:Label ID="Label3" runat="server" Height="200" Width="300" />10 </div>
Default.aspx.cs中的代碼如下:
1 using System; 2 using System.Collections.Generic; 3 using System.Data; 4 using System.Data.SqlClient; 5 using System.Linq; 6 using System.Text; 7 using System.Web; 8 using System.Web.UI; 9 using System.Web.UI.WebControls;10 11 namespace Webapplication112 {13 public partial class Default : System.Web.UI.Page14 {15 private static DataSet dataSet = new DataSet();16 public class ConnectionString17 {18 public static string connectionString = "Data Source=追風的蝸牛;Initial Catalog=Adrotator;Integrated Security=True";19 }20 21 protected void Page_Load(object sender, EventArgs e)22 {23 if (!this.IsPostBack)24 {25 fillList();26 }27 }28 29 protected void fillList()30 {31 SqlConnection connection = new SqlConnection(System.Web.Configuration.WebConfigurationManager.ConnectionStrings["connection1"].ConnectionString.ToString());32 SqlCommand command = new SqlCommand("select * from Advertisements", connection);33 SqlDataAdapter dataAdapter = new SqlDataAdapter(command);34 //打開數據庫連接,讀取信息35 try36 {37 connection.Open();38 //填充Dataset39 dataAdapter.Fill(dataSet, "Advertisements");40 }41 catch (Exception ex)42 {43 Label3.Text = "讀取錯誤" + ex.Message.ToString();44 }45 finally46 {47 connection.Close();48 }49 foreach (DataRow row in dataSet.Tables["Advertisements"].Rows)50 {51 ListItem item = new ListItem();52 item.Text = row["AlternateText"].ToString();53 item.Value = row["ID"].ToString();54 DropDownList1.Items.Add(item);55 }56 }57 58 protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)59 {60 try61 {62 DataRow[] dataRow = dataSet.Tables["Advertisements"].Select("ID=" + DropDownList1.SelectedItem.Value);63 string stringText = "ID:" + dataRow[0]["ID"].ToString() + "<br/>圖片地址:" + dataRow[0]["ImageUrl"].ToString() + "<br/>鏈接地址:" + dataRow[0]["NavigateUrl"].ToString() + "<br/>顯示頻率:" + dataRow[0]["Impressions"].ToString() + "<br/>描述:" + dataRow[0]["AlternateText"].ToString();64 Label3.Text = stringText.ToString();65 }66 catch (Exception ex)67 {68 Label3.Text = "讀取失敗" + ex.Message.ToString();69 }70 }71 }72 }
新聞熱點
疑難解答