net資料庫訪問技術
隨著資料庫產品和技術的發展,資料庫訪問技術也從ODBC、DAO、RDO、OLE DB、ADO 和 RDS發展到今天的ADO.NET。以下內容由城市刀客整理編輯,旨在為你展示資料庫訪問技術的概貌。
<!--[if !supportEmptyParas]-->
ODBC<!--[endif]-->
ODBC 技術為訪問不同的sql 資料庫提供了一個共同的介面。ODBC 使用 SQL 作為訪問數據的標准。這一介面提供了最大限度的互操作性:一個應用程序可以通過共同的一組代碼訪問不同的 SQL 資料庫管理系統 (DBMS)。開發人員可以添加資料庫驅動程序,將應用程序與用戶所選的 DBMS 聯系起來。驅動程序管理器提供應用程序與資料庫之間的中間鏈接。ODBC 介麵包含一系列功能,由每個 DBMS 的驅動程序實現。當應用程序改變它的 DBMS 時,開發人員只使用新的 DBMS 驅動程序替代舊的驅動程序,並且應用程序可以無需修改代碼照常運行。
<!--[if !supportEmptyParas]-->
標准 ODBC 結構的關系圖如下:
DAO & RDO
DAO 是建立在 Microsoft Jet Microsoft Access 的資料庫引擎基礎之上的。Jet 是第一個連接到 Access 的面向對象的介面。使用 Access 的應用程序可以用 DAO 直接訪問資料庫。由於 DAO 是嚴格按照 Access 建模的,因此,使用 DAO 是連接 Access 資料庫最快速、最有效的方法。DAO 也可以連接到非 Access 資料庫,例如,SQL Server 和 Oracle。DAO 使用 ODBC,但是由於 DAO 是專門設計用來與 Jet 引擎對話的,Jet 將解釋 DAO 和 ODBC 之間的調用。使用除 Access 之外的資料庫時,這種額外的解釋步驟導致較慢的連接速度。如下圖所示:
<!--[if !supportEmptyParas]--> <!--[endif]-->
要克服這樣的限制,Microsoft 創建了 RDO。圖 Application1 顯示了 RDO 如何直接訪問 ODBC API,而無需通過 Jet 引擎。不久之後,Microsoft 推出了 ODBCDirect,它是 DAO 的擴展,在後台使用 RDO。圖 Application2 顯示 ODBCDirect 如何允許現有的 DAO 應用程序訪問資料庫,而沒有 Jet 引擎產生的性能損失。
OLE DB
OLE DB 建立於 ODBC 之上,並將此技術擴展為提供更高級數據訪問介面的組件結構。此結構對企業中及 Internet 上的 SQL、非 SQL 和非結構化數據源提供一致的訪問。(實際上,在訪問基於 SQL 的數據時,OLE DB 仍使用 ODBC,因為對於 SQL 它是最優結構。)
OLE DB 由三個組件構成:數據使用者(例如,一個應用程序);包含並公開數據的數據提供程序以及處理並傳輸數據的服務組件(例如,查詢處理器、游標引擎)。OLE DB 是一個針對 SQL 數據源和非 SQL 數據源(例如,郵件和目錄)進行操作的 API。如下圖所示:
OLE DB 為 C 和 C++ 程序員及使用其他包含 C 樣式函數調用語言的程序員提供綁定。有一些語言(例如 VB 和 VBScript)不提供指針數據類型(地址變數)。因此,這些語言不能使用 C 樣式綁定,而且不能直接調用 OLE DB。<!--[if !supportEmptyParas]--> <!--[endif]-->
在此基礎上,Microsoft 推出了另一個數據訪問對象模型:ADO。ADO 採用基於 DAO 和 RDO 的對象,並提供比 DAO 和 RDO 更簡單的對象模型(盡管會產生一些冗餘的功能,如現在進行一項操作時可以用不止一種方法)。ADO 中的對象層次結構比 DAO 中的更平緩。ADO 包含一些簡化對數據存儲區數據的訪問任務的內置對象。
<!--[if !supportEmptyParas]-->
下圖顯示了應用程序連接到資料庫可採取的許多途徑。例如,VB 程序員可以使用 ADO 將應用程序連接到 OLE DB 提供程序。如果資料庫不支持 OLE DB,應用程序可以通過 ODBC 連接。Visual C++ (VC++) 程序員可以使用 ADO 或直接通過 OLE DB 連接。
讓我們看一個簡單示例,它顯示 ADO 是如何運行的。清單 1 顯示可如何使用典型的記錄集對象--ADO 中的核心對象。記錄集對象表示一系列記錄(很像一個表),並支持游標類型,例如,adOpenForwardOnly、adOpenKeyset、adOpenDynamic 和 adOpenStatic。游標可以在伺服器端(默認情況下),也可在客戶端。<!--[if !supportEmptyParas]--> <!--[endif]-->
清單 1
<!--#include file="adovbs.inc"-->
<%
Dim connStr, rs
connStr = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=pubs;Data Source=localhost"
SET rs= Server.CreateObject("ADODB.Recordset")
<!--[if !supportEmptyParas]-->rs.Open "Authors", connStr, adOpenForwardOnly, adLockOptimistic, adCmdTable
WHILE NOT rs.EOF
response.write rs("au_fname") & "," & rs("au_lname") & "<br>"
rs.moveNext
END
SET rs=nothing
%>
<!--[if !supportEmptyParas]-->
要訪問一條記錄,ADO 需要按順序掃描記錄集。要訪問多個表,需要執行 JOIN 查詢,並將返回的結果作為記錄集。雖然記錄集對象支持斷開的數據訪問,ADO 還是主要為連接的數據訪問而設計。這種連接的訪問模式佔用伺服器端的重要資源。另外,要傳輸記錄集,必須使用 COM 封送處理。COM 封送處理是數據類型轉換過程,這種轉換佔用額外的系統資源。<!--[if !supportEmptyParas]--> <!--[endif]-->
從 ADO 2.1 開始,Microsoft 將 XML 支持添加到 ADO 對象模型,這樣就可將記錄集保存為 XML 文檔。然而,直到 ADO 2.5 出現,ADO 2.1 中 XML 支持的一些限制(例如,分層記錄集對象的保持)才被取消。雖然 ADO 可以將 XML 文檔讀入記錄集,但它只能讀取名為高級數據表圖 (Advanced Data TableGram, ADTG) 的專用架構。<!--[if !supportEmptyParas]--> <!--[endif]-->
Microsoft 希望擁有斷開的數據訪問機制,它擴展了 ADO 並推出遠程數據服務 (RDS)。RDS 是按照 ADO 建模的,無需實時連接就可以使記錄集傳輸到客戶端(例如,Web 瀏覽器)。然而,如同 ADO 一樣,RDS 使用 COM 封送處理將記錄集從伺服器傳輸到客戶端。
ADO.NET
在開始設計 .NET 框架時,Microsoft 就以此為契機重新設計了數據訪問模型。Microsoft 沒有進一步擴展 ADO,而是決定設計一個新的數據訪問框架,但保留了縮寫詞。Microsoft 根據其成功的 ADO 對象模型經驗設計了 ADO.NET。但 ADO.NET 滿足了 ADO 無法滿足的三個重要需求:提供了斷開的數據訪問模型,這對 Web 環境至關重要;提供了與 XML 的緊密集成;還提供了與 .NET 框架的無縫集成(例如,兼容基類庫類型系統)。
下圖顯示了 ADO.NET 的結構。但缺少了能夠在 ADO 中執行諸多功能的記錄集對象。ADO.NET 具有幾個專用對象以執行特定任務,用於代替記錄集對象。表 1 描述了其中的三個專用對象:DataAdapter、DataReader 和 Dataset。
表一:
DataAdapter The DataAdapter object provides a bridge between the database and a DataSet. The key advantage of DataAdapter is that it can work with any data source. The data source might be a database or it might be an XML document.
//DataAdapter提供了一個資料庫與DataSet之間的橋梁。它最大的優點在於能工作於不同的數據源,這些數據源可以是資料庫,也可以是 XML文件。
DataReader The DataReader object provides an efficient way to retrieve records on the server side. DataReader is a connected, read-only, and forward-only data-access mode. This object is useful for Web applications, which use DataReader to display records on Web pages.
//DataReader對象提供了從伺服器端高效獲取數據的途徑,它是在只讀和只進的連接模式下從數據源讀取數據的,這個對象對通過網頁展示數據記錄的Web應用程序開發很有用。
DataSet The DataSet object provides disconnected copies of records from a database. The DataSet object stores records from a table (or multiple tables) in memory without holding a connection to the server. When in memory, DataSet is a binary object. When the DataSet is remoted, transferred, or serialized, it''s represented as a DiffGram—an XML format. Because XML is plaintext, records can be exchanged easily over the Web, bypassing firewall restrictions(限制性). DataSet also contains various objects—such as constraints(壓縮), relationships, and views—that let you manipulate(操作) tables on the client side instead of working through one Recordset in ADO.
//DataSet對象在斷開資料庫連接的情況下提供了一個資料庫內容的拷貝,它把記錄從表中取出,以二進制對象的形式存放在內存中。當Dataset被調用的時候,它表現為DiffGram--一種XML格式。
❷ ITJOB考題使用ADO.NET數據訪問技術連接Oracle資料庫和連接Sql Server資料庫的有哪幾個步驟
隨著資料庫產品和技術的發展,資料庫訪問技術也從ODBC、DAO、RDO、OLE DB、ADO 和 RDS發展到今天的ADO.NET。以下內容由城市刀客整理編輯,旨在為你展示資料庫訪問技術的概貌。
<!--[if !supportEmptyParas]-->
ODBC<!--[endif]-->
ODBC 技術為訪問不同的SQL 資料庫提供了一個共同的介面。ODBC 使用 SQL 作為訪問數據的標准。這一介面提供了最大限度的互操作性:一個應用程序可以通過共同的一組代碼訪問不同的 SQL 資料庫管理系統 (DBMS)。開發人員可以添加資料庫驅動程序,將應用程序與用戶所選的 DBMS 聯系起來。驅動程序管理器提供應用程序與資料庫之間的中間鏈接。ODBC 介麵包含一系列功能,由每個 DBMS 的驅動程序實現。當應用程序改變它的 DBMS 時,開發人員只使用新的 DBMS 驅動程序替代舊的驅動程序,並且應用程序可以無需修改代碼照常運行。
<!--[if !supportEmptyParas]-->
標准 ODBC 結構的關系圖如下:
DAO & RDO
DAO 是建立在 Microsoft Jet Microsoft Access 的資料庫引擎基礎之上的。Jet 是第一個連接到 Access 的面向對象的介面。使用 Access 的應用程序可以用 DAO 直接訪問資料庫。由於 DAO 是嚴格按照 Access 建模的,因此,使用 DAO 是連接 Access 資料庫最快速、最有效的方法。DAO 也可以連接到非 Access 資料庫,例如,SQL Server 和 Oracle。DAO 使用 ODBC,但是由於 DAO 是專門設計用來與 Jet 引擎對話的,Jet 將解釋 DAO 和 ODBC 之間的調用。使用除 Access 之外的資料庫時,這種額外的解釋步驟導致較慢的連接速度。如下圖所示:
<!--[if !supportEmptyParas]--> <!--[endif]-->
要克服這樣的限制,Microsoft 創建了 RDO。圖 Application1 顯示了 RDO 如何直接訪問 ODBC API,而無需通過 Jet 引擎。不久之後,Microsoft 推出了 ODBCDirect,它是 DAO 的擴展,在後台使用 RDO。圖 Application2 顯示 ODBCDirect 如何允許現有的 DAO 應用程序訪問資料庫,而沒有 Jet 引擎產生的性能損失。
OLE DB
OLE DB 建立於 ODBC 之上,並將此技術擴展為提供更高級數據訪問介面的組件結構。此結構對企業中及 Internet 上的 SQL、非 SQL 和非結構化數據源提供一致的訪問。(實際上,在訪問基於 SQL 的數據時,OLE DB 仍使用 ODBC,因為對於 SQL 它是最優結構。)
OLE DB 由三個組件構成:數據使用者(例如,一個應用程序);包含並公開數據的數據提供程序以及處理並傳輸數據的服務組件(例如,查詢處理器、游標引擎)。OLE DB 是一個針對 SQL 數據源和非 SQL 數據源(例如,郵件和目錄)進行操作的 API。如下圖所示:
OLE DB 為 C 和 C++ 程序員及使用其他包含 C 樣式函數調用語言的程序員提供綁定。有一些語言(例如 VB 和 VBScript)不提供指針數據類型(地址變數)。因此,這些語言不能使用 C 樣式綁定,而且不能直接調用 OLE DB。<!--[if !supportEmptyParas]--> <!--[endif]-->
在此基礎上,Microsoft 推出了另一個數據訪問對象模型:ADO。ADO 採用基於 DAO 和 RDO 的對象,並提供比 DAO 和 RDO 更簡單的對象模型(盡管會產生一些冗餘的功能,如現在進行一項操作時可以用不止一種方法)。ADO 中的對象層次結構比 DAO 中的更平緩。ADO 包含一些簡化對數據存儲區數據的訪問任務的內置對象。
<!--[if !supportEmptyParas]-->
下圖顯示了應用程序連接到資料庫可採取的許多途徑。例如,VB 程序員可以使用 ADO 將應用程序連接到 OLE DB 提供程序。如果資料庫不支持 OLE DB,應用程序可以通過 ODBC 連接。Visual C++ (VC++) 程序員可以使用 ADO 或直接通過 OLE DB 連接。
讓我們看一個簡單示例,它顯示 ADO 是如何運行的。清單 1 顯示可如何使用典型的記錄集對象--ADO 中的核心對象。記錄集對象表示一系列記錄(很像一個表),並支持游標類型,例如,adOpenForwardOnly、adOpenKeyset、adOpenDynamic 和 adOpenStatic。游標可以在伺服器端(默認情況下),也可在客戶端。<!--[if !supportEmptyParas]--> <!--[endif]-->
清單 1
<!--#include file="adovbs.inc"-->
<%
Dim connStr, rs
connStr = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=pubs;Data Source=localhost"
SET rs= Server.CreateObject("ADODB.Recordset")
<!--[if !supportEmptyParas]-->rs.Open "Authors", connStr, adOpenForwardOnly, adLockOptimistic, adCmdTable
WHILE NOT rs.EOF
response.write rs("au_fname") & "," & rs("au_lname") & "<br>"
rs.moveNext
END
SET rs=nothing
%>
<!--[if !supportEmptyParas]-->
要訪問一條記錄,ADO 需要按順序掃描記錄集。要訪問多個表,需要執行 JOIN 查詢,並將返回的結果作為記錄集。雖然記錄集對象支持斷開的數據訪問,ADO 還是主要為連接的數據訪問而設計。這種連接的訪問模式佔用伺服器端的重要資源。另外,要傳輸記錄集,必須使用 COM 封送處理。COM 封送處理是數據類型轉換過程,這種轉換佔用額外的系統資源。<!--[if !supportEmptyParas]--> <!--[endif]-->
從 ADO 2.1 開始,Microsoft 將 XML 支持添加到 ADO 對象模型,這樣就可將記錄集保存為 XML 文檔。然而,直到 ADO 2.5 出現,ADO 2.1 中 XML 支持的一些限制(例如,分層記錄集對象的保持)才被取消。雖然 ADO 可以將 XML 文檔讀入記錄集,但它只能讀取名為高級數據表圖 (Advanced Data TableGram, ADTG) 的專用架構。<!--[if !supportEmptyParas]--> <!--[endif]-->
Microsoft 希望擁有斷開的數據訪問機制,它擴展了 ADO 並推出遠程數據服務 (RDS)。RDS 是按照 ADO 建模的,無需實時連接就可以使記錄集傳輸到客戶端(例如,Web 瀏覽器)。然而,如同 ADO 一樣,RDS 使用 COM 封送處理將記錄集從伺服器傳輸到客戶端。
❸ 4、AD.NET數據訪問技術中的 Command對象有哪三種執行方法
1、概述
http://ado.net提供了豐富的資料庫操作,這些操作可以分為三個步驟:
· 第一,使用SqlConnection對象連接資料庫;
· 第二,建立SqlCommand對象,負責SQL語句的執行和存儲過程的調用;
· 第三,對SQL或存儲過程執行後返回的「結果」進行操作。
對返回「結果」的操作可以分為兩類:
· 一是用SqlDataReader直接一行一行的讀取數據集;
· 二是DataSet聯合SqlDataAdapter來操作資料庫。
兩者比較:
· SqlDataReader時刻與遠程資料庫伺服器保持連接,將遠程的數據通過「流」的形式單向傳輸給客戶端,它是「只讀」的。由於是直接訪問資料庫,所以效率較高,但使用起來不方便。
❹ 請介紹一下ADO.NET框架下幾種資料庫訪問技術的優缺點。詳細一點
數據源控制項訪問資料庫:簡單快捷,但是真正的開發中不會去這樣用的,因為1是效率問題2是靈活性不足,這就跟ASP.NET裡面的其他控制項一樣,正的要做大應用是不會用這種東西的,因為擴展性不足,或者為了做到兼容性損失了效率。 使用.NET數據提供程序訪問資料庫:共有4種,SQL Server .NET Framework數據提供程序,OLEDB .NET Framework數據提供程序,ODBC .NET Framework數據提供程序,Oracle .NET Framework數據提供程序。看名字也該明白,針對不同的資料庫使用不同的數據提供程序,這是開發中最經常使用的方式,缺點是米有辦法應對多資料庫的情況,也就是說假如你的應用是面向多資料庫的,那麼有幾種資料庫,基本要寫幾套SQL。 用DATASet:恭喜你不用寫T-SQL了,但是你要學會它的語法,從此不用擔心多資料庫應用的問題。但是慘了,它為了兼容多種資料庫因此T-SQL寫的真的「很兼容」執行效率太低,同樣的一個表現結果,這個SQL嵌套了好幾次,效率灰常低。 LINQ to SQL:老實講,他就是為SQL SERVER而生的,你也不用寫T-SQL了,它的語法學學還是好處頗多,因因為你在LINQ TO OBJECT上也能見到這種語法的影子收益頗多,它的執行效率很快,但是不管怎麼講也沒有你直接用SQL Server .NET Framework數據提供程序,自己寫SQL快,可控製程度高,好處也是顯而易見就像用DATASET一樣,你不用再為了數據持久化問題寫一大堆ORM的東西了。 by the way,目前.NET中,ORM用的比較多的是Nhibernate,但是你如果就想用SQL SERVER還是用LINQ to SQL吧,好處顯而易見,在開發過程中對於資料庫的變更也是比較常見的,你的資料庫欄位不知道會出現在哪個類,哪個文件中,如果用了DATASET,或LINQ2SQL在編譯階段你就可以察覺到這種變更帶來的影響。
❺ 如何在.net中訪問mysql資料庫
(1)首先需要下載C#訪問MySQL資料庫的ADO.NET驅動程序
mysql-connector-net-6.3.8.msi
(2)安裝mysql-connector-net
然後直接在Windows操作系統安裝mysql-connector-net-6.3.8.msi
(3)封裝資料庫訪問組件DbConnectionMySQL
///<summary>
///MySQL資料庫
///版本mysql-connector-net-6.3.8.msi
///</summary>
[Serializable]
publicclassDbConnectionMySQL:DbConnectionWrapper
{
publicDbConnectionMySQL(stringpConnectionString)
:base(pConnectionString)
{
this.m_dbconn=newMySqlConnection(pConnectionString);
this.m_DbConnState=DbConnState.Free;
}
//--
()
{
returnnewMySqlDataAdapter();
}
(DbCommanddbCommand)
{
returnnewMySqlDataAdapter(dbCommandasMySqlCommand);
}
()
{
returnnewMySqlCommand();
}
()
{
returnnewMySqlConnection();
}
()
{
returnnewMySqlCommandBuilder();
}
()
{
returnDataProviderType.Sql;
}
(stringTableName,stringUserName)
{
#regioninformation
boolrbc=false;//TABLES表中去查詢table_name
stringdSql="select*fromTABLESwheretable_name='"+TableName+"'";
DataSetds=this.ExecuteDataSet(dSql);
if(ds!=null)
{
if(ds.Tables[0].Rows.Count>0)
{
rbc=true;
}
else
{
rbc=false;
}
}
else
{
rbc=false;
}
returnrbc;
#endregion
}
(stringFieldName,stringTableName)
{
#regioninformation
boolrbc=false;
stringdSql="";
dSql="select*from"+TableName+"where1<>1";
DataSetds=this.ExecuteDataSet(dSql);
if(ds!=null)
{
DataTabledt=ds.Tables[0];
for(intj=0;j<dt.Columns.Count;j++)
{
if(dt.Columns[j].ColumnName.ToString().ToUpper()==FieldName.ToString().ToUpper())
{
rbc=true;
gotoReturn_End;
}
}
dt.Dispose();
dt=null;
}
ds.Dispose();
ds=null;
Return_End:
returnrbc;
#endregion
}
{
get
{
return':';//SQLite的參數符號為:
}
}
(stringname,objectvalue)
{
returnnewMySqlParameter(name,value);
}
(stringname)
{
DbParameterdbp=newMySqlParameter();
dbp.ParameterName=name;
returndbp;
}
(stringname,DbTypedbtype,objectvalue)
{
DbParameterdbp=newMySqlParameter();
dbp.ParameterName=name;
dbp.Value=value;
dbp.DbType=dbtype;
returndbp;
}
(stringname,DbTypedbtype,intsize,objectvalue)
{
DbParameterdbp=newMySqlParameter();
dbp.ParameterName=name;
dbp.Value=value;
dbp.DbType=dbtype;
dbp.Size=size;
returndbp;
}
}
(4)客戶端開發實例
publicvoidTestCShape_MySQL()
{
stringconstr="server=localhost;UserId=root;password=root;Database=xp_users";
DbConnectionWrapperdbw=newDbConnectionMySQL(constr);
boolrbc=dbw.TestConnection();
this.Context.Response.Write(rbc);
stringx="";
//刪除語句
x="deletefromxp_users";
if(dbw.ExecuteQuery(x)>0)
{
this.Context.Response.Write("刪除語句成功!下面是SQL語句<br>"+x);
}
//插入語句
x="insertintoxp_users(gid,uid,uname,sex,email,pwd)values('";
x+="1','hsg77','何XXX',1,'[email protected]','1')";
if(dbw.ExecuteQuery(x)>0)
{
this.Context.Response.Write("插入語句成功!下面是SQL語句<br>"+x);
}
//查詢語句
DataTabledt=dbw.ExecuteDataTable("select*fromxp_users");
if(dt!=null&&dt.Rows.Count>0)
{
this.Context.Response.Write("<br>用戶數:"+dt.Rows.Count);
}
if(dt!=null)
{
dt.Dispose();
dt=null;
}
dbw.Dispose();
dbw=null;
}
文中實例來自一篇博客,由於網路知道對 url 地址封殺,不能直接給出鏈接!
❻ c++.net 連接資料庫的方法
1.c#連接連接access
程序代碼:
using system.data;
using system.data.oledb;
..
string strconnection="provider=microsoft.jet.oledb.4.0;";
strconnection+=@"data source=c:begaspnetnorthwind.mdb";
oledbconnection objconnection=new oledbconnection(strconnection);
..
objconnection.open();
objconnection.close();
2.c#連接sql server
程序代碼:
using system.data;
using system.data.sqlclient;
..
string strconnection="user id=sa;password=;";
strconnection+="initial catalog=northwind;server=yoursqlserver;";
strconnection+="connect timeout=30";
sqlconnection objconnection=new sqlconnection(strconnection);
..
objconnection.open();
objconnection.close();
3.c#連接mysql
程序代碼:
using mysqldrivercs;
// 建立資料庫連接
mysqlconnection dbconn;
dbconn = new mysqlconnection(new mysqlconnectionstring("localhost","mysql","root","",3306).asstring);
dbconn.open();
// 執行查詢語句
mysqlcommand dbcomm;
dbcomm = new mysqlcommand("select host,user from user",dbconn);
// 讀取數據
mysqldatareader dbreader = dbcomm.executereaderex();
// 顯示數據
try
{
while (dbreader.read())
{
console.writeline("host = {0} and user = {1}", dbreader.getstring(0),dbreader.getstring(1));
}
}
finally
{
dbreader.close();
dbconn.close();
}
//關閉資料庫連接
dbconn.close();
4.c#連接ibm db2
程序代碼:
oledbconnection1.open();
//打開資料庫連接
oledbdataadapter1.fill(dataset1,"address");
//將得來的數據填入dataset
datagrid1.databind();
//綁定數據
oledbconnection1.close();
//關閉連接
//增加資料庫數據
在web form上新增對應欄位數量個數的textbox,及一個button,為該按鍵增加click響應事件代碼如下:
this.oledbinsertcommand1.commandtext = "insertsintosaddress(name,
email, age, address) values
(』"+textbox1.text+"』,』"+textbox2.text+"』,』"+textbox3.text+"』,』"+textbox4.text+"』)";
oledbinsertcommand1.connection.open();
//打開連接
oledbinsertcommand1.executenonquery();
//執行該sql語句
oledbinsertcommand1.connection.close();
//關閉連接
❼ 如何使用.net訪問Access資料庫
使用.net訪問Access資料庫:
1.BL層:新增一個DataAccess類。
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.OleDb;
namespace Haley.FrameWork
{
/// <summary>
/// DataAccess 的摘要說明
/// </summary>
public class DataAccess
{
protected static OleDbConnection conn = new OleDbConnection();
protected static OleDbCommand comm = new OleDbCommand();
public DataAccess()
{
//init
}
/// <summary>
/// 打開資料庫
/// </summary>
private static void openConnection()
{
if (conn.State == ConnectionState.Closed)
{
conn.ConnectionString = @"Provider=Microsoft.Jet.OleDb.4.0;Data Source=" + ConfigurationManager.AppSettings["myconn"];//web.config文件里設定。
comm.Connection = conn;
try
{
conn.Open();
}
catch (Exception e)
{ throw new Exception(e.Message); }
}
}
/// <summary>
/// 關閉資料庫
/// </summary>
private static void closeConnection()
{
if (conn.State == ConnectionState.Open)
{
conn.Close();
conn.Dispose();
comm.Dispose();
}
}
/// <summary>
/// 執行sql語句
/// </summary>
/// <param name="sqlstr"></param>
public static void excuteSql(string sqlstr)
{
try
{
openConnection();
comm.CommandType = CommandType.Text;
comm.CommandText = sqlstr;
comm.ExecuteNonQuery();
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{ closeConnection(); }
}
/// <summary>
/// 返回指定sql語句的OleDbDataReader對象,使用時請注意關閉這個對象。
/// </summary>
/// <param name="sqlstr"></param>
/// <returns></returns>
public static OleDbDataReader dataReader(string sqlstr)
{
OleDbDataReader dr = null;
try
{
openConnection();
comm.CommandText = sqlstr;
comm.CommandType = CommandType.Text;
dr = comm.ExecuteReader(CommandBehavior.CloseConnection);
}
catch
{
try
{
dr.Close();
closeConnection();
}
catch { }
}
return dr;
}
/// <summary>
/// 返回指定sql語句的OleDbDataReader對象,使用時請注意關閉
/// </summary>
/// <param name="sqlstr"></param>
/// <param name="dr"></param>
public static void dataReader(string sqlstr, ref OleDbDataReader dr)
{
try
{
openConnection();
comm.CommandText = sqlstr;
comm.CommandType = CommandType.Text;
dr = comm.ExecuteReader(CommandBehavior.CloseConnection);
}
catch
{
try
{
if (dr != null && !dr.IsClosed)
dr.Close();
}
catch
{
}
finally
{
closeConnection();
}
}
}
/// <summary>
/// 返回指定sql語句的dataset
/// </summary>
/// <param name="sqlstr"></param>
/// <returns></returns>
public static DataSet dataSet(string sqlstr)
{
DataSet ds = new DataSet();
OleDbDataAdapter da = new OleDbDataAdapter();
try
{
openConnection();
comm.CommandType = CommandType.Text;
comm.CommandText = sqlstr;
da.SelectCommand = comm;
da.Fill(ds);
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
closeConnection();
}
return ds;
}
/// <summary>
/// 返回指定sql語句的dataset
/// </summary>
/// <param name="sqlstr"></param>
/// <param name="ds"></param>
public static void dataSet(string sqlstr, ref DataSet ds)
{
OleDbDataAdapter da = new OleDbDataAdapter();
try
{
openConnection();
comm.CommandType = CommandType.Text;
comm.CommandText = sqlstr;
da.SelectCommand = comm;
da.Fill(ds);
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
closeConnection();
}
}
/// <summary>
/// 返回指定sql語句的datatable
/// </summary>
/// <param name="sqlstr"></param>
/// <returns></returns>
public static DataTable dataTable(string sqlstr)
{
DataTable dt = new DataTable();
OleDbDataAdapter da = new OleDbDataAdapter();
try
{
openConnection();
comm.CommandType = CommandType.Text;
comm.CommandText = sqlstr;
da.SelectCommand = comm;
da.Fill(dt);
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
closeConnection();
}
return dt;
}
/// <summary>
/// 返回指定sql語句的datatable
/// </summary>
/// <param name="sqlstr"></param>
/// <param name="dt"></param>
public static void dataTable(string sqlstr, ref DataTable dt)
{
OleDbDataAdapter da = new OleDbDataAdapter();
try
{
openConnection();
comm.CommandType = CommandType.Text;
comm.CommandText = sqlstr;
da.SelectCommand = comm;
da.Fill(dt);
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
closeConnection();
}
}
/// <summary>
/// 返回指定sql語句的dataview
/// </summary>
/// <param name="sqlstr"></param>
/// <returns></returns>
public static DataView dataView(string sqlstr)
{
OleDbDataAdapter da = new OleDbDataAdapter();
DataView dv = new DataView();
DataSet ds = new DataSet();
try
{
openConnection();
comm.CommandType = CommandType.Text;
comm.CommandText = sqlstr;
da.SelectCommand = comm;
da.Fill(ds);
dv = ds.Tables[0].DefaultView;
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
closeConnection();
}
return dv;
}
}
}
2.Web.Config:
在Config文件中添加Access文件的路徑:
<appSettings>
<!-- 這里是存放Access文件的地址。用Access文件存放的路徑替換下邊的路徑。-->
<add key="myconn" value="D:\Test\Test.mdb"/>
</appSettings >
3.UI層。
在頁面添加控制項,在cs文件中使用上邊的類。
protected void Button1_Click(object sender, EventArgs e)
{
string name = TextBox1.Text;
string strSql = "insert into Table1(Name) values('" + name + "')";
DataAccess.excuteSql(strSql);
}
❽ 基於ASP.NET的資料庫訪問技術
在用戶進行數據查詢時通常有這樣的情況,一個資料庫查詢將返回太多的行,一致不能在一頁中顯示。如果用戶正在使用一個慢的鏈接,發送特別大的數據結果可能要花很長的時間。一旦獲得了數據,用戶可能發現它不包含正確的內容,或者查詢范圍太大,沒有容易的辦法檢查完所有的結果來找到重要的信息。因此,對查詢結果分頁顯示將為用戶可管理的數據查詢提供極大的方便。分頁顯示是一種非常常見的瀏覽和顯示大量數據的方法,屬於web編程中最常處理的事件之一,現在網站基本上都提供了分頁顯示信息的功能,但大部分還是基於ASP的,而.NET平台框架是針對各種各樣的Web應用設計的,因此本文討論了一種在ASP.NET框架下實現查詢記錄自定義分頁顯示的技術。
ASP.NET
.NET是通過平台獨立的數據描述方法(通過XML)和通用的訪問媒介Internet來簡化用戶訪問和存儲信息的過程。
ASP.NET是Microsoft.Net框架的核心元素,是一項基於伺服器的強大技術,利用它,可以為WWW站點或企業內部網創建動態可以交互的HTML頁面。ASP.NET 完全基於模塊和組件,具有很好的可擴展性和可定製性。它主要包括WebForm和WebService兩種編程模式。前者為用戶提供功能強大、外觀豐富的基於表單(Form)的可編程Web頁面;後者通過對HTTP、XML、SOAP、WSDL等Internet標準的支持提供在異構網路環境下獲取遠程服務、鏈接遠程設備、交互遠程應用的編程界面。
通過ADO.NET鏈接、操縱數據源
在Microsoft公司推出開放式資料庫互連(ODBC)應用程序編程介面(API)以來,出現了各種各樣的資料庫訪問技術,而直到ADO.NET出現,API才能實時地給出處理效果。ADO.NET是ASP.NET應用程序用來與資料庫進行通信的技術,使你可以同關系資料庫和其他數據源進行交互。斷開的訪問是ADO.NET最重要的特性,是對ADO最大的改變。ADO.NET創建一個到資料庫的鏈接,用從資料庫中提取的信息副本填充數據集。如果改變了數據集(DataSet)中的信息,資料庫里相應表格中的信息不會改變。需要時,可以把DataSet連回最初的數據源並應用所有的改變。
❾ 簡述ADD.NET訪問資料庫的兩種方法
連接模式:資料庫和PC端一直保持連接狀態.
非連接模式:資料庫和PC端,每次進行數據操作完成後,自動關閉連接狀態.再次使用時可以重新打開連接.