ASP.NET(VB.NET)学习笔记--第六章.访问数据库(1/3)

来源:互联网 发布:趣行天下北京网络 编辑:程序博客网 时间:2024/05/16 10:06
第六章.访问数据库
一.ADO.NET的结构

 

 

二.ADO.NET的使用
    .NET Framwork提供的常用代码命名空间

 

命名空间名称
说明
System.Data
ADO.NET基本对象和类型
System.Data.SQLClient
SQL Server提供的管理对象
System.Data.OleDB
OLEDB Provider提供的管理对象

 

三.连接数据库 Connection
    1.连接参数:
    (1).语法:
        Dim MySqlConnection As New SqlConnection([ConnectionString])
        Dim MyOleDbConnection As New OleDbConnection([ConnectionString])
(2).OLE DB接连
        Provider:设置数据源的OLE DB驱动程序。Access为”Microsoft.Jet.OLEDB.4.0”,SQL Server6.5或之前版本为”SQLOLEDB”,Oracle为”MSDAORA”
        Data Source:设置数据源的实际路径
        Password:设置登陆数据库时所用的密码
        User ID:设置登陆数据库时所用的账号
    (3).SQL连接
        Data Source:连接的数据库服务器名
        Initial Catalog:连接的数据库名称
        Integrated Security:服务器的安全性设置,值有True,False和SSPI三种,True和SSPI都表示使用信任连接
        Worksation Id:数据库客户端标识,默认为客户端计算机名
        Packet Size:与SQL Server通信的网络数据包的大小,单位为字节,有效值为512-32767,默认值为8192
        Password(Pwd):设置登陆SQL Server时所用的密码
        User ID:设置登陆SQL Server时所用的账号
        Connection Timeout:SqlConnection 对象连接SQL数据库服务器的超时时间,单位为秒。若在设置的时间内无法连接数据库,则返回失败,默认为15秒
(4).注意
如果要使用DSN,则可通过OleDbConnection类来打开数据库连接:
        StuConnectio=New OleDbConnection(“DSN=StuDSN”)
    2.Connection对象的常用属性

 

属性
说明
ConnectionString
连接字符串
ConnectionTimeout
Connection对象的超时时间,单位为秒。即若在这个时间之内Connection对象无法连接数据源,则返回失败。为0表示不限制
Database
当前数据库名称,默认为Nothing
DataSource
数据源的完整路径及文件名,若是SQL Serve数据库则获取所连接的SQL Server服务器名称
PacketSize
SQL Server通信的网络数据包的大小,单位为字节,默认为8192。此属性只有SQL Server数据库才可使用
Provider
OLE DB提供程序的名称。此属性只有OLE DB数据源才可使用
Server Version
数据库驱动程序的版本
State
数据库的连接状态,1表示联机,0表示关闭
WorkstationId
数据库客户端标识,默认为客户端计算机名。此属只适用于SQL Server数据库

 

    3.Connection对象的常用方法

 

方法
说明
Open()
打开与数据库的连接。注意,ConnectionString属性只对连接属性进行设置,并不打开与数据库的连接,必须使用Open()方法打开连接
Close()
关闭数据库连接
ChangeDatabase()
在打开连接的状态下,更改当前数据库
CreateCommand()
创建并返回与Connection对象有关的Command对象
Dispose()
调用Close()方法关闭与数据库的连接,并释放所占用的系统资源

 

    4.Connection对象的事件
        InfoMessage:在.NET数据提供程序发送警告或信息时触发该事件
        StateChange:当数据连接状态改变时,即调用Open()或Close()方法,触发该事件。
                该事件的参数为StateChangeEventArgs,有二种取值:
