第六节:aspnet数据库操作
ASP数据库操作大全及常用

ASP数据库操作大全大 | 中 | 小[2006/03/19 12:52 | 分类: Asp 相关 | by NetFetch ]ASP数据库操作类:包括Asp建立数据库文件,Asp压缩数据库文件,Asp查找数据库文件以及一些有用的asp编程的例子<%'#######以下是一个类文件,下面的注解是调用类的方法################################################'# 注意:如果系统不支持建立Scripting.FileSystemObject对象,那么数据库压缩功能将无法使用'# Access 数据库类'# CreateDbFile 建立一个Access 数据库文件'# CompactDatabase 压缩一个Access 数据库文件'# 建立对象方法:'# Set a = New DatabaseTools'############################################################################### ##########Class DatabaseToolsPublic function CreateDBfile(byVal dbFileName,byVal DbVer,byVal SavePath)'建立数据库文件'If DbVer is 0 Then Create Access97 dbFile'If DbVer is 1 Then Create Access2000 dbFileOn error resume NextIf Right(SavePath,1)<>"" or Right(SavePath,1)<>"/" Then SavePath = Trim(SavePath) & ""If Left(dbFileName,1)="" or Left(dbFileName,1)="/" Then dbFileName = Trim(Mid(dbFileName,2,Len(dbFileName)))If DbExists(SavePath & dbFileName) ThenResponse.Write ("对不起,该数据库已经存在!")CreateDBfile = FalseElseDim CaSet Ca = Server.CreateObject("ADOX.Catalog")If Err.number<>0 ThenResponse.Write ("无法建立,请检查错误信息" & Err.number & "" & Err.Description)Err.ClearExit functionEnd IfIf DbVer=0 Thencall Ca.Create("Provider=Microsoft.Jet.OLEDB.3.51;Data Source=" & SavePath & dbFileName)Elsecall Ca.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & SavePath & dbFileName)End IfSet Ca = NothingCreateDBfile = TrueEnd IfEnd functionPublic function CompactDatabase(byVal dbFileName,byVal DbVer,byVal SavePath)'压缩数据库文件'0 为access 97'1 为access 2000On Error resume nextIf Right(SavePath,1)<>"" or Right(SavePath,1)<>"/" Then SavePath = Trim(SavePath) & ""If Left(dbFileName,1)="" or Left(dbFileName,1)="/" Then dbFileName = Trim(Mid(dbFileName,2,Len(dbFileName)))If DbExists(SavePath & dbFileName) ThenResponse.Write ("对不起,该数据库已经存在!")CompactDatabase = FalseElseDim CdSet Cd =Server.CreateObject("JRO.JetEngine")If Err.number<>0 ThenResponse.Write ("无法压缩,请检查错误信息" & Err.number & "" & Err.Description)Err.ClearExit functionEnd IfIf DbVer=0 Thencall pactDatabase("Provider=Microsoft.Jet.OLEDB.3.51;Data Source=" & SavePath & dbFileName,"Provider=Microsoft.Jet.OLEDB.3.51;DataSource=" & SavePath & dbFileName & ".bak.mdb;Jet OLEDB;Encrypt Database=True") Elsecall pactDatabase("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & SavePath & dbFileName,"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & SavePath & dbFileName & ".bak.mdb;Jet OLEDB;Encrypt Database=True")End If'删除旧的数据库文件call DeleteFile(SavePath & dbFileName)'将压缩后的数据库文件还原call RenameFile(SavePath & dbFileName & ".bak.mdb",SavePath & dbFileName)Set Cd = FalseCompactDatabase = TrueEnd Ifend functionPublic function DbExists(byVal dbPath)'查找数据库文件是否存在On Error resume NextDim cSet c = Server.CreateObject("ADODB.Connection")c.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbPathIf Err.number<>0 ThenErr.ClearDbExists = falseelseDbExists = TrueEnd Ifset c = nothingEnd functionPublic function AppPath()'取当前真实路径AppPath = Server.MapPath("./")End functionPublic function AppName()'取当前程序名称AppName = Mid(Request.ServerVariables("SCRIPT_NAME"),(InStrRev(Request.ServerVariables("SC RIPT_NAME") ,"/",-1,1))+1,Len(Request.ServerVariables("SCRIPT_NAME")))End FunctionPublic function DeleteFile(filespec)'删除一个文件Dim fsoSet fso = CreateObject("Scripting.FileSystemObject")If Err.number<>0 ThenResponse.Write("删除文件发生错误!请查看错误信息" & Err.number & "" & Err.Description)Err.ClearDeleteFile = FalseEnd Ifcall fso.DeleteFile(filespec)Set fso = NothingDeleteFile = TrueEnd functionPublic function RenameFile(filespec1,filespec2)'修改一个文件Dim fsoSet fso = CreateObject("Scripting.FileSystemObject")If Err.number<>0 ThenResponse.Write("修改文件名时发生错误!请查看错误信息" & Err.number & "" & Err.Description)Err.ClearRenameFile = FalseEnd Ifcall fso.CopyFile(filespec1,filespec2,True)call fso.DeleteFile(filespec1)Set fso = NothingRenameFile = TrueEnd functionEnd Class%>现在已可以压缩有密码的数据库,代码如下,但是压缩之后的数据库密码就没有了!如何解决?<%Const JET_3X = 4Function CompactDB(dbPath, boolIs97)Dim fso, Engine, strDBPathstrDBPath = left(dbPath,instrrev(DBPath,""))Set fso = CreateObject("Scripting.FileSystemObject")If fso.FileExists(dbPath) ThenSet Engine = CreateObject("JRO.JetEngine")If boolIs97 = "True" ThenpactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbpath, _ "Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database Password='XXXXXXXX';Data Source=" & strDBPath & "temp.mdb;" _& "Jet OLEDB:Engine Type=" & JET_3XElsepactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database Password='XXXXXXXX';Data Source=" & dbpath, _"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strDBPath & "temp.mdb"End Iffso.CopyFile strDBPath & "temp.mdb",dbpathfso.DeleteFile(strDBPath & "temp.mdb")Set fso = nothingSet Engine = nothingCompactDB = "你的数据库, " & dbpath & ", 已经压缩成功!" & vbCrLfElseCompactDB = "数据库名称或路径不正确. 请重试!" & vbCrLfEnd IfEnd Function%>asp编程有用的例子(一)1.如何用Asp判断你的网站的虚拟物理路径答:使用Mappath方法< p align="center" >< font size="4" face="Arial" >< b >The Physical path to this virtual website is:< /b >< /font >< font color="#FF0000" size="6" face="Arial" >< %= Server.MapPath("")% >< /font >< /p >2.我如何知道使用者所用的浏览器?答:使用the Request object方法strBrowser=Request.ServerVariables("HTTP_USER_AGENT")If Instr(strBrowser,"MSIE") < > 0 ThenResponse.redirect("ForMSIEOnly.htm")ElseResponse.redirect("ForAll.htm")End If3.如何计算每天的平均反复访问人数答:解决方法< % startdate=DateDiff("d",Now,"01/01/1990")if strdate< 0 then startdate=startdate*-1avgvpd=Int((usercnt)/startdate) % >显示结果< % response.write(avgvpd) % >that is it.this page have been viewed since November 10,19984.如何显示随机图象< % dim p,ppic,dpicppic=12randomizep=Int((ppic*rnd)+1)dpic="graphix/randompics/"&p&".gif"% >显示< img src="< %=dpic% >" >5.如何回到先前的页面答:< a href="< %=request.serverVariables("Http_REFERER")% >" >preivous page< /a > 或用图片如:< img src="arrowback.gif" alt="< %=request.serverVariables("HTTP_REFERER")% >" >6.如何确定对方的IP地址答:< %=Request.serverVariables("REMOTE_ADDR)% >7.如何链结到一副图片上答:< % @Languages=vbs cript % >< % response.expires=0strimagename="graphix/errors/erroriamge.gif"response.redirect(strimagename)% >8.强迫输入密码对话框答:把这句话放载页面的开头< % response.status="401 not Authorized"response.end% >9.如何传递变量从一页到另一页答:用 HIDDEN 类型来传递变量< % form method="post" action="mynextpage.asp" >< % for each item in request.form % >< input namee="< %=item% >" type="HIDDEN"value="< %=server.HTMLEncode(Request.form(item)) % >" >< % next % >< /form >10.为何我在 asp 程序内使用 msgbox,程序出错说没有权限答:由于 asp 是服务器运行的,如果可以在服务器显示一个对话框,那么你只好等有人按了确定之后,你的程序才能继续执行,而一般服务器不会有人守着,所以微软不得不禁止这个函数,并胡乱告诉你 (:) 呵呵) 没有权限。
ASP 操作数据库

