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端,每次进行数据操作完成后,自动关闭连接状态.再次使用时可以重新打开连接.