(1)CurrentState:Connection对象连接的新状态,1表示联机,0表示关闭;
(2)OriginState:Connection对象连接的原始状态,1表示联机,0表示关闭
5.            创建Connection链接对象
(1).打开与Access数据库的连接
<%@Import namespace="System.Data"%>
<%@Import namespace="System.Data.OleDb"%>
<script language="vb" runat="server">
sub Page_Load(Sender as Object,e As EventArgs)
       dim conn as new oledbconnection()
       conn.connectionstring="provider=microsoft.jet.oledb.4.0;data source="+server.mappath("cbw.mdb")
       conn.open()
       conn.close()        ‘关闭连接
end sub
</script>
(2).打开与SQL Server 2000数据库的连接
<%@Import namespace="System.Data"%>
<%@Import namespace="System.Data.SqlClient"%>
<script language="vb" runat="server">
sub Page_Load(Sender as Object,e As EventArgs)
Dim myConnection As SqlConnection
myConnection=New SqlConnection("server=7BB2389B11EA496;uid=sa;database=cbw")
myConnection.Open()
conn.close()        ‘关闭连接
end sub
</script>
(3).针对不同的编程接口建立数据库连接
    <%@Import namespace=”System.Data”%>
    <%@Import namespace=”System.Data.SQLclient”%>
    <%@Import namespace=”System.Data.OleDb”%>
    <html>
    <script language=”vb” runat=server>
Sub Page_Load(Source as Object,E as EventArgs)
Dim oleconnection as oledbConnection                                                   ‘********
Dim oleconnstr as String                                                               ‘********
Dim sqlconnection as sqlConnection
Dim sqlconnstr as String
Oleconnstr=”provider=SQLOLEDB;datasource=数据源名称;database=数据库名称;user id=用户名(sa)”   ‘********
Oleconnection=new oledbConnection(oleconnstr)                                              ‘********
‘********四行可以改写为:Dim oleconnection as new oledbconnection(“provider=SQLOLEDB;datasource=数据源名称;database=数据库名称;user id=用户名(sa)”)
Sqlconnstr=”server=SQL服务器名称;uid=用户名(sa);pwd=密码(空);database=数据库名称
Sqlconnection=new sqlConnection(sqlconnstr)
Labcontent.Text=”成功建立连接”
Oleconnection=nothing
Sqlconnection=nothing
End Sub
</script>
<body>
<form runat=server>
   <asp:label id=labcontent runat=server/><br>
</form>
</body>
</html>
.访问数据库
1.基于Command对象,用DataReader对象访问数据库
I.Command对象
1).语法:
    Dim MySqlCommand As New SqlCommand([cmdText,connection])
    Dim MyOleDbCommand As New OleDbCommand([cmdText,connection])
2). Command对象的常用属性

 

属性
说明
CommandText
要对数据源执行的SQL命令、存储过程或数据表名
CommandTimeout
Command对象的超时时间,单位为秒。默认为30秒,即若在这个时间之内Command对象无法执行SQL命令,则返回失败,为0表示不限制
CommandType
命令类型,可取的值:StoredProcedure,TableDirect,Text,代表的含义分别为:存储过程、数据表名和SQL语句,默认为Text。属性的值可表示为CommandType.StoredProcedure、CommandType. TableDirect、CommandType.Text等,也可以用相应的数字表示
Connection
Command对象所使用的数据连接属性
Parameters
SQL命令参数集合

 

    3). Command对象的常用方法

 

方法
说明
Cancel()
取消Command对象的执行
CreateParameter
创建Parameter对象
ExecuteNonQuery()
执行CommandText属性指定的内容,返回数据表被影响的行数。只有Update、Insert和Delete命令会影响行数。该方法用于执行对数据库的更新操作。
一般用于不需要返回值的操作。如Update、Insert、Delete操作。
ExecuteReader()
执行CommandText属性指定的内容,返回DataReader对象
一般用于需要返回值的操作。如Select操作。
ExecuteScalar()
执行CommandText属性指定的内容,返回结果表第一行第一列的值。该方法只能执行Select命令
ExecuteXmlReader()
执行CommandText属性指定的内容,返回XmlReader对象。只有SQL Server才能用此方法

 

    4).
    例1.
        Dim cmd As New OleDbCommand()
        cmd.CommandText=”students”
        cmd.CommandType=Command.TableDirect
        cmd.Connection=conn
    例2.
        ……
        Dim sqlstr as string=”Update students set age=age+10 where id=2”
        Dim cmd As New OleDbCommand(sqlstr,conn)            ‘创建Command对象
        cmd.ExecuteNonQuery()                           ‘执行CommandText命令
        conn.Close()
        ……
