DO.NET 也是 .NET 框架的組成部分。ADO.NET 用于處理數據訪問。通過 ADO.NET,您可以操作數據庫。
數據庫連接 - 綁定到 DataList 控件
數據庫連接 - 綁定到 Repeater 控件
什么是 ADO.NET?
ADO.NET 是 .NET 框架的組成部分
ADO.NET 由一系列用于處理數據訪問的類組成
ADO.NET 完全基于 XML
ADO.NET 沒有 Recordset 對象,這一點與 ADO 不同
創建數據庫連接
在我們的實例中,我們將使用 Northwind 數據庫。
首先,導入 "System.Data.OleDb" 命名空間。我們需要這個命名空間來操作 Microsoft Access 和其他 OLE DB 數據庫提供商。我們將在 Page_Load 子例程中創建這個數據庫的連接。我們創建一個 dbconn 變量,并為其賦值一個新的 OleDbConnection 類,這個類帶有指示 OLE DB 提供商和數據庫位置的連接字符串。然后我們打開數據庫連接:
<%@ Import Namespace="System.Data.OleDb" %>
<script runat="server">
sub Page_Load
dim dbconn
dbconn=New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;
data source=" & server.mappath("northwind.mdb"))
dbconn.Open()
end sub
</script>
注釋:這個連接字符串必須是沒有折行的連續字符串!
創建數據庫命令
為了指定需從數據庫取回的記錄,我們將創建一個 dbcomm 變量,并為其賦值一個新的 OleDbCommand 類。這個 OleDbCommand 類用于發出針對數據庫表的 SQL 查詢:
<%@ Import Namespace="System.Data.OleDb" %>
<script runat="server">
sub Page_Load
dim dbconn,sql,dbcomm
dbconn=New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;
data source=" & server.mappath("northwind.mdb"))
dbconn.Open()
sql="SELECT * FROM customers"
dbcomm=New OleDbCommand(sql,dbconn)
end sub
</script>
創建 DataReader
OleDbDataReader 類用于從數據源中讀取記錄流。DataReader 是通過調用 OleDbCommand 對象的 ExecuteReader 方法來創建的:
<%@ Import Namespace="System.Data.OleDb" %>
<script runat="server">
sub Page_Load
dim dbconn,sql,dbcomm,dbread
dbconn=New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;
data source=" & server.mappath("northwind.mdb"))
dbconn.Open()
sql="SELECT * FROM customers"
dbcomm=New OleDbCommand(sql,dbconn)
dbread=dbcomm.ExecuteReader()
end sub
</script>
綁定到 Repeater 控件
然后,我們綁定 DataReader 到 Repeater 控件:
實例
<%@ Import Namespace="System.Data.OleDb" %>
<script runat="server">
sub Page_Load
dim dbconn,sql,dbcomm,dbread
dbconn=New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;
data source=" & server.mappath("northwind.mdb"))
dbconn.Open()
sql="SELECT * FROM customers"
dbcomm=New OleDbCommand(sql,dbconn)
dbread=dbcomm.ExecuteReader()
customers.DataSource=dbread
customers.DataBind()
dbread.Close()
dbconn.Close()
創建測試數據
接下來我們在 MySQL 中創建 RUNOOB 數據庫,并創建 websites 數據表,表結構如下:
CREATE TABLE `websites` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` char(20) NOT NULL DEFAULT '' COMMENT '站點名稱',
`url` varchar(255) NOT NULL DEFAULT '',
`alexa` int(11) NOT NULL DEFAULT '0' COMMENT 'Alexa 排名',
`country` char(10) NOT NULL DEFAULT '' COMMENT '國家',
PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
插入一些數據:
INSERT INTO `websites` VALUES ('1', 'Google', 'https://www.google.cm/', '1', 'USA'), ('2', '淘寶', 'https://www.taobao.com/', '13', 'CN'), ('3', '菜鳥教程', 'http://www.runoob.com', '5892', ''), ('4', '微博', 'http://weibo.com/', '20', 'CN'), ('5', 'Facebook', 'https://www.facebook.com/', '3', 'USA');
數據表顯示如下:
SELECT操作
接下來的這個例子告訴我們如何使用JSTL SQL標簽來運行SQL SELECT語句:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%><%@ page import="java.io.*,java.util.*,java.sql.*"%><%@ page import="javax.servlet.http.*,javax.servlet.*" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
<html><head><title>SELECT 操作</title></head><body><!--
JDBC 驅動名及數據庫 URL
數據庫的用戶名與密碼,需要根據自己的設置
useUnicode=true&characterEncoding=utf-8 防止中文亂碼
--><sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/RUNOOB?useUnicode=true&characterEncoding=utf-8"
user="root" password="123456"/>
<sql:query dataSource="${snapshot}" var="result">SELECT * from websites;</sql:query><h1>JSP 數據庫實例 - 菜鳥教程</h1><table border="1" width="100%"><tr>
<th>ID</th>
<th>站點名</th>
<th>站點地址</th></tr><c:forEach var="row" items="${result.rows}"><tr>
<td><c:out value="${row.id}"/></td>
<td><c:out value="${row.name}"/></td>
<td><c:out value="${row.url}"/></td></tr></c:forEach></table>
</body></html>
訪問這個JSP例子,運行結果如下:
INSERT操作
這個例子告訴我們如何使用JSTL SQL標簽來運行SQL INSERT語句:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%><%@ page import="java.io.*,java.util.*,java.sql.*"%><%@ page import="javax.servlet.http.*,javax.servlet.*" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
<html><head><title>SELECT 操作</title></head><body><!--
JDBC 驅動名及數據庫 URL
數據庫的用戶名與密碼,需要根據自己的設置
useUnicode=true&characterEncoding=utf-8 防止中文亂碼
--><sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/RUNOOB?useUnicode=true&characterEncoding=utf-8"
user="root" password="123456"/><!--
插入數據
--><sql:update dataSource="${snapshot}" var="result">INSERT INTO websites (name,url,alexa,country) VALUES ('菜鳥教程移動站', 'http://m.runoob.com', 5093, 'CN');</sql:update><sql:query dataSource="${snapshot}" var="result">SELECT * from websites;</sql:query><h1>JSP 數據庫實例 - 菜鳥教程</h1><table border="1" width="100%"><tr>
<th>ID</th>
<th>站點名</th>
<th>站點地址</th></tr><c:forEach var="row" items="${result.rows}"><tr>
<td><c:out value="${row.id}"/></td>
<td><c:out value="${row.name}"/></td>
<td><c:out value="${row.url}"/></td></tr></c:forEach></table>
</body></html>
訪問這個JSP例子,運行結果如下:
DELETE操作
這個例子告訴我們如何使用JSTL SQL標簽來運行SQL DELETE語句:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%><%@ page import="java.io.*,java.util.*,java.sql.*"%><%@ page import="javax.servlet.http.*,javax.servlet.*" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
<html><head><title>SELECT 操作</title></head><body><!--
JDBC 驅動名及數據庫 URL
數據庫的用戶名與密碼,需要根據自己的設置
useUnicode=true&characterEncoding=utf-8 防止中文亂碼
--><sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/RUNOOB?useUnicode=true&characterEncoding=utf-8"
user="root" password="123456"/><!--
刪除 ID 為 11 的數據
--><sql:update dataSource="${snapshot}" var="count">
DELETE FROM websites WHERE Id = ? <sql:param value="" /></sql:update><sql:query dataSource="${snapshot}" var="result">SELECT * from websites;</sql:query><h1>JSP 數據庫實例 - 菜鳥教程</h1><table border="1" width="100%"><tr>
<th>ID</th>
<th>站點名</th>
<th>站點地址</th></tr><c:forEach var="row" items="${result.rows}"><tr>
<td><c:out value="${row.id}"/></td>
<td><c:out value="${row.name}"/></td>
<td><c:out value="${row.url}"/></td></tr></c:forEach></table>
</body></html>
訪問這個JSP例子,運行結果如下:
UPDATE操作
這個例子告訴我們如何使用JSTL SQL標簽來運行SQL UPDATE語句:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%><%@ page import="java.io.*,java.util.*,java.sql.*"%><%@ page import="javax.servlet.http.*,javax.servlet.*" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
<html><head><title>SELECT 操作</title></head><body><!--
JDBC 驅動名及數據庫 URL
數據庫的用戶名與密碼,需要根據自己的設置
useUnicode=true&characterEncoding=utf-8 防止中文亂碼
--><sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/RUNOOB?useUnicode=true&characterEncoding=utf-8"
user="root" password="123456"/><!--
修改 ID 為 3 的名字:菜鳥教程改為 RUNOOB
--><c:set var="SiteId" value="3"/>
<sql:update dataSource="${snapshot}" var="count">
UPDATE websites SET name = 'RUNOOB' WHERE Id = ? <sql:param value="${SiteId}" /></sql:update><sql:query dataSource="${snapshot}" var="result">SELECT * from websites;</sql:query><h1>JSP 數據庫實例 - 菜鳥教程</h1><table border="1" width="100%"><tr>
<th>ID</th>
<th>站點名</th>
<th>站點地址</th></tr><c:forEach var="row" items="${result.rows}"><tr>
<td><c:out value="${row.id}"/></td>
<td><c:out value="${row.name}"/></td>
<td><c:out value="${row.url}"/></td></tr></c:forEach></table>
</body></html>
訪問這個JSP例子,運行結果如下:
如您還有不明白的可以在下面與我留言或是與我探討QQ群308855039,我們一起飛!
. ODBC數據庫接口
ODBC即開放式數據庫互連(Open Database Connectivity),是微軟公司推出的一種實現應用程序和關系數據庫之間通訊的接口標準。符合標準的數據庫就可以通過SQL語言編寫的命令對數據庫進行操作,但只針對關系數據庫。目前所有的關系數據庫都符合該標準(如SQL Server,Oracle,Access,Excel等)。ODBC本質上是一組數據庫訪問API(應用程序編程接口),由一組函數調用組成,核心是SQL語句,其結構如圖1.8所示:
圖 1.8 ODBC數據庫接口
1.3.1 數據庫的連接方式
2. OLE DB數據庫接口
OLE DB即數據庫鏈接和嵌入對象(Object Linking and Embedding DataBase)。OLE DB是微軟提出的基于COM思想且面向對象的一種技術標準,目的是提供一種統一的數據訪問接口訪問各種數據源,這里所說的“數據”除了標準的關系型數據庫中的數據之外,還包括郵件數據、Web上的文本或圖形、目錄服務(DirectoryServices)、以及主機系統中的文件和地理數據以及自定義業務對象等。OLE DB標準的核心內容就是提供一種相同的訪問接口,使得數據的使用者(應用程序)可以使用同樣的方法訪問各種數據,而不用考慮數據的具體存儲地點、格式或類型,其結構圖如圖1.9所示:
圖1.9 OLE DB數據庫接口
1.3.1 數據庫的連接方式
3. ADO數據庫接口
ADO(ActiveX Data Objects)是微軟公司開發的基于COM的數據庫應用程序接口,通過ADO連接數據庫,可以靈活地操作數據庫中的數據。
圖1.10展示了應用程序通過ADO訪問SQL Server數據庫接口。從圖中可看出,使用ADO訪問SQL Server數據庫有兩種途徑:一種是通過ODBC驅動程序,另一種是通過SQL Server專用的OLE DBProvider,后者有更高的訪問效率。
圖1.10 ADO訪問SQLServer的接口
1.3.1 數據庫的連接方式
4. ADO.NET數據庫接口
ASP.Net使用 ADO.NET 數據模型。該模型從ADO 發展而來,但它不只是對 ADO的改進,而是采用了一種全新的技術。主要表現在以下幾個方面:
● ADO.NET 不是采用ActiveX 技術,而是與.NET框架緊密結合的產物。
● ADO.NET 包含對 XML標準的完全支持,這對于跨平臺交換數據具有重要的意義。
● ADO.NET 既能在與數據源連接的環境下工作,又能在斷開與數據源連接的條件下工作。特別是后者,非常適合于網絡應用的需要。因為在網絡環境下,保持與數據源連接,不符合網站的要求,不僅效率低,付出的代價高,而且常常會引發由于多個用戶同時訪問時帶來的沖突。因此 ADO.NET 系統集中主要精力用于解決在斷開與數據源連接的條件下數據處理的問題。
ADO.NET 提供了面向對象的數據庫視圖,并且在 ADO.NET 對象中封裝了許多數據庫屬性和關系。最重要的是,ADO.NET 通過很多方式封裝和隱藏了很多數據庫訪問的細節??梢酝耆恢缹ο笤谂c ADO.NET 對象交互,也不用擔心數據移動到另外一個數據庫或者從另一個數據庫獲得數據的細節問題。如圖1.11顯示了 ADO.NET架構總覽。
1.3.1 數據庫的連接方式
圖1.11 通過ADO.NET訪問數據庫的接口模型
1.3.1 數據庫的連接方式
5. JDBC數據庫接口
JDBC(JavaData Base Connectivity)是JavaSoft公司開發的,一組Java語言編寫的用于數據庫連接和操作的類和接口,可為多種關系數據庫提供統一的訪問方式。通過JDBC完成對數據庫的訪問包括四個主要組件:Java應用程序、JDBC驅動器管理器、驅動器和數據源。
在JDBC?API中有兩層接口:應用程序層和驅動程序層,前者使開發人員可以通過SQL調用數據庫和取得結果,后者處理與具體數據庫驅動程序的所有通訊。
使用JDBC接口對數據庫操作有如下優點:
(1).JDBC?API與ODBC十分相似,有利于用戶理解;
(2)使編程人員從復雜的驅動器調用命令和函數中解脫出來,而致力于應用程序功能的實現;
(3)JDBC支持不同的關系數據庫,增強了程序的可移植性。
使用JDBC的主要缺點:訪問數據記錄的速度會受到一定影響,此外,由于JDBC結構中包含了不同廠家的產品,這給數據源的更改帶來了較大麻煩。
4. 數據庫連接池技術
對于網絡環境下的數據庫應用,由于用戶眾多,使用傳統的JDBC方式進行數據庫連接,系統資源開銷過大成為制約大型企業級應用效率的瓶頸,采用數據庫連接池技術對數據庫連接進行管理,可以大大提高系統的效率和穩定性。
1.3.2 客戶/服務器(C/S)模式應用系統
Microsoft公司開發的SQL Server數據庫管理系統當前最流行的版本仍然是SQL Server2000,本書介紹SQL Server2000。
數據庫管理系統通過命令和適合專業人員的界面操作數據庫。對于SQL Server2000數據庫管理系統,用戶在SQL Server 2000的查詢分析器中輸入SQL命令,系統執行的結果返回到查詢分析器上顯示。用戶可以直接通過SQL Server 2000的企業管理器的界面操作數據庫。
圖1.12 數據庫應用程序與數據庫、數據庫管理系統之間的關系
1.3.3 三層客戶/服務器(B/S)模式應用系統
基于Web的數據庫應用采用三層客戶/服務器模式,也稱B/S結構。第一層為瀏覽器,第二層為Web服務器,第三層為數據庫服務器。瀏覽器是用戶輸入數據和顯示結果的交互界面,用戶在瀏覽器表單中輸入數據,然后將表單中的數據提交并發送到Web服務器,Web服務器應用程序接受并處理用戶的數據,通過數據庫服務器,從數據庫中查詢需要的數據(或把數據錄入數據庫)送Web服務器,Web服務器把返回的結果插入HTML頁面,傳送到客戶端,在瀏覽器中顯示出來。如圖1.13所示。
1.3.3 三層客戶/服務器(B/S)模式應用系統
基于Web的數據庫應用采用三層客戶/服務器模式,也稱B/S結構。第一層為瀏覽器,第二層為Web服務器,第三層為數據庫服務器。瀏覽器是用戶輸入數據和顯示結果的交互界面,用戶在瀏覽器表單中輸入數據,然后將表單中的數據提交并發送到Web服務器,Web服務器應用程序接受并處理用戶的數據,通過數據庫服務器,從數據庫中查詢需要的數據(或把數據錄入數據庫)送Web服務器,Web服務器把返回的結果插入HTML頁面,傳送到客戶端,在瀏覽器中顯示出來。如圖1.13所示。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。