[原创]从ASP到ASP.Net-风的学习手记(一)
文章标题:[
原创]从ASP到ASP.Net-风的学习手记(一)顶部 勇敢的风 发布于:2007-05-2318:01 [楼主][原创]从ASP到ASP.Net-风的学习手记(一)
文章作者:勇敢的风[E.S.T顾问团]fengblog
信息来源:邪恶八进制信息安全团队(eviloctal)
近Ri与坏坏和老龙准备共同创作一个站点,在写计划书时一直考虑是否要使用.Net来写,最后考虑到多方面的原因决定用.Net来写。在此之前除了熟悉ASP外对.Net几乎一无所知,那么就要从0开始,于是下载了MSND和VS.Net,下决心开始
学习.Net。
声明:这篇文章所写的内容只是近一个星期以来对.Net的一个学习总结或者叫学习备注,文中的内容纯属一个新人的对.Net的理解,因此谈不上教程。
这篇文章的内容里面没有介绍任何.Net中提供的控件,目的是为了能让学习ASP的朋友能够对ASP.Net有所了解,所以尽可能的从ASP的角度出发去介绍.Net中的部分要点。
我的环境:
.Net2.0这里阐述的很多东西在1.1下是不能使用的。
SQL2005
一、数据库的链接
遇到的第一个
问题就是数据库链接,ADO.Net与ADO的出入太大,十分摸不着头绪。于是就源码、看源码,首先使用vs.Net来做些简单的链接,然后看看代码。发现了.Net站点的控制文件web.config,找了不少资料,一片麻,一点都不明白,干脆死套好了(过程就不说了,这里直接提供代码),于是就用vs.Net的功能让其自动创建如下:
web.config的数据链接部分:
调用方法:
dimConnAsSQLConnection=NewSQLConnection(ConfigurationManager.ConnectionStrings("Conn").ConnectionString)
PS:这里使用MSSQLServer2005,在2000中本地
计算机用local表示,2005则要用localhost表示
二、数据库的使用
ADO.Net的核心是DataSet,请参阅MSDN
链接代码:
DimdsAsDataSet=NewDataSet("ds")
DimConnAsSQLConnection=NewSQLConnection(ConfigurationManager.ConnectionStrings("Conn").ConnectionString)
DimdaAsNewSqlDataAdapter("select*fromuser",conn)&;#39;SqlDataAdapter是
sqlclient的一个子类,请参阅MSDN
&;#39;PS:用DataSet时可以省略open()方法
da.fill(ds,"user")&;#39;fill是SqlDataAdapter中将数据内容导入DataSet的方法。user表在dataset中用ds.tables(0)或者da.tables("user")来表示
如此就可以使用DataSet来调用数据库的数据了
具体方法请参阅DataTable类、DataRow类和DataColumn类
代码如下:
ds.tables(0).rows(0)(0)
或者
da.tables(0).rows(0).itme(0)
DataSet也可以理解为DataTable的集合,DataTable我个人认为才是ADO.Ne
t的真正核心,MSDN中也提到了
如此我们可以直接跳过DataSet来直接建立DataTable,代码如下:
DimconnAsNewSqlConnection(ConfigurationManager.ConnectionStrings("mconn").ConnectionString)
DimdaAsNewSqlDataAdapter("select*fromaccount",conn)
DimdtAsNewDataTable("dt")
da.Fill(dt)
response.write(dt.rows(0)(0))
三、数据更改
ADO.Net中提供了较为简单的更改方法,据说效率太低,代码如下:
ds.tables(0).rows(0).item("name")="ssd"&;#39;更新
da.update(ds,"user")&;#39;更新到user表
DimdrAsdatarow
dr=ds.Tables(1).NewRow() &;#39;新建行
dr("name")="feng" &;#39;添加新建数据
ds.Tables(1).Rows.Add(dr) &;#39;应用
da.update(ds,"user")&;#39;更新到user表
ds.Tables(1).Rows(0).delete() &;#39;删除行
da.update(ds,"user")&;#39;更新到user表
PS:为了提高效率和节省内存在使用Fill方法后建议使用Dispose方法来清除da的内容,并不使用该方法更新数据库
当然还有其它的一些方法,非常之繁琐,难道没有像ADO那样简单的一句话更新的方法吗,于是我就找到了如下的方法:
为了方便,和贴近ADO,我将其写成一个函数,至于为什么这样我也没有去深入了解,管他呢,能用就可以了
Functionupdate(str,conn)
DimSqlCommandAsNewSqlCommand(str,conn)
conn.open()
update=SqlCommand.ExecuteNonQuery()
conn.close
EndFunction
update("updateusersetname=&;#39;feng&;#39;",conn)
四、优化读取效率
这部分内容没有详细测试,请参阅本节最后的补充,这里我简单的写了一个分页的类,代码如下:
ClassTable_info
PublicdsAsDataSet=NewDataSet("ds")
PublicConnAsSQLConnection=NewSQLConnection(ConfigurationManager.ConnectionStrings("Conn").ConnectionString)
PublicIndexAsString="id"&;#39;Index索引字段或者叫关键字段
PublicWordAsString="*"&;#39;Word显示字段
PublicTableAsString&;#39;Table显示表
PublicOrderAsString=""&;#39;Order对关键字的排序值为desc和asc
PublicSearchAsString&;#39;Searchwhere后的内容,不包含where
PublicQueryStringAsString="?page="&;#39;QueryString页链接信息
PublicPageInfoAsString&;#39;Pageinfo翻页信息
PublicTableCountAsInteger&;#39;TableCount信息量
PublicPageCountAsInteger&;#39;PageCount页数量
PublicPageAsInteger=1&;#39;Page页次
PublicPageSizeAsInteger=20&;#39;PageSize页显示量
WriteOnlyPublicPropertySetConn()AsSQLConnection
Set(ByValvAsSQLConnection)
Conn=v
EndSet
EndProperty
WriteOnlyPublicPropertySetQueryString()AsString
Set(ByValvAsString)
QueryString=v
EndSet
EndProperty
WriteOnlyPublicPropertySetIndex()AsString
Set(ByValvAsString)
Index=v
EndSet
EndProperty
WriteOnlyPublicPropertySetWord()AsString
Set(ByValvAsString)
Word=v
EndSet
EndPrope
rty
WriteOnlyPublicPropertyTableSet()AsString
Set(ByValvAsString)
Table=v
EndSet
EndProperty
WriteOnlyPublicPropertySearchSet()AsString
Set(ByValvAsString)
Search=v
EndSet
EndProperty
WriteOnlyPublicPropertyOrderSet()AsString
Set(ByValvAsString)
Order=v
EndSet
EndProperty
WriteOnlyPublicPropertyPageSizeSet()AsInteger
Set(ByValvAsInteger)
PageSize=v
EndSet
EndProperty
WriteOnlyPublicPropertyPageSet()
Set(v)
IfIsNumeric(v)then
Page=v
Endif
EndSet
EndProperty
functionexecute()
IfOrder<>""Then
IfOrder="asc"
Order="Orderby"&;Index&;"asc"
Else
Order="Orderby"&;Index&;"desc"
EndIf
EndIf
IfTable=""Then
execute="请设定表名"
Exitfunction
EndIf
DimdaAsNewSqlDataAdapter("select"&;Word&;"from"&;Table&;Search&;Order,Conn)
da.fill(ds,Table)
TableCount=ds.Tables(0).rows.count
ds=Nothing
If(TableCountModPageSize)=0Then
PageCount=TableCount\PageSize
Else
PageCount=TableCount\PageSize+1
endIf
Ifpage>PageCountThenpage=PageCount
Ifpage>0then
page=page-1
Else
page=0
EndIf
ds=NewDataSet()
da.fill(ds,Page*PageSize,PageSize,Table)
da.Dispose()
da=nothing
page=page+1
PageInfo= "共找到"&;TableCount&;"条信息,分"&;PageCount&;"页,每页"&;PageSize&;"个,当前第"&;Page&;"页。"
ifpage<2then
PageInfo+="首页上页"
Else
PageInfo+="
首页上页"
Endif
ifpage-PageCount>=0then
PageInfo+="下页尾页"
else
PageInfo+="下页尾页"
endif
PageInfo+="第页"
Endfunction
EndClass
用法:
dimConnAsSQLConnection=NewSQLConnection(ConfigurationManager.ConnectionStrings("mConn").ConnectionString)
DimdtAsNewDataTable