3:使用不同的接口删除记录
<%@Import namespace=”System.Data”%>
    <%@Import namespace=”System.Data.SQLclient”%>
    <%@Import namespace=”System.Data.OleDb”%>
    <html>
    <script language=”vb” runat=server>
Sub Page_Load(Source as Object,E as EventArgs)
Dim oleconnection as New oledbConnection(“provider=SQLOLEDB;datasource=数据源名称;database=数据库名称;user id=用户名(sa)”)
Dim olecommand as New oledbCommand
Dim sqlconnection as New sqlConnection(“server= SQL服务器名称;uid=用户名(sa);pwd=密码(空);database=数据库名称”)
Dim sqlcommand as new sqlcommand
Oleconnection.Open
Olecommand.Connection=oleconnection
Olecommand.CommandText=”delete from 表名 where 条件
Olecommand.ExecuteNonQuery
Olecommand=nothing
Oleconnection.Close
Oleconnection=nothing
Sqlconnection.Open
Sqlcommand.Connection=sqlconnection
Sqlcommand.CommandText=” delete from 表名 where 条件”
Sqlcommand.ExecuteNonQuery
Sqlcommand=nothing
Sqlconnection.Close
Sqlconnection=nothing
Labcontent.Text=”删除成功”
End Sub
</script>
<body>
<form runat=server>
   <asp:label id=labcontext runat=server/><br>
</form>
</body>
</html>
II.DataReader对象
        说明:该对象只能读取数据,不能写入数据,并且只能顺序读取数据,即将数据表中的行从头至尾依次顺序读出。
1).语法:
    Dim objReader as OleDbDataReader
 2). DataReader对象的常用属性

 

属性
说明
FieldCount
DataReader对象包含的记录行数(也就是返回的数据字段数)
IsClosed
DataReader对象的状态,为True表示关闭
Item({name,col})
表字段值。Name为字段名;col为列序号,序号从0开始。例如:objReader.Item(0),objReader.Item(“name”)
RecordsAffected
在执行Insert、Update或Delete命令后影响的行数。该属性只有在读取完所有行且DataReader对象关闭后才会被设定

 

3). DataReader对象的常用方法

 

方法
说明
Close()
关闭DataReader对象
GetBoolean(Col)
获取序号为Col的列的值,所获取列的数据类型必须为Boolean类型;其他类似的方法还有:GetByte,GetChar,GetDateTime,getDecimal,GetDouble,
GetFloat,GetInt16,GetInt32,GetInt64,GetString等
GetDataTypeName(Col)
获取序号为Col的列的来源数据类型名
GetFieldType(Col)
获取序号为Col的列的数据类型
GetName(Col)
获取序号为Col的列的字段名
GetOrdinal(Name)
获取字段名为Name的列序号
GetValue(Col)
获取序号为Col的列的值
GetValues(values)
获取所有字段的值,并将字段值存放在values数组中
IsDBNull(Col)
若序号为Col的列为空值,则返回True,否则返回False
Read()
读取下一条记录,返回布尔值。返回True表示有下一条记录,返回False表示没有下一条

 