15
Connection对象的常用方法
意义描述 建立一个与数据源的连接对象 关闭与数据源的连接,并且释放与连接有关 的系统资源
方法
Open
Close
Execute
执行SQL命令或存储过程,以实现与数据库 的通讯
16
Open方法: 建立一个与数据源的连接对象,打开与数据源 的连接其语法格式为: Conn.Open connectionstring, [UserId], [Password],[options]
30
第四步: 关闭数据库。
conn.close()
%>
31
Recordset对象
• 在使用connection对象打开数据库连接之后 ,接下来可以使用ADO对象模块提供的 recordset对象存取表的记录。 • 建立recordset对象实例的方法如下:
Set rs=server.createobject(“adodb.recordset")
4
2.利用IDC访问web数据库 IDC(Internet Database Connector):数据 库连接器,是Microsoft公司的web服务器 IIS所带的一个动态连接库,它通过ODBC接 口实现对各种数据库的访问。 说明:IDC仅支持Microsoft公司的web服务 器IIS,而不支持其他的web服务器。
19
Execute方法:执行SQL命令或存储过程, 以实现与数据库的通讯。其语法为: Conn.Execute Commandtext, [ReccordAffected], [Options] 其中:Rs为创建的Recordsed对象; Conn 为已经创建的Connection对象。
20
ASPNET中的数据库操作类sqlhelper及方法使用指南

要在VS2005中使用sqlhelper类,必须把Microsoft.ApplicationBlocks.Data.dll引用到项目中.1.通过存储过程查询的方法SqlHelper.ExecuteDataset(数据库连接字符, 存储过程字符, 参数数组);2.通过字符串查询的方法SqlHelper.ExecuteDataset(数据库连接字符, CommandType.Text , 查询字符串,参数数组);3.通过存储过程插入的方法SqlHelper.ExecuteScalar(数据库连接字符, 存储过程字符, 参数数组);4.通过字符串插入的方法SqlHelper.ExecuteScalar(数据库连接字符, CommandType.Text , 插入及刷新字符串,参数数组);5.通过存储过程刷新的方法SqlHelper.ExecuteNonQuery(数据库连接字符, 存储过程字符, 参数数组);6.通过字符串刷新的方法SqlHelper.ExecuteNonQuery(数据库连接字符, CommandType.Text , 刷新字符串,参数数组);运用实例??using System;using System.Data;using System.Data.SqlClient;using Microsoft.ApplicationBlocks.Data;using System.IO;namespace SK.VideoDAL{?/// <summary>?/// File 的摘要说明。
?/// </summary>?public class File?{/// <summary>/// 文件数据访问类/// </summary>public File(){//// TODO: 在此处添加构造函数逻辑//}/// <summary>/// 添加文件/// </summary>/// <param name="FileClassID">文件分类编号</param>/// <param name="SetCommend">推荐方式</param>/// <param name="SetTop">固顶方式</param>/// <param name="Name">文件名称</param>/// <param name="Intro">简介</param>/// <param name="FileSize">大小</param>/// <param name="Grade">评级</param>/// <param name="Keyword">关键字</param>/// <param name="PreviewUrl">预览图地址</param>/// <param name="MemberID">发布人ID</param>/// <param name="FileTypeID">文件类别编号</param>/// <param name="DownRequire">下载要求</param>/// <param name="NeedPoint">下载所需点数</param>/// <param name="Status">状态</param>public object Add(object FileClassID,object SetCommend,object SetTop,object Name,object Intro,object FileSize,object Grade,object Keyword,object PreviewUrl,object MemberID,object FileTypeID,object DownRequire,object NeedPoint,object Status,object Actor,object Level,object Region){SqlParameter[] oParms = new SqlParameter[17];oParms[0]=new SqlParameter("@FileClassID",FileClassID);oParms[1]=new SqlParameter("@SetCommend",SetCommend);oParms[2]=new SqlParameter("@SetTop",SetTop);oParms[3]=new SqlParameter("@Name",Name);oParms[4]=new SqlParameter("@Intro",Intro);oParms[5]=new SqlParameter("@FileSize",FileSize);oParms[6]=new SqlParameter("@Grade",Grade);oParms[7]=new SqlParameter("@Keyword",Keyword);oParms[8]=new SqlParameter("@PreviewUrl",PreviewUrl);oParms[9]=new SqlParameter("@MemberID",MemberID);oParms[10]=new SqlParameter("@FileTypeID",FileTypeID);oParms[11]=new SqlParameter("@DownRequire",DownRequire);oParms[12]=new SqlParameter("@NeedPoint",NeedPoint);oParms[13]=new SqlParameter("@Status",Status);oParms[14]=new SqlParameter("@Actor",Actor);oParms[15]=new SqlParameter("@Level",Level);oParms[16]=new SqlParameter("@Region",Region);return SqlHelper.ExecuteScalar(Data.ConnString, CommandType.Text ,"INSERT INTO [File] ( [FileClassID], SetCommend,SetTop,[Name],[Intro], [FileSize], [Grade], [Keyword], [PreviewUrl], MemberID,FileTypeID,[CreateTime], [UpdateTime],Downloads,Hits,DownRequire,NeedPoint,Status,Actor,[Level],Region) VALUES(@FileClassID,@SetCommend,@SetTop,@Name,@Intro,@FileSize,@Grade, @Keyword,@PreviewUrl,@MemberID,@FileTypeID,getdate(),getdate(),0,0,@DownRe quire,@NeedPoint,@Status,@Actor,@Level,@Region); select @@IDENTITY", oParms);}/// <summary>/// 更新指定的文件信息/// </summary>/// <param name="FileID">文件编号</param>/// <param name="FileTypeID">文件类别编号</param>/// <param name="FileClassID">文件分类编号</param>/// <param name="SetCommend">推荐方式</param>/// <param name="SetTop">固顶方式</param>/// <param name="Name">文件名称</param>/// <param name="Intro">简介</param>/// <param name="FileSize">大小</param>/// <param name="Grade">评级</param>/// <param name="Keyword">关键字</param>/// <param name="PreviewUrl">预览图地址</param>/// <param name="DownRequire">下载要求</param>/// <param name="NeedPoint">下载所需点数</param>/// <param name="Status">状态</param>public void Update(object FileID,object FileTypeID,object FileClassID,object SetCommend,object SetTop,object Name,object Intro,object FileSize,object Grade,object Keyword,object PreviewUrl, object DownRequire,object NeedPoint,object Status,object Actor,object Level,object Region){SqlParameter[] oParms = new SqlParameter[17];oParms[0]=new SqlParameter("@FileID",FileID);oParms[1]=new SqlParameter("@FileTypeID",FileTypeID);oParms[2]=new SqlParameter("@FileClassID",FileClassID);oParms[3]=new SqlParameter("@SetCommend",SetCommend);oParms[4]=new SqlParameter("@SetTop",SetTop);oParms[5]=new SqlParameter("@Name",Name);oParms[6]=new SqlParameter("@Intro",Intro);oParms[7]=new SqlParameter("@FileSize",FileSize);oParms[8]=new SqlParameter("@Grade",Grade);oParms[9]=new SqlParameter("@Keyword",Keyword);oParms[10]=new SqlParameter("@PreviewUrl",PreviewUrl);oParms[11]=new SqlParameter("@DownRequire",DownRequire);oParms[12]=new SqlParameter("@NeedPoint",NeedPoint);oParms[13]=new SqlParameter("@Status",Status);oParms[14]=new SqlParameter("@Actor",Actor);oParms[15]=new SqlParameter("@Level",Level);oParms[16]=new SqlParameter("@Region",Region);SqlHelper.ExecuteNonQuery(Data.ConnString, CommandType.Text," update [File] set FileTypeID=@FileTypeID,FileClassID=@FileClassID,SetCommend=@SetCommend,Se tTop=@SetTop,[Name]=@Name,Intro=@Intro,FileSize=@FileSize,Grade=@Grade,Key word=@Keyword,PreviewUrl=@PreviewUrl,UpdateTime=getdate(),DownRequire=@。
ASP对数据库的操作

ASP对数据库的操作ASP(Active Server Pages)是一种用于创建动态网页的编程技术,它可以通过与数据库进行交互来动态地显示、检索、更新和删除数据。
在下面的文章中,将介绍ASP对数据库的操作的一些常见技术和方法。
一、数据库连接在ASP中,连接到数据库是第一步。
可以使用以下步骤进行数据库连接:1. 引用ADO库:ADO(ActiveX Data Objects)是一种用于访问数据库的COM组件。
因此,首先需要在ASP页面的开头引用ADO库,例如:```asp<!--#include virtual="/adovbs.inc"-->```2. 创建Connection对象:使用以下代码创建一个Connection对象:```aspDim connSet conn = Server.CreateObject("ADODB.Connection")```3. 打开数据库连接:使用Open方法打开数据库连接,并指定数据库驱动程序和连接字符串,例如:```aspconn.Open "DRIVER={SQLServer};SERVER=server_name;DATABASE=db_name;UID=user_name;PWD=pa ssword;"```二、查询数据一般来说,查询数据是ASP对数据库进行的最常见的操作之一、可以使用以下步骤查询数据库:1. 创建Recordset对象:使用以下代码创建一个Recordset对象:```aspDim rsSet rs = Server.CreateObject("ADODB.Recordset")```2. 执行SQL语句:使用Open方法执行SQL语句,并使用Recordset 对象接收返回的数据,例如:```asprs.Open "SELECT * FROM table_name", conn```3. 读取数据:使用MoveNext和EOF方法循环读取Recordset对象的数据,例如:```aspDo While Not rs.EOFResponse.Write rs("column_name")rs.MoveNextLoop```4. 关闭Recordset对象:使用Close方法关闭Recordset对象,例如:```asprs.CloseSet rs = Nothing```三、插入数据除了查询数据,ASP还可以向数据库中插入数据。
ASP.NET中数据库操作通用类的分析与实现

4 实现数据库 操作通 用类的 分析
41 . 数据 库常用操作具体分析
在 WE B项 目中经常会对数据库进行各种操作 ,经过分
据源必须采 用相应的协议 。一 些老 式的数据源使用 O B DC 协议 ,许多新 的数据源使 用 Oe l Db协议 ,并且现在还不断 出现 更 多 的 数 据 源 ,这 些 数 据 源 都 可 以通 过 . T 的 E N
收 稿 日期 :2 1 -0 -2 00 3 5
作者简介:杨环俊 (90 ) ,湖北十堰人 ,中南大 18 - 男
学信息科学与工程学 院模式识别与智能系统在职硕士研究
生。
7 4
以上只是简单分析 了数据库常用操作 , 在后两种操作 当中可
以继续分为带参数和不带参数两种情况 ,情况更为复杂。
关键字 :A R E ; S N T面向对 象; 可重用性; 数据库; 类
中图 分类 号 :T 32 P 9 文 献 标识 码 :A 文 章编 号 : 17 - 2 9 (0 O 8 0 7— 2 6 32 1 2 1 )0 — 0 4 0 语言上的程式构架 ,能被 PN T
人 员提供了快速 的开发手段 , 但又不牺 牲 C + + 语言的特点和
的新一代 的 We b开发平台 ,它为开发人员提供了一个统一
的生成企业级 We b应用程序 所需要的服务 、编程模型和软
件基础结构 。
优势 。从继承性来讲 ,c 机吾言在更高层次上重新实现了 C 和 C+ + 语言 。从语法形式和易用性来讲,C 言几乎综合 懵
第3 卷 第8 1 期
21 年 8 00 月
湖南科技学院学报
J u n l f n n Unv ri f ce c n n i e rn o r a o Hu a i est o i n ea dE g n e i g y S
aspnet教程

aspnet教程
是一种用于构建 Web 应用程序的开发框架。
它是由微软公司开发的一种服务器端技术,可用于构建动态的、可扩展的和高性能的 Web 应用程序。
提供了一个强大的编程模型和丰富的工具集,可简化 Web 开发过程。
它使用了一种叫做 Web Forms 的模式,该模式基于事件驱动的编程模型,允许开发者通过拖放控件来快速构建用户界面。
还支持一个称为 MVC 的模式,这是一种轻量级的模式,可以更好地控制页面的呈现和行为,使开发者具有更高的灵活性和可定制性。
除了 MVC, 还提供了一种称为 Web API 的模式,
它是一种用于构建 RESTful Web 服务的框架,支持使用 HTTP 提供数据和服务。
对于 的开发,开发者通常使用 C# 或 作为编程语言。
这些语言都是强类型的,并且具有现代化的语法和丰富的类库,使开发者能够更快速和高效地构建应用程序。
还提供了一系列的控件和组件,使开发者能够方便地处理用户输入、验证数据、访问数据库等常见任务。
此外,它还支持使用其他工具和技术,如 Entity Framework、LINQ、SignalR 等,以满足特定的需求。
总的来说, 是一个强大且灵活的框架,可用于构建各种规模和复杂度的 Web 应用程序。
无论是小型网站还是大型企业级应用程序, 都是一个理想的选择。
vs2010使用aspnet数据库配置

安装SQL Server Management Studio由于VS2010自带的SQL Server 2008是Express版,安装VS2010并不会同時安装SQL Server Management Studio,所以不能向其直接新增SQL Server Management Studio,解決方案如下[2]:先决条件:1、SQLManagementStudio_x86_CHT.exe 另有x64版本以下两项为Windows XP系统的先决条件:WindowsXP-KB926140-v2-x86-CHT.exe (PowerShell1.0)系统安装有.Net FrameWork3.5 SP12、升级现有Express(单击windows开始→Microsoft SQL Server 2008→配置工具→SQL Server安装中心)维护→版本升级 选Express with Advanced service3、现在安装SQLManagementStudio_x86_CHT.exe 它就可以成功新增SQL Server Management Studio了。
执行SQLManagementStudio_x86_CHT.exe 安装→新的SQL Server独立安装或将功能加入到现有安装→将功能加入现有的执行个体Express→特征选取,选则管理工具-基本。
SQL Server 与连接配置SQL Server 2008默认是不允许远程连接的,sa账户默认禁用的,如果想要在本地用SSMS连接远程服务器上的SQL Server 2008,需要做两个部分的配置[3]:1、SQL Server Management Studio Express(简写SSMS)2、SQL Server 配置管理器/SQL Server Configuration Manager(简写SSCM)步骤为:step 1:打开SSMS,用windows身份连接数据库,登录后,右键选择“属性”。
ASPNET数据库基本操作

OLE DB .NET 数据提供程序
对应OLE DB .NET的4个核心对象分别是: OleDbConnection、OleDbCommand、 OleDbDataReader和OleDbDataAdapter。 这4个对象包含在System.Data.OleDb命 名空间中,需要将这个命名空间引入到文 件中。
使用Connection对象的构造函数
案例名称:使用Connection对象的构造函数 程序名称:6-02.aspx
<% @ Page Language="C#" %> <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.OleDb" %> <script language="C#" runat="server"> void Page_Load(Object sender, EventArgs e) {
OleDbConnection Conn=new OleDbConnection(); Conn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;"+
"Data Source="+Server.MapPath("person.mdb"); Conn.Open(); Message.Text=Conn.State.ToString(); Conn.Close(); } </script> <asp:Label id="Message" runat="server" />
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
是对Microsoft ActiveX Data Objects (ADO)一个跨时代的改进,它提供了平台互用性和可伸缩的数据访问。
由于传送的数据都是XML格式的,因此任何能够读取XML格式的应用程序都可以进行数据处理。
事实上,接受数据的组件不一定要是ADO .NET组件,它可以是基于一个Microsoft Visual Studio的解决方案,也可以是任何运行在其它平台上的任何应用程序。
以前做数据库访问的时候,需要一直与数据库保持连接,直到获取完所有满足需要的数据之后才会断开数据库连接,这种数据库访问方式称之为连接式数据访问技术。
相比于以前的连接式数据访问技术,除了提供连接式数据访问技术之外,还提供了另一种断开式解决方案,那就是在内存中模拟一个数据库,也就是内存中的数据库。
我们知道在实际的数据库技术中,每个数据库就是一个业务逻辑单元,一般来说这个数据库包含了实现一个应用软件或者一个网站所需要的全部数据。
在这里数据库就是顶级对象,我们引用创建数据库时所用到的名词database来表示(因为创建数据库的SQL语句是create database),在一个数据库里可以包含有多个表(table)和视图(view),除此之外还可以包含有一些外键关系等。
在一个表(table)或者视图(view)里可以包含多个列(column)和行(row)。
在中对上面提到的对象都在内存中进行了模拟,在内存中的数据库对象称之为DataSet,一个内存中的数据库(DataSet)可以包含多个在内存中的表(DataTable)和内存中的视图(DataView),并且也允许在表存在一些关系(DataRelation)。
同时在一个内存中的表(DataTable)或者内存中的视图(DataView)中也允许存在行(DataRow)和列(DataColumn)。
物理数据库与内存数据库之间的各对象的对应关系如下:在上图中颜色相同的表示二者基本上是一种对应关系。
在本篇将讲述6个中的常用对象:Connection对象Command对象DataReader对象DataAdapter对象DataSet对象DataTable对象DataRow对象DataColumn对象参数化SQL语句分页查询SQL语句严格地说,在.net类库中并没有Connection、Command、DataAdapter和DataReader对象的,这是对相关的对象做了一个抽象。
在实际的开发中,我们经常用到的数据库有Access、SQL Server、Oracle、MySQL等,尽管大部分都遵循SQL国际化标准,但是它们在遵循标准的前提下又做了一些扩充,并且即使遵循了相同的标准,但是实现方法并不相同,所以在某些情况下实现相同的功能可能在不同的数据库中SQL语句并不相同。
于是,在也定义了一套用于访问数据库的标准,当然这个标准是以接口(interface)的形式提供的,各数据库厂商只要实现了这个接口就能在下正常工作(这也是接口的作用,接口就是用于指定规范,自己本身并不实现,在Java中针对数据库访问也有一套接口留待各数据库来实现)。
当然在.net类库中微软已经提供对Access、SQL Server和Oracle数据库对上面提到的接口的实现。
在中定义的这一套接口是IDbConnection、IDbCommand、IDbDataAdapter和IDataReader,并且还有一套实现这些接口的抽象类,分别是DbConnection、DbCommand、DbDataAdapter和DataReader。
上图最上面的是数据库访问接口,紧接着的是数据库访问抽象类,下面是针对不同数据库中实现这些接口的类,并且在括号中注明了其所在的命名空间,比如针对MySQL数据的数据库访问类就位于MySql.Data.MySqlClient命名空间下,关于MySql的数据库访问类需要到MySql数据库的官方网站去下载,它的官方网站是。
其它的数据库访问类都在.net类库中自带了。
注意:访问SQL Server7.0以下版本的SQL Server数据库时需要用System.Data.OleDb命名空间下一套数据库访问类,虽然这一套数据库访问类同样也能访问SQL Server2000以上版本,但是没有办法利用SQL Server数据库的一些新特性,所以不建议使用System.Data.OleDb命名空间下的类访问SQL Server2000以上的版本。
在本篇的讲述中,针对SQL Server数据库讲述Connection、Command、DataAdapter和DataReader对象的用法,它们在其它数据库中也有对应的类,除了有些SQL语句语法不一样之外,用法是基本一样的。
Connection对象Connection对象也称为数据库连接对象,Connection对象的功能是负责对数据源的连接。
所有Connection对象的基类都是DbConnection类。
Connection对象有两个重要属性:ConnectionString:表示用于打开 SQL Server 数据库的字符串;State:表示 Connection 的状态,有Closed和Open两种状态。
Connection对象有两个重要方法:Open()方法:指示打开数据库;Close()方法:指示关闭数据库。
在实际开发中很多朋友经常询问数据库连接字符串该怎么写,其实有一个很简单的技巧,我们可以在Visual Studio 2005工具箱中找到数据分组,如下图:打开或新建一个页面,在设计视图下双击SqlDataSource控件就会添加一个SqlDataSource到当前页面,如下图:当我们用鼠标单击SqlDataSouce控件时会出现一个小三角箭头,如上图所示,当我们点击这个三角箭头时会出现如下图所示的界面:点击“配置数据源”时会出现下面的界面:点“新建连接”后出现如下界面:在这个界面中默认是连接到SQL Server数据库,其实我们还可以利用这个向导连接到其它数据库的,我们点击“数据源”旁边的“更改”按钮出现如下图所示的界面:从上面的界面中我们可以看出可以利用这个连接向导配置连接到Access数据库文件、ODBC数据源、SQL Server数据库、SQLServer手机版数据库、SQL Server数据库文件、Oracle数据库文件及其它数据库。
在这里我们选择Microsoft SQL Server选项,连接到SQL Server数据库。
如果我们在局域网中,我们可以点击“添加连接”界面中的刷新按钮来查看局域网中有哪些SQL Server数据库可以连接。
连接到数据库可以用下面的方式:(1)如果要连接的数据库服务器与开发者的机器在同一个局域网里,可以使用局域网IP地址或者局域网中的电脑主机名;(2)如果要连接的数据库服务器与开发者的机器不在同一个局域网内,那么就要求数据库服务器必须有一个公网IP,我们可以使用公网IP来连接,如果数据库服务器还有互联网域名,那么用互联网域名也是可以的。
(3)如果要连接的数据库服务器与开发者所使用的机器是同一台机器,那么可以使用以下几种方式之一:”(local)”或者”.”或者”127.0.0.1”。
需要注意的是,如果在一台机器上运行者同一种数据库的不同版本,比如说在”administrator”这台主机上同时运行着SQL 2000、SQL 2005和SQL Express三种版本,并且它们所使用的Windows服务名分别为”SQL2000”、”SQL2005”和”SQLExpress”,那么我们要连接到SQL 2000这个数据库上所使用的服务器名就应该填写”zhoufoxcn/SQL2000”这种“主机名/实例名”的方式或者“主机IP/实例名”,这种情况在同时安装了Visual Studio 2005和SQL 2005的朋友那里很常见,因为SQL Express是针对学生的功能有限的免费版本,这个版本的数据库在安装Visual Studio 2005时默认是一同安装的。
在上面的“添加连接”窗口,我们分别填写如下信息:在上面我们连接的是本机上的数据库,所使用的数据库帐号是sa,访问的数据库是AspNetStudy,创建这个数据的SQL脚本如下:1.1.IF EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name = N'AspNetStudy')2.3.DROP DATABASE [AspNetStudy]4.5.GO6.7.CREATE DATABASE [AspNetStudy] ON (NAME = N'AspNetStudy_Data', FILENAME = N'C:/Program Files/Microsoft SQL Server/MSSQL/data/AspNetStudy_Data.MDF' , SIZE = 1, F ILEGROWTH = 10%) LOG ON (NAME = N'AspNetStudy_Lo g', FILENAME = N'C:/Program Files/Microsoft SQL Server/ MSSQL/data/AspNetStudy_Log.LDF' , SIZE = 1, FILEGROWTH = 10%)8.9.COLLATE Chinese_PRC_CI_AS10.11.GO12.e [AspNetStudy]14.15.GO16.17.if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[UserInfo]') and OBJECTPROPERTY(id, N'IsUserTabl e') = 1)18.19.drop table [dbo].[UserInfo]20.21.GO22.23.CREATE TABLE [dbo].[UserInfo] (24.25. [UserID] [int] IDENTITY (1, 1) NOT NULL ,26.27. [UserName] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,28.29. [RealName] [nvarchar] (8) COLLATE Chinese_PRC_CI_AS NOT NULL ,30.31. [Age] [tinyint] NOT NULL ,32.33. [Sex] [bit] NOT NULL ,34.35. [Mobile] [char] (11) COLLATE Chinese_PRC_CI_AS NULL ,36.37. [Phone] [char] (11) COLLATE Chinese_PRC_CI_AS NULL ,38.39. [Email] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL40.41.) ON [PRIMARY]42.43.GO44.45.CREATE UNIQUE INDEX [IX_UserName] ON [dbo].[UserInfo]([UserName]) WITH IGNORE_DUP_KEY ON [PRIMARY]46.47.GO48.],[Phone],[Email],[Sex])values('zhangfei','张飞',36,'1300000','000000','zhangfei',1);50.51.insert into UserInfo([UserName],[RealName],[Age],[Mobile],[Phone],[Email],[Sex])values('guanyu','关羽',38,'1300000','0000000','guanyu',1);52.53.insert into UserInfo([UserName],[RealName],[Age],[Mobile],[Phone],[Email],[Sex])values('liubei','刘备',42,'111111111','111111','liubei',1);54.55.insert into UserInfo([UserName],[RealName],[Age],[Mobile],[Phone],[Email],[Sex])values('zhougong','周公',29,'111111111','1111111','zhoufoxcn',1);56.57.insert into UserInfo([UserName],[RealName],[Age],[Mobile],[Phone],[Email],[Sex])values('zhaoyun','赵云',32,'111111111','1111111','zhaoyun',1);58.59.insert into UserInfo([UserName],[RealName],[Age],[Mobile],[Phone],[Email],[Sex])values('huanggai','黄盖',50,'111111111','1111111','huanggai',1);60.61.insert into UserInfo([UserName],[RealName],[Age],[Mobile],[Phone],[Email],[Sex])values('zhugeliang','诸葛亮',27,'111111111','1111111','zhugeliang',1);62.],[Phone],[Email],[Sex])values('jiangwei','姜维',22,'111111111','1111111','jiangwei1',1);64.65.insert into UserInfo([UserName],[RealName],[Age],[Mobile],[Phone],[Email],[Sex])values('caocao','曹操',48,'111111111','1111111','caocao1',1);66.67.insert into UserInfo([UserName],[RealName],[Age],[Mobile],[Phone],[Email],[Sex])values('guojia','郭嘉',32,'111111111','1111111','guojia1',1);68.69.insert into UserInfo([UserName],[RealName],[Age],[Mobile],[Phone],[Email],[Sex])values('sunquan','孙权',33,'111111111','1111111','sunquan1',1);70.71.insert into UserInfo([UserName],[RealName],[Age],[Mobile],[Phone],[Email],[Sex])values('diaochan','貂禅',20,'111111111','1111111','diaochan1',0);72.73.insert into UserInfo([UserName],[RealName],[Age],[Mobile],[Phone],[Email],[Sex])values('yangyuhuan','杨玉环',24,'111111111','1111111','yangyuhuang1',0);74.75.insert into UserInfo([UserName],[RealName],[Age],[Mobile],[Phone],[Email],[Sex])values('wangzhaojun','王昭君',26,'111111111','1111111','wangzhaojun1',0);76.77.go78.我们可以点击一下“测试连接”按钮,如果弹出连接成功的提示消息就表示这个数据库连接是可用的。