III.基于Command对象,用DataReader对象查询数据
<%@Import namespace="System.Data"%>
<%@Import namespace="System.Data.OleDb"%>
<%@ Page Language="vb" Debug="true" %>
<script language="vb" runat="server">
sub Page_Load(Sender as Object,e As EventArgs)
if not ispostback then
     dim conn as new oledbconnection()
     dim cmd as new oledbcommand()
     dim objreader as oledbdatareader
     dim i as integer
     conn.connectionstring="provider=microsoft.jet.oledb.4.0;data source="+server.mappath("cbw.mdb")
     conn.open()
     cmd.connection=conn
     cmd.commandtext="select * from message"
     objreader=cmd.ExecuteReader()                   ‘执行CommandText命令,并返回给objreader
     response.write("留言表")
     response.write("<table><tr>")
     for i=0 to objreader.FieldCount-1                           ‘循环显示所有字段名
         response.write("<td>"+objreader.GetName(i)+"</td>")         ‘显示字段名
     next
     while objreader.read()                                      ‘循环显示所有记录
         response.write("<tr>")
         for i=0 to objreader.fieldcount-1                       ‘循环显示当前记录的所有字段信息
             response.write("<td>")
             response.write(objreader.GetValue(i))
             response.write("</td>")
         next
         response.write("</tr>")
     end while
     response.write("</table>")
     objreader.close()
     conn.close()
end if
end sub
</script>
IV.把DataReader绑定到DataGrid对象上    同理可以绑定到Repeater及DataList对象上
<%@Import namespace="System.Data"%>
<%@Import namespace="System.Data.OleDb"%>
<%@ Page Language="vb" Debug="true" %>
<script language="vb" runat="server">
sub Page_Load(Sender as Object,e As EventArgs)
   if not ispostback then
       dim conn as new oledbconnection()
       dim cmd as new oledbcommand()
       dim objreader as oledbdatareader
       dim i as integer
       conn.connectionstring="provider=microsoft.jet.oledb.4.0;data source="+server.mappath("cbw.mdb")
       conn.open()
       cmd.connection=conn
       cmd.commandtext="select * from message"
       objreader=cmd.ExecuteReader()                   ‘执行CommandText命令,并返回给objreader
       MyDataGrid.DataSource=objreader
       MyDataGrid.DataBind
       objreader.close()
       conn.close()
   end if
end sub
</script>
<form runat=server >
<asp:DataGrid id="MyDataGrid" runat=server/>
</form>
IV. 用DataReader对象查询数据
<%@Import namespace=”System.Data”%>
     <%@Import namespace=”System.Data.OleDb”%>
    <html>
    <script language=”vb” runat=server>
Sub Page_Load(Source as Object,E as EventArgs)
Dim oleconnection as New oledbConnection(“provider=SQLOLEDB; database=数据库名称;user id=用户名(sa)”)
Dim olecommand as New oledbCommand
Dim oledatareader as oledbDatareader
Oleconnection.Open
Olecommand.Connection=oleconnection
Olecommand.CommandText=”select * from student
Oledatareader=olecommand.ExecuteReader
While oledatareader.Read
   Labcontent.Text=labcontent.Text&oledatareader.GetString(“0”)&”<br>”     获取字符类型字段
   Labcontent.Text=labcontent.Text&oledatareader.GetString(“1”)&”<br>”
   Labcontent.Text=labcontent.Text&oledatareader.GetInt32(“2”)&”<br>”      获取整数类型字段
   Labcontent.Text=labcontent.Text&oledatareader.Item(“address”)&”<br>”        使用字段名获取
End While
Olecommand=nothing
Oleconnection.Close
Oleconnection=nothing
Labcontent.Text= Labcontent.Text&”查找成功”
End Sub
</script>
<body>
<form runat=server>
   <asp:label id=labcontext runat=server/><br>
</form>
</body>
</html>
注:
.GetString :获取字符类型字段
.GetInt32 :获取整数类型字段
.GetBoolean    :获得布尔类型的数据
.GetDateTime:获得时间类型的数据
.GetFloat :获得浮点类型数据
.GetName   :获得字段的名字
原创粉丝点击