私の青い色スペース

专注于.NET,认真把握好生命的每一秒,让每天都过的有意义。。!
 
 

与我联系

  • 发短消息

常用链接

  • 我的随笔
  • 我的空间
  • 我的短信
  • 我的评论
  • 更多链接
  • 我的参与
  • 我的新闻
  • 最新评论
  • 我的标签

留言簿(4)

  • 给我留言
  • 查看留言

我参与的团队

  • 福州.NET俱乐部(0/509)

随笔分类

  • Asp(vbs) Vbscript 技术(5) (rss)
  • Asp.net(C#) 编程(12) (rss)
  • Javascript And Ajax 技术(5) (rss)
  • Microsoft SQL Server 杂侃(3) (rss)
  • Xml/Css Web相关(2) (rss)

随笔档案

  • 2006年10月 (1)
  • 2006年9月 (7)
  • 2006年8月 (15)
  • 2006年7月 (1)

文章分类

  • 人际关系/职场风云(2) (rss)
  • 人生感悟(2) (rss)

博客站点链接

个人网站

  • 蓝色天空

搜索

  •  

最新评论

阅读排行榜

  • 1. 使用Js的Replace替换字符,在用正则时有问题。。(2068)
  • 2. Asp.net 用DataSet对象更新数据(SqlDataAdapter)(898)
  • 3. ASP.NET中17种常用正则表达式(820)
  • 4. 使用 Asp(vbs) 来读取 XML 数据岛 来制作网站菜单(802)
  • 5. XmlHttp.readyState属性整理(陆续加入中)(611)

评论排行榜

  • 1. ASP.NET中17种常用正则表达式(3)
  • 2. Asp.net 用DataSet对象更新数据(SqlDataAdapter)(2)
  • 3. 如何实现某一目录的forms身份验证(2)
  • 4. 使用Js的Replace替换字符,在用正则时有问题。。(2)
  • 5. 读取config文件的两种方法(1)

Powered by: 博客园
模板提供:沪江博客
博客园 | 首页 | 发新随笔 | 发新文章 | 联系 | 订阅订阅 | 管理

2006年10月4日

Asp.net 用DataSet对象更新数据(SqlDataAdapter)
  大家知道,DataSet保存的数据是位于服务器内存里面的原数据库的“副本”。所以用DataSet更新数据的过程就是先对“副本”进行更新,然后在将“原本”更新,按照我的理解就是把“原本”覆盖掉。具体到过程,首先是要找到需要更新的行,然后赋新值,最后更新原数据库。
  要找到需要修改的行,比较方便的做法就是根据记录中的某个值进行查找,这样比用“列号”“行号”什么的方便多了。要做到这一点,首先就是要给数据库指定一个主键,然后即可按照主键进行查找。要注意的是这个主键必须要是在程序中指定的,并且这个主键不一定和你数据库原来有的主键一样。
  然后就是最后的更新,当然是用DataAdapter的Update()方法借助CommandBuilder来实现,要注意的是,如果你的数据库一开始没有定义主键,那进行更新的时候会出错,返回的错误将是“对于不返回任何键列信息的 SelectCommand 不支持 UpdateCommand 的动态 SQL 生成。”这是因为我们用的Update()实际上是通过CommandBuilder动态生成sql语句,然后才进行的数据库操作。但如果你在一开始创建DataAdapter时的那个sql语句没有包含有主键的列的话,那CommandBuilder将不会发生作用。这一点是必须要牢记的。
  说了这么多,如果有不明白的就看下面的程序,这个是我练习时写的,里面有一些个人的设定,比如记录名什么的,相信大家一看就明白。
<%@import namespace="System.Data"%>
<%@import namespace="System.Data.OleDb"%>
<script language="c#" runat="server">
//定义处理更新的方法
//因为是简单示例,所以这个程序已经简化,直接进行更新
//这里有两个参数,第一个用来查找需要更新的行,第二个是要修改的值
private void up_date(int ids,string names){
//连接字符串,不明白的可以看本专题第二篇文章
string connstr=ConfigurationSettings.AppSettings["color"];
OleDbConnection conn=new OleDbConnection(connstr);
string sql="select * from member";
OleDbDataAdapter ada=new OleDbDataAdapter(sql,conn);//建立一个DataAdapter对象
//这里的CommandBuilder对象一定不要忘了,一般就是写在DataAdapter定义的后面
OleDbCommandBuilder cb=new OleDbCommandBuilder(ada);
DataSet ds=new DataSet();//建立DataSet对象
conn.Open();//打开连接
ada.Fill(ds,"mems");//填充DataSet
conn.Close();//注意及时关闭连接
DataTable dt=ds.Tables["mems"];//建立一个DataTable对象,方便操作
dt.PrimaryKey=new DataColumn[]{dt.Columns["id"]};//建立一个主键
DataRow dr=dt.Rows.Find(ids);//根据参数查找到需要修改的行

dr["name"]=names;//对需要修改的记录赋新值
ada.Update(ds,"mems");//用DataAdapter的Update()方法进行数据库的更新
}
//定义用来响应按钮单击事件的方法
private void b1_Click(object sender,System.EventArgs e){
if(Page.IsValid){
int ids=Int32.Parse(idst.Text);//取得要修改的行的id值,并转换成int类型
string names=namest.Text;//取得新值
up_date(ids,names);//调用我们定义的方法处理
lb1.Text="ok!";
</script>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>用dataset更新记录</title>
</head>
<body>
<asp:Label id="lb1" runat="server"/>
<form runat="server">
<asp:TextBox id="idst" runat="server"/>
<asp:RequiredFieldValidator id="rfv1" ControlToValidate="idst" ErrorMessage="error!" runat="server"/>
<asp:TextBox id="namest" runat="server"/>
<asp:RequiredFieldValidator id="rfv2" ControlToValidate="namest" ErrorMessage="error!" runat="server"/>
<asp:Button id="b1" Text="here!!" OnClick="b1_Click" runat="server"/>
</form>
</body>
</html>
补充一点,如果想设多于两个的主键的话,可以用这个
dt.PrimaryKey=new DataColumn[]{dt.Columns["id"],dt.Columns["id2"]};
就是给数组添加两个值,然后使用的时候:
Object[] keyValues=new object[1]; //这里必须实例化否则会向你要初值
//而且需要后面方括号中的这个索引范围
keyValues[0]=(object)key1;
keyValues[1]=(object)key2;
...... 另外一种写法
Object[] keyValues={(object)key1,(object)key2};//以楣举方式赋初值

很明白了吧 :)
posted @ 2006-10-04 22:46 メ冰枫ぱ雪 阅读(898) | 评论 (2) | 编辑
 

2006年9月21日

asp中正则表达式的应用
一、正则表达式概述 
  二、正则表达式在VBScript中的应用 
  三、正则表达式在VavaScript中的应用 
  四、示例 
  五、总结 

  一、正则表达式概述 
  如果原来没有使用过正则表达式,那么可能对这个术语和概念会不太熟悉。不过,它们并不是您想象的那么新奇。 
  请回想一下在硬盘上是如何查找文件的。您肯定会使用 ? 和 * 字符来帮助查找您正寻找的文件。? 字符匹配文件名 
中的单个字符,而 * 则匹配一个或多个字符。一个如 'data?.dat' 的模式可以找到下述文件:data1.dat、data2.dat等 
等。如果使用 * 字符代替 ? 字符,则将扩大找到的文件数量。'data*.dat' 可以匹配下述所有文件名:data.dat、 
data1.dat、data12.dat等等,尽管这种搜索文件的方法肯定很有用,但也十分有限。? 和 * 通配符的有限能力可以使你 
对正则表达式能做什么有一个概念,不过正则表达式的功能更强大,也更灵活。 
  在我们编写ASP程序时,经常会判断一个字符串的有效性,如;一个串是否是数字、是否是有效的Email地址等等。如 
果不使用正则表达式,那么判断的程序会很长,并且容易出错,如果使用正则表达式,这些判断就是一件很轻松的工作 
了。后面我们将介绍如何判断数字和Email地址的有效性。 
  在典型的搜索和替换操作中,必须提供要查找的确切文字。这种技术对于静态文本中的简单搜索和替换任务可能足够 
了,但是由于它缺乏灵活性,因此在搜索动态文本时就有困难了,甚至是不可能的。 
  使用正则表达式,能完成些什么事情呢? 
  测试字符串的某个模式。例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信 
用卡号码模式。这称为数据有效性验证。 
  替换文本。可以在文档中使用一个正则表达式来标识特定文字,然后可以全部将其删除,或者替换为别的文字。 
  根据模式匹配从字符串中提取一个子字符串。可以用来在文本或输入字段中查找特定文字。 
  例如,如果需要搜索整个 web 站点来删除某些过时的材料并替换某些HTML 格式化标记,则可以使用正则表达式对每 
个文件进行测试,看在该文件中是否存在所要查找的材料或 HTML 格式化标记。用这个方法,就可以将受影响的文件范围 
缩小到包含要删除或更改的材料的那些文件。然后可以使用正则表达式来删除过时的材料,最后,可以再次使用正则表达 
式来查找并替换那些需要替换的标记。 
  那么,正则表达式语法的语法是如何呢? 
  一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文 
字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。 
  这里有一些可能会遇到的正则表达式示例: 
  /^\[ \t]*$/ "^\[ \t]*$" 匹配一个空白行。 
  /\d{2}-\d{5}/ "\d{2}-\d{5}" 验证一个ID 号码是否由一个2位数字,一个连字符以及一个5位数字组成。 
  /<(.*)>.*<\/\1>/ "<(.*)>.*<\/\1>" 匹配一个 HTML 标记。 

  二、正则表达式在VBScript中的应用 
  VBScript使用RegExp对象、Matches集合以及Match对象提供正则表达式支持功能。我们还是先看一个例子。 
<%
Function RegExpTest(patrn, strng)
Dim regEx, Match, Matches   '建立变量。
Set regEx = New RegExp   '建立正则表达式。
regEx.Pattern = patrn  '设置模式。
regEx.IgnoreCase = True   '设置是否区分字符大小写。
regEx.Global = True   '设置全局可用性。
Set Matches = regEx.Execute(strng)  '执行搜索。
For Each Match in Matches  '遍历匹配集合。
RetStr = RetStr & "Match found at position "
RetStr = RetStr & Match.FirstIndex & ". Match Value is '"
RetStr = RetStr & Match.Value & "'." & "
"
Next
RegExpTest = RetStr
End Function
response.write RegExpTest("[ij]s.", "IS1 Js2 IS3 is4")
%> 
在这个例子中,我们查找字符串中有无is或者js这两个词,忽略大小写。运行的结果如下: 
Match found at position 0. Match Value is 'IS1'. 
Match found at position 4. Match Value is 'Js2'. 
Match found at position 8. Match Value is 'IS3'. 
Match found at position 12. Match Value is 'is4'. 
下面我们就介绍这三个对象和集合。 
  1、RegExp对象是最重要的一个对象,它有几个属性,其中: 
  ○Global 属性,设置或返回一个 Boolean 值,该值指明在整个搜索字符串时模式是全部匹配还是只匹配第一个。如 
果搜索应用于整个字符串,Global 属性的值为 True,否则其值为 False。默认的设置为 False。 
  ○IgnoreCase 属性,设置或返回一个Boolean值,指明模式搜索是否区分大小写。如果搜索是区分大小写的,则 
IgnoreCase 属性为 False;否则为 True。缺省值为 False。 
  ○Pattern 属性,设置或返回被搜索的正则表达式模式。必选项。总是一个 RegExp 对象变量。 
  2、Match 对象 
  匹配搜索的结果是存放在Match对象中,提供了对正则表达式匹配的只读属性的访问。 Match 对象只能通过 RegExp 
对象的 Execute 方法来创建,该方法实际上返回了 Match 对象的集合。所有的 Match 对象属性都是只读的。在执行正则 
表达式时,可能产生零个或多个 Match 对象。每个 Match 对象提供了被正则表达式搜索找到的字符串的访问、字符串的 
长度,以及找到匹配的索引位置等。 
  ○FirstIndex 属性,返回在搜索字符串中匹配的位置。FirstIndex 属性使用从零起算的偏移量,该偏移量是相对于 
搜索字符串的起始位置而言的。换言之,字符串中的第一个字符被标识为字符 0 
  ○Length 属性,返回在字符串搜索中找到的匹配的长度。 
  ○Value 属性,返回在一个搜索字符串中找到的匹配的值或文本。 
  3、Matches 集合 
  正则表达式 Match 对象的集合。Matches 集合中包含若干独立的 Match 对象,只能使用 RegExp 对象的 Execute 方 
法来创建之。与独立的 Match 对象属性相同,Matches `集合的一个属性是只读的。在执行正则表达式时,可能产生零个 
或多个 Match 对象。每个 Match 对象都提供了与正则表达式匹配的字符串的访问入口、字符串的长度,以及标识匹配位 
置的索引。 
  学习了这三个对象和集合,如何应用于字符串的判断和替换呢?regExp对象的三个方法正好解决了这个问题,它们是 
Replace方法、Test方法和Execute方法。 
  1、Replace 方法 
  替换在正则表达式查找中找到的文本。我们还是先看个例子:下面的例子说明了 Replace 方法的用法。 
<%
Function ReplaceTest(patrn, replStr)
Dim regEx, str1 ' 建立变量。
str1 = "The quick brown fox jumped over the lazy dog."
Set regEx = New RegExp ' 建立正则表达式。
regEx.Pattern = patrn ' 设置模式。
regEx.IgnoreCase = True ' 设置是否区分大小写。
ReplaceTest = regEx.Replace(str1, replStr) ' 作替换。
End Function
Response.write ReplaceTest("fox", "cat") & "
" ' 将 'fox' 替换为 'cat'。
Response.write ReplaceTest("(\S+)(\s+)(\S+)", "$3$2$1") ' 交换词对.
%> 
  2、Test 方法 
  对指定的字符串执行一个正则表达式搜索,并返回一个 Boolean 值指示是否找到匹配的模式。正则表达式搜索的实际 
模式是通过RegExp对象的Pattern属性来设置的。RegExp.Global属性对Test方法没有影响。 
  如果找到了匹配的模式,Test方法返回True;否则返回False。下面的代码说明了Test 方法的用法。 
<%
Function RegExpTest(patrn, strng)
Dim regEx, retVal ' 建立变量。
Set regEx = New RegExp ' 建立正则表达式。
regEx.Pattern = patrn ' 设置模式。
regEx.IgnoreCase = False ' 设置是否区分大小写。
retVal = regEx.Test(strng) ' 执行搜索测试。
If retVal Then
RegExpTest = "找到一个或多个匹配。"
Else
RegExpTest = "未找到匹配。"
End If
End Function
Response.write RegExpTest("is.", "IS1 is2 IS3 is4")
%> 
  3、Execute 方法 
  对指定的字符串执行正则表达式搜索。正则表达式搜索的设计模式是通过 RegExp 对象的 Pattern 来设置的。 
  Execute 方法返回一个 Matches 集合,其中包含了在 string 中找到的每一个匹配的 Match 对象。如果未找到匹 
配,Execute 将返回空的 Matches 集合。 

  三、JavaScript中正则表达式的使用 
  在JavaScript 1.2版以后,JavaScript也支持正则表达式。 
  1、replace 
  replace在一个字符串中通过正则表达式查找替换相应的内容。replace并不改变原来的字符串,只是重新生成了一个 
新的字符串。如果需要执行全局查找或忽略大小写,那么在正则表达式的最后添加g和i。 
例: 
<SCRIPT> 
re = /apples/gi; 
str = "Apples are round, and apples are juicy."; 
newstr=str.replace(re, "oranges"); 
document.write(newstr) 
</SCRIPT> 
结果是:"oranges are round, and oranges are juicy." 
例: 
<SCRIPT> 
str = "Twas the night before Xmas..."; 
newstr=str.replace(/xmas/i, "Christmas"); 
document.write(newstr) 
</SCRIPT> 
结果是:"Twas the night before Christmas..." 
例: 
<SCRIPT> 
re = /(\w+)\s(\w+)/;str = "John Smith"; 
newstr = str.replace(re, "$2, $1"); 
document.write(newstr) 
</SCRIPT> 
结果是:"Smith, John". 
  2、search 
search通过正则表达式查找相应的字符串,只是判断有无匹配的字符串。如果查找成功,search返回匹配串的位置, 
否则返回-1。 
         search(regexp) 
<SCRIPT> 
function testinput(re, str){ 
if (str.search(re) != -1) 
midstring = " contains "; 
else 
midstring = " does not contain "; 
document.write (str + midstring + re.source); 
} 
testinput(/^[1-9]/i,"123") 
</SCRIPT> 
  3、match 
  match方法执行全局查找,查找结果存放在一个数组里。 
例一: 
<SCRIPT> 
str = "For more information, see Chapter 3.4.5.1"; 
re = /(chapter \d+(\.\d)*)/i; 
found = str.match(re); 
document.write(found); 
</SCRIPT> 
显示结果:Chapter 3.4.5.1,Chapter 3.4.5.1,.1 
例二: 
<SCRIPT> 
str = "abcDdcba"; 
newArray = str.match(/d/gi); 
document.write(newArray); 
</SCRIPT> 
显示结果D, d. 

  四、示例 
1 、判断数字的正确性 
<%@ Language=VBScript %> 
<script language="javascript" runat="server"> 
function isNumeric(strNumber) { 
return (strNumber.search(/^(-|\+)?\d+(\.\d+)?$/) != -1); 
} 
function isUnsignedNumeric(strNumber) { 
return (strNumber.search(/^\d+(\.\d+)?$/) != -1); 
} 
function isInteger(strInteger) { 
return (strInteger.search(/^(-|\+)?\d+$/) != -1); 
} 
function isUnsignedInteger(strInteger) { 
return (strInteger.search(/^\d+$/) != -1); 
} 
</script> 
<HTML> 
<BODY> 
判断数字的正确性 
<%
Dim strTemp
strTemp = CStr(Request.Form("inputstring"))
If strTemp = "" Then strTemp = "0"
%> 
<TABLE BORDER="1" CELLPADDING="4" CELLSPACING="2"> 
<TR> 
<TD ALIGN="right">原始字符串</TD> 
<TD><%= strTemp %></TD> 
</TR> 
<TR> 
<TD ALIGN="right">数字</TD> 
<TD><%=isNumeric(strTemp)%></TD> 
</TR> 
<TR> 
<TD ALIGN="right">非负数字</TD> 
<TD><%=isUnsignedNumeric(strTemp)%></TD> 
</TR> 
<TR> 
<TD ALIGN="right">整数</TD> 
<TD><%=isInteger(strTemp)%></TD> 
</TR> 
<TR> 
<TD ALIGN="right">非负整数()</TD> 
<TD><%=isUnsignedInteger(strTemp)%></TD> 
</TR> 
</TABLE> 
<FORM ACTION="<%=Request.ServerVariables("SCRIPT_NAME")%>" METHOD="post"> 
请输入一个数字:
 
<INPUT TYPE="text" NAME="inputstring" SIZE="50"></INPUT>
 
<INPUT TYPE="submit" Value="提交"></INPUT>
 
</FORM> 
</BODY> 
</HTML> 
2、判断Email地址的正确性 
<%
Function isemail(strng)
isemail = false
Dim regEx, Match
Set regEx = New RegExp
regEx.Pattern = "^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$"
regEx.IgnoreCase = True
Set Match = regEx.Execute(strng)
if match.count then isemail= true
End Function
%>


五、总结 
  上面我们介绍了正则表达式的基本概念,以及在VBScript和JavaScript中如何使用正则表达式,同时,通过一些实例 
让大家有了感性的认识。正则表达式的应用范围很广,能为大家解决很多实际中的问题。本文介绍的内容只是一些初步的 
知识,还有很多语法规则需要大家继续学习,在实践中发现问题,解决问题。 返回顶部 



             怎么实现数据记录的分页显示(作者:DarkMan) 

怎么实现数据记录的分页显示 (1) 

通过Recordset的GetRows方法,可以实现数据记录的分页显示。下面是一个完整的例子: 
<%@ Language = VBSCRIPT %> 
<% Option Explicit %> 
<%
Dim iStart, iOffset
iStart = Request("Start")
iOffset = Request("Offset")

if Not IsNumeric(iStart) or Len(iStart) = 0 then
  iStart = 0
else
  iStart = CInt(iStart)
end if

if Not IsNumeric(iOffset) or Len(iOffset) = 0 then
  iOffset = 10
else
  iOffset = Cint(iOffset)
end if

Response.Write "察看 " & iOffset & " 个记录从 " & iStart & "开始
"

Dim objConn, objRS
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Provider=SQLOLEDB.1;Data Source=(local);uid=sa;pwd=;Initial    Catalog=pubs"

Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.Open "SELECT * FROM Authors", objConn

Dim aResults
aResults = objRS.GetRows

objRS.Close
Set objRS = Nothing

objConn.Close
Set objConn = Nothing

Dim iRows, iCols, iRowLoop, iColLoop, iStop
iRows = UBound(aResults, 2)
iCols = UBound(aResults, 1)

If iRows > (iOffset + iStart) Then 
  iStop = iOffset + iStart - 1 
Else 
  iStop = iRows 
End If 

For iRowLoop = iStart to iStop 
  For iColLoop = 0 to iCols 
 Response.Write aResults(iColLoop, iRowLoop) & " " 
 Next 
  Response.Write "
" 
 Next 

Response.Write "<P>" 
if iStart > 0 then 
'显示“前 10个”连接 
  Response.Write "<A HREF=""paging.asp?Start=" & iStart-iOffset & _
 "&Offset=" & iOffset & """>前 " & iOffset & "" 
 end if 

if iStop < iRows then
'显示“后 10个”连接
 Response.Write " <A HREF=""paging.asp?Start=" & iStart+iOffset & _
  "&Offset=" & iOffset & """>后 " & iOffset & "" 
end if 
%> 


怎么实现数据的分页显示(2) 
这里介绍另外一种分页显示的方法,是通过 MS SQL的存储过程。本方法不适用于Access数据库。 
假设我们要对数据表MyTable的数据实现分页显示,首先写一个存储过程 如下: 
CREATE PROCEDURE sp_PagedItems 
 ( 
  @Page int, 
  @RecsPerPage int 
  ) 
  AS 

  -- 加快表的 插入速度 
  SET NOCOUNT ON 

  -- 开始记录 号 
  DECLARE @RecCount int 
  SELECT @RecCount = @RecsPerPage * @Page + 1 

  --创建临时 表 
  CREATE TABLE #TempItems 
  ( 
  ID int IDENTITY, 
  Name varchar(50), 
  Price currency 
 ) 

  -- 准备临时 表 
  INSERT INTO #TempItems (Name, Price) 
  SELECT Name,Price FROM MyTable ORDER BY Price 

  -- 求出要查 询的最小ID和最大ID 
  DECLARE @FirstRec int, @LastRec int 
  SELECT @FirstRec = (@Page - 1) * @RecsPerPage 
  SELECT @LastRec = (@Page * @RecsPerPage + 1) 

  -- 得到实际 的记录,并返回是否还有数据! 
  SELECT *, 
  MoreRecords = 
 ( 
  SELECT COUNT(*) 
  FROM #TempItems TI 
  WHERE TI.ID >= @LastRec 
 ) 
  FROM #TempItems 
  WHERE ID > @FirstRec AND ID < @LastRec

  -- 恢复设置
  SET NOCOUNT OFF

  在这个存储过程里,我们首先创建一个全部 记录的临时表,并增加了一个自动编号的字段ID。这样,不同的记录就有
一个递增的唯一标志。
  根据当前的页号和每页的记录数,可以计算 出每页的最小和最大的ID。从而得到当前页的所有记录。
  为了显示的方便,存储过程还计算了 MoreRecords字段,作为显示下一页的判断条件。
  利用了这个存储过程的程序代码如下:
 <%
  '每页显示10条
  Const iRecordsPerPage = 10

  Dim currentPage '当前页号
  Dim bolLastPage '在最后一页?
  
 if len(Request.QueryString("page")) = 0 then
   currentPage = 1
 else
   currentPage = CInt(Request.QueryString("page"))
 end if

  '得到当前页的记录
  strSQL = "sp_PagedItems " & currentPage & "," & iRecordsPerPage
  objRS.Open strSQL, objConn
  
  '判断是否在最后一页
 if Not objRS.EOF then
   if CInt(objRS("MoreRecords")) > 0 then 
    bolLastPage = False 
   else 
    bolLastPage = True 
   end if 
  end if 
  %> 
  <P> 

 <TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 ALIGN=CENTER> 
  <TR><TH COLSPAN=2 BGCOLOR=NAVY> 
  <FONT SIZE=+1 COLOR=WHITE> 
    List of Items 
   
  </TH></TR> 
 <%
  Do While Not objRS.EOF %> 
   <TR><TD ALIGN=LEFT BGCOLOR=GRAY> 
   <%=objRS("Name")%> 
   </TD><TD ALIGN=CENTER BGCOLOR=GRAY> 
   <%=FormatCurrency(objRS("Price"))%> 
   </TD></TR> 
  <% objRS.MoveNext
  Loop %> 
 </TABLE> 
  <P> 
  <CENTER> 
 <%

  '第一页不 显示“前一页”
 if currentPage > 1 then %> 
  <INPUT TYPE=BUTTON VALUE="<< 前 <%=iMaxRecords%> 记录 " 
  ONCLICK="document.location.href='thispage.asp?page=<%=currentPage-1%>'"> ; 
     
 <% end if

  '最后一页 不显示“后一页”
 if Not bolLastPage then %> 
  <INPUT TYPE=BUTTON VALUE="后 <%=iMaxRecords%> 记录 >>" 
  ONCLICK="document.location.href='thispage.asp?page=<%=currentPage+1%>'"> ; 
 <% end if %> 
  </CENTER> 
posted @ 2006-09-21 03:15 メ冰枫ぱ雪 阅读(418) | 评论 (0) | 编辑
 

2006年9月18日

Asp.Net细节性问题精萃
  1.<%=...%>与<%#... %>的区别:
   答:<%=...%>是在程序执行时调用,<%#... %>是在DataBind()方法之后被调用

2.控件接收哪些类型数据?
      答:接收Bind的控件,一般有DropDownList,DataList,DataGrid,ListBox这些集合性质的控件,而被捆绑   的主要是ArrayList(数组),Hashtable(哈稀表),DataView(数据视图),DataReader这四个,以后我们就可以   对号入座,不会出现DataTable被捆绑的错误了:)

3.DataBind,获得的数据,系统会将其默认为String,怎样转化为其它的类型?
  DataBinder.Eval(Container.DataItem,"转换的类型","格式")
  最后一个"格式"是可选的,一般不用去管他,Container.DataItem是捆绑的数据项,"转换类型"指的是    Integer,String,Boolean这一类东西.

4.主要命名空间:
  <% @ Import Namespace="System.Data" %>    处理数据时用到
  <% @ Import Namespace="System.Data.ADO" % >  使用ADO.net ; 时用到
  <% @ Import Namespace="System.Data.SQL" %>   SQL Server 数据库专用
  <% @ Import Namespace="System.Data.XML" %>   不用看处理XML用到
  <% @ Import Namespace="System.IO" %>   处理文件时用到
  <% @ Import Namespace="System.Web.Util" %>   发邮件时大家会用到
  <% @ Import Namespace="System.Text" %>    文本编码时用到

5.Connections(SQLConection 或者 ADOConnection)的常用属性和方法:
  | ConnectionString 取得或设置连结数据库的语句
  | ConnectionTimeout 取得或设置连结数据库的最长时间,也是就超时时间
  | DataBase 取得或设置在数据库服务器上要打开的数据库名
  | DataSource 取得或设置DSN,大家不会陌生吧:)
  | Password 取得或设置密码
  | UserID 取得或设置登陆名
  | State 取得目前联结的状态
  | Open() 打开联结
  | Close() 关闭联结
  | Clone() 克隆一个联结。(呵呵,绵羊可以Connection我也可以)
 示例:
     SQLConnection myConnection = new SQLConnection();
     myConnection.DataSource = "mySQLServer";
     myConnection.Password = "";
     myConnection.UserID = "sa";
     myConnection.ConnectionTimeout = 30;
     myConnection.Open();
     myConnection.Database = "northwind";
     myConnection.IsolationLevel = IsolationLevel.ReadCommitted
6.Command常用的方法和属性
   | ActiveConnection 取得或设置联结Connections
   | CommandText 执行的SQL语句或储存过程(StoredProcedure)名
   | CommandTimeout 执行的最长时间
   | CommandType Command操作的类型(StoredProcedure,Text,TableDirect)三种,默认Text
   | Parameters 操作储存过程时使用
   | Execute() 执行SQL语句或储存过程
   | ExecuteNonQuery() 同上,区别在于不返回记录集
   | Clone() 克隆Command
  示例:
     string mySelectQuery = "SELECT * FROM Categories ORDER BY CategoryID";
     stringmyConnectString="userid=sa;password=;database=northwind;server=mySQLServer";
     SQLCommand myCommand = new SQLCommand(mySelectQuery);
     myCommand.ActiveConnection = new SQLConnection(myConnectString);
     myCommand.CommandTimeout = 15;
     myCommand.CommandType = CommandType.Text;< /FONT >

 

7.打开和关闭数据库两种方法:
      1.MyConnection.Open();    //打开联结
        MyConnection.Close();
      2.MyCommand.ActiveConnection.Open();
        MyCommand.ActiveConnection.Close() 

8.使用DataSet,在数据库中增加、修改、删除一个数据
      a.添加数据
            DataRow dr=MyDataSet.Tables["UserList"].NewRow();
            dr["UserName"] = "周讯";
            dr["ReMark"] = "100";
            dr["Comment"] = "漂亮MM";
            MyDataSet.Tables.Rows.Add(dr);

      b.修改数据
            MyDataSet.Tables["UserList"].Rows[0]["UserName"]="飞刀大哥";

      c.删除数据
            MyDataSet.Tables["UserList"],Rows[0].Delete();

      d.恢复数据
            if(MyDataSet.HasErrors)
             {
               MyDataSet.RejectChanges();
             }
     
      e.探测DataSet是否有改动
            if(MyDataSet.HasChanges)
             {
                //保存代码
             }else{
                //因为没有变化,所以不用保存,以节省时间
             }

      f.更新数据库
            MyComm.Update(MyDataSet);   //更新数据库中所有的表
            MyComm.Update(MyDataSet,"UserList");  //更新某个表
9.DataGrid实现分页功能
     AllowPaging="True"   //是指允许分页,这个是最主要的。有了它,我们才能分页。
     PageSize="5"         //是指定每页显示的记录数,如果不写,就会默认为10条。
     PagerStyle-HorizontalAlign="Right"  //是指定分面显示的定位,默认是Left

     PagerStyle-NextPageText="下一页"    //把<>改为上一页和下一页字符串
     PagerStyle-PrevPageText="上一页"

     PagerStyle-Mode="NumericPages"       //把<>改为123数字显示
10.显示一共有多少页,并且报告当前为第几页
     当前页是:<font color=red><%=DataGrid1.CurrentPageIndex+1%></font><br>
     总页数是:<font color=red><%=DataGrid1.PageCount%></font><br>
11.个性化分页
     程序员大本营之"亲密接触ASP.Net(14)"有完整代码

12.要将页面重置为有效的状态
 IValidator val;
        foreach(val in Validators)
         {
            Val.IsValid = true;
         }
13.重新执行整个验证序列   
        IValidator val;
        foreach(val in Validators)
         {
            Val.Validate();
         }
14.禁用客户端验证
 <%@ Page Language="c#" clienttarget=downlevel %>
15.Repeater、DataList和DataGrid控件用途"
     这些控件可以简化几种常见的 Web 应用程序方案,包括报表、购物车、产品列表、查询
 结果和导航菜单。  Repeater是唯一允许在其模板中存在 HTML片段的控件.
16.Server.Execute("another.aspx")和Server.Transfer("another.aspx")区别:
       Execute是从当前页面转移到指定页面,并将执行返回到当前页面
 Transfer是将执行完全转移到指定页面
17.XML文件中可以自己存有架构,也可以存在于*.xsl文件中,但必须通过xmlns属性在xml文档的根节点中指定该信息,如下所示:
 <rootelement xmlns="x-schema:scheduledSchema.xsl">
18.XML文件的读取
 FileStream myfs=new Filestream(Server.MapPath("xmldtagrid.xml"),FileMode.Open,FileAccess.Read);
 StreamReader myreader=new StreamReader(myfs);
 DataSet myds=new DataSet();
 myds.ReadXml(myreader);
19.正则表达式 控件RegularExpressionValidator
 符号   含义
 ^   指定检查开始处
 $   指定检查结束处
 []   检查输入的值是否与方括弧中的字符之一相匹配
 \W   允许输入任何值
 \d{}   "\d"指定输入的值是一个数字,{}表示已指定数据类型的出现次数
 +   表明一个或多个元素将被添加到正在检查的表达式
    示例:电子邮件格式(具有@号,且以.com/.net/.org/.edu结尾) 
     validationexpression="^[\w-]+@[\w-]+\.(com|net|org|edu)$"
20.DataGrid控件中数据操作重要语句:
 属性:DataKeyField="userid"  //设userid为表的主键,无法将该字段的值更新到数据库,最好设表的主键为DataGrid的主键
 SqlCommand.Parameters["@userid"].Value=dg.DataKeys[(int)e.Item.ItemIndex]; //检索所要更新的行的主键(将当前选定的行的               主键值赋给命令的一个参)数
 SqlCommand.Parameters["@fname"].Value=((TextBox)e.Item.Cells[2].Controls[0]).Text; //为参数赋予已修改的行值
21.自定义控件:
 a.用户控件(ASP创建页面一样)
  (I).  创建页面,拖入控件,设置属性/方法.   <% @Control Language="C#" Debug="True" %>中的@Control指令来定义此页         将包含控件代码
  (II)  保存为*.ascx文件,如a.ascx.
  (III).使用: 头<%@Register Tagprefix="MyFirstControl" TagName="MyLbl" Src="a.axcs" %>
    //Tagprefix为控件的前缀,像ASP:TextBox中的ASP
    //TagName用于指定自定义控件的名称
    //Src指定控件文件源
      身体:<MyFirstControl:MyLbl runat="Server" id="AllMine" MyText="成功了" />    
 b.使用C#创建自定义控件
  (I). 创建纯代码文件,继承基类Control,并保存为*.cs,如a.cs.
  (II).将代码编译生成程序集: csc /t:library /r:System.dll,System.Web.Dll a.cs 
      //library告诉C#编译器生成程序集
      //  /r:System.dll System.Web.Dll告诉C#编译器引用指定的程序集
  (III).将生成dll文件放在bin目录中
  (IV).使用: <% @Register TagPrefix="Mine" Namespace="MyOwnControls" Assembly="a" %>
22.复合控件注意事项:
 public class MyCompositin:Control,INamingContainer   //INamingContainer:如果在页面上有多个此控件实例,则此结口可以给每         {}           //个实例有唯一标志

 this.EnsureChildControls();//表示将复合控件的子控件都呈现到页面上,此方法检查服务器控件是否包含子控件

 CreateChildControls
23.Button/LinkButton/ImageButton/HyperLink什么时候用?
         1.Button和ImageButton用于将数据传递回服务器.
         2.Hyperlink用于在页面之间导航
         3.LinkButton用于将数据保存到服务器或访问服务器上的数据
24.跟踪调试
     跟踪:
 1.页级别跟踪: 在页的开头包括如下的页指令<%@ Page Trace="True" TraceMode="SortByCategory/SortByTime" %>
  自定义消息:
        Trace.Write("这里为要显示的字符串");
        Trace.Warn("这里为要显示的字符串");   //与Trace.Write相同,只是字体为红色
                检查是否使用了跟踪
        例句: if(Trace.IsEnabled) { Trace.Warn("已启用跟踪")}   
 2.应用程序级别跟踪: 在Web.config文件的<System.Web>节中 <trace enabled="true" pageOutput="true"/>
25.设置缓存:
 1.输出缓存:
            I.页面设置: 将  <%@ OutputCache Duration="120" VaryByParam="none" %>  加在需要缓存页的开头 
                               注释:在请求该页的后两分钟之内,输出内容不变
     II.编程方式设置:
                   主要使用类System.Web.HttpCachePolicy类下的方法
         (1). Response.Cache.SetExpires(DateTime.Now.AddSeconds(120));  //在此方法中必须指定到期时间,如本语                                                                                       //句为两分钟
         (2). Response.Cache.SetExpires(DateTime.Now.AddSeconds(120));
                            Response.Cache.SetSlidingExpiration(true);  //"可调到期",主要用于那些开始访问量大,但随后访问                                                                              //量平衡的情况
                            功能:第一句设置缓存到期时间,第二行打开 sliding expiration(可调到期).
         2.数据缓存:
               (1).DataView mySource; (2).给mySource赋值;
               (3).Cache["myCache"]=mySource; (4).mySource=(DataView)Cache["myCache"]
26.部署: 直接复制到产品服务器即可 复制语句: XCOPY <source_path> <destination_path> //XOPY只接受物理路径,不接受虚拟路径

posted @ 2006-09-18 17:26 メ冰枫ぱ雪 阅读(86) | 评论 (0) | 编辑
 

2006年9月9日

Asp 高效分页代码,带注释,收集中。。

<SCRIPT LANGUAGE=javascript>
<!--
function sss(i)
{
 document.s.pagelabel.value =i;
 document.s.submit();

}
//-->
</SCRIPT>

<%


mysql="select count(*) from youtableName "
rs.open mysql,conn,1
totalcount=rs(0)   '总记录数
rs.close

pagesize=30  '每页显示记录数
pagelabel=clear(request("pagelabel"))  '第pagelabel页
if pagelabel="" then
 pagelabel=1
end if

'***********************下面是关键,我们每页显示pagesize条数据,我们select的时候就只选择pagesize数量的记录。

if pagelabel<>1 then  '如果不是第一页,假设是第3页,那么你需要知道前(pagelabel-1)*pagesize条记录最大的ID(该ID是表自增加ID索引)
 mysql="select max(id) from (select top "&(pagelabel-1)*pagesize&" id from youtableName " )
 mysql=mysql&") ta" 
 rs.open mysql,conn,1
 pagelabel=rs(0)     
 rs.close()
 mysql="select top "&pagesize&" * from youtableName where id>"&pagelabel '取出大于ID的pagesize条记录
else
 mysql="select top "&pagesize&" * from youtableName " 
end if


set rs=conn.Execute(mysql)
%>
<table border=0 cellpadding=0 cellspacing=0 width="100%" class="big">
 <form name="s" action="" method="post">
 <tr class="head">
  <td align='center'>列名1</td>
  <td align='center'>列名2</td>
  <td align='center'>列名3</td>
 
 </tr>
 <input type="hidden" name="pagelabel">
 </form>
 
<%
if not rs.eof then
arrdata1=rs.GetRows()
rs.close
set rs=nothing

rowsA=ubound(arrdata1,2) '本页的记录数

pagecount=totalcount / pagesize  '页数
if ((totalcount mod pagesize)<>0) then
 pagecount=int(pagecount)+1
else
 pagecount=int(pagecount)
end if
 
  for i=0 to rowsA       
 
   Response.Write "<TR><TD  align=center>"&arrdata1(1,i)&"</td>"
   Response.Write "<td align='center'>"&arrdata1(2,i)&"</td>"
   Response.Write "<td align='center'>"&arrdata1(3,i)&"</td>"
   'Response.Write "<td align='center'>"&arrdata1(4,i)&"</td>"
   'Response.Write "<td align='center'>"&arrdata1(4,i)&"</td>"
   Response.Write "</tr>"
   Response.Write "<TR><TD colspan='5' height='1' bgcolor='#E6E7E4'></td></tR>"
  
  next 
  %>
  <tr><td height="30" align="center">
  <%
  Response.write "总条数:<font color=red>"&totalcount&"</font></td><td colspan=4>&nbsp;&nbsp;分页</font>&nbsp;&nbsp;&nbsp;&nbsp;"
  for i=1 to pagecount 
   Response.Write "<a href='javascript:sss("&i&")' style='color:#398CE7'>"&i&"</a>&nbsp;&nbsp;"
  next
  %>
 
  </td></tr>
  <%
else
 Response.Write "<tr><td colspan=5 align=center>无纪录</td></tr>"
end if
%>
</table>

posted @ 2006-09-09 18:53 メ冰枫ぱ雪 阅读(391) | 评论 (1) | 编辑
 

2006年9月8日

在ASP中使用事务处理数据库增/删/改操作

ASP中对数据库表的操作(INSERT/UPDATE/DELETE),可使用事务处理,并支持多事务处理。

在ASP的数据库对象连接对象中,提供了以下属性:

BeginTrans 事务开始

CommitTrans 事务提交

RollbackTrans 事务回滚

<%

On Error Resume Next ’错误发生后继续处理
'Asp中使用事务
Set conn=Server.CreateObject("ADODB.Connection")
conn.Open "course_dsn","course_user","course_password"
conn.begintrans '开始事务

sql="delete from user_info"
set rs=server.createobject("adodb.recordset")
rs.open sql,conn,3,3
if conn.errors.count>0 then '有错误发生
  conn.rollbacktrans '回滚
  set rs=nothing
  conn.close
  set conn=nothing
  response.write "交易失败,回滚至修改前的状态!"
  response.end
else
  conn.committrans '提交事务
  set rs=nothing
  conn.close
  set conn=nothing
  response.write "交易成功!"
  response.end
end if

%>

在ASP中,不提供事务的结束,BeginTrans只作用于自己的域,类似于变量声明一样,如果在函数体内BeginTrans,则事务只作用于本函数体,如果BeginTrans在函数体外,处于页面级,则事务的作用域从BeginTrans开始,到页面的结束均处于事务的管理状态下。

posted @ 2006-09-08 19:32 メ冰枫ぱ雪 阅读(173) | 评论 (0) | 编辑
 

2006年9月6日

Asp 中常用的函数用法及详解

Array()
  函数说明: 返回一个数组
  语法格式: Array(list)
  参数说明: 字符,数字均可
  代码范例: Dim User=Array("张三","李四","王五")
  返回结果: 建立了一个包含3个元素的数组

CInt()
  函数说明: 将一个表达式转化为数字类型
  语法格式: CInt(expression)
  参数说明: 任何有效的字符均可
  代码范例: CInt(236.42)
  返回结果: 236 (如果字符串为空,则返回0值)

CreateObject()
  函数说明: 建立和返回一个已注册的ACTIVEX组件的实例。
  语法格式: CreateObject(objName)
  参数说明: objName 是任何一个有效、已注册的ActiveX组件的名字.
  代码范例: Set Conn=Server.CreateObject("Adodb.Connection")
  返回结果:无

CStr()
  函数说明: 转化一个表达式为字符串.
  语法格式: CStr(expression)
  参数说明: expression 是任何有效的表达式。
  代码范例: Response.Write CStr(123)
  返回结果: "123"

Date()
  函数说明: 返回当前系统日期.
  语法格式: Date()
  参数说明: 无
  代码范例: Date()
  返回结果: 2004-09-14

DateAdd()
  函数说明: 返回一个被改变了的日期。
  语法格式: DateAdd(timeinterval,number,date)
  参数说明: timeinterval是要增加的时间间隔类型,如"y","m","d","h"等等; number是要增加的时间间隔的数量;date是时间增加的基准时间.
  代码范例: DataAdd("m",1,CDate("2004-09-14 17:12:23"))
  返回结果: 2004-10-14 17:12:23
 这里有一个技巧(对于初学者而言),如果number为负数,则相当于减去Abs(number)个时间间隔。

DateDiff()
  函数说明: 返回两个日期之间的差值 。
  语法格式: DateDiff(timeinterval,date1,date2 [, firstdayofweek [, firstweekofyear>>)
  参数说明: timeinterval 表示相隔时间的类型,如"M"表示"月"。
  代码范例: DateDiff("d","2000-1-1","1999-8-4")
  返回结果: 从1999-8-4 到2000年还有 150 天.

Day()
  函数说明: 返回一个月的第几日 .
  语法格式: Day(date)
  参数说明: date 是任何有效的日期。
  代码范例: Day(CDate("2004-09-14"))
  返回结果: 14

FormatCurrency()
  函数说明: 返回表达式,此表达式已被格式化为货币值
  语法格式: FormatCurrency(Expression [, Digit [, LeadingDigit [, Paren [, GroupDigit>>>>)
  参数说明: Digit 指示小数点右侧显示位数的数值。默认值为 -1,指示使用的是计算机的区域设置;   LeadingDigit 三态常数,指示是否显示小数值小数点前面的零。
  代码范例:
  返回结果: $34.35

FormatDateTime()
  函数说明: 返回表达式,此表达式已被格式化为日期或时间
  语法格式: FormatDateTime(Date, [, NamedFormat>)
  参数说明: NamedFormat 指示所使用的日期/时间格式的数值,如果省略,则使用 vbGeneralDate.
  代码范例:
  返回结果: Wednesday, August 04, 1999

FormatNumber()
  函数说明: 返回表达式,此表达式已被格式化为数值.
  语法格式: FormatNumber(Expression [, Digit [, LeadingDigit [, Paren [, GroupDigit>>>>)
  参数说明: Digit 指示小数点右侧显示位数的数值。默认值为 -1,指示使用的是计算机的区域设置。; LeadingDigit i指示小数点右侧显示位数的数值。默认值为 -1,指示使用的是计算机的区域设置。; Paren 指示小数点右侧显示位数的数值。默认值为 -1,指示使用的是计算机的区域设置。; GroupDigit i指示小数点右侧显示位数的数值。默认值为 -1,指示使用的是计算机的区域设置。.
  代码范例:
  返回结果: 45.325

FormatPercent()
  函数说明: 返回表达式,此表达式已被格式化为尾随有 % 符号的百分比(乘以 100 )。 (%)
  语法格式: FormatPercent(Expression [, Digit [, LeadingDigit [, Paren [, GroupDigit>>>>)
  参数说明: 同上.
  代码范例:
  返回结果: 45.267%

Hour()
  函数说明: 以24时返回小时数.
  语法格式: Hour(time)
  参数说明:
  代码范例:
  返回结果: 16
  (Hour has been converted to 24-hour system)

Instr()
  函数说明: 返回字符或字符串在另一个字符串中第一次出现的位置.
  语法格式: Instr([start, > strToBeSearched, strSearchFor [, compare>)
  参数说明: Start为搜索的起始值,strToBeSearched接受搜索的字符串 strSearchFor要搜索的字符compare 比较方式(详细见ASP常数)
  代码范例: Instr(1,"abcdefgabcdefg","bc")
  返回结果: 2

InstrRev()
  函数说明: 同上,只是从字符串的最后一个搜索起
  语法格式: InstrRev([start, > strToBeSearched, strSearchFor [, compare>)
  参数说明: 同上.
  代码范例: InstrRev(1,"abcdefgabcdefg","bc")
  返回结果: 9


Int()
  函数说明: 返回数值类型,不四舍五入。
  语法格式: Int(expression)
  参数说明:expression是任意合法的表达式。
  代码范例:
  返回结果: 32

IsArray()
  函数说明: 判断一对象是否为数组,返回布尔值 .
  语法格式: IsArray(expression)
  参数说明:expression
  代码范例:
  返回结果: True/False

IsDate()
  函数说明: 判断一对象是否为日期,返回布尔值
  语法格式: IsDate(expression)
  参数说明: expression是任意合法的表达式。
  代码范例: IsDate("abc")
  返回结果: False

IsEmpty()
  函数说明: 判断一对象是否初始化,返回布尔值.
  语法格式: IsEmpty(expression)
  参数说明:expression是任意合法的表达式。
  代码范例:
  返回结果: True/False

IsNull()
  函数说明: 判断一对象是否为空,返回布尔值.
  语法格式: IsNull(expression)
  参数说明:expression是任意合法的表达式。
  代码范例:
  返回结果: True/False
  
IsNumeric()
  函数说明: 判断一对象是否为数字,返回布尔值.
  语法格式: IsNumeric(expression)
  参数说明:expression是任意合法的表达式。
  代码范例:
  返回结果: True/False
  就算数字加了引号,ASP还是认为它是数字。

IsObject()
  函数说明: 判断一对象是否为对象,返回布尔值.
  语法格式: IsObject(expression)
  参数说明:expression是任意合法的表达式。
  代码范例:
  返回结果: True/False


LBound()
  函数说明: 返回指定数组维的最小可用下标.
  语法格式: Lbound(arrayname [, dimension>)
  参数说明: dimension 指明要返回哪一维下界的整数。使用 1 表示第一维,2 表示第二维,以此类推。如果省略 dimension 参数,默认值为 1.
  代码范例:
  返回结果:

LCase()
  函数说明: 返回字符串的小写形式
  语法格式: Lcase(string)
  参数说明: string是任意合法的表达式。
  代码范例: LCase("THIS Is A Test!")
  返回结果: this is a test!

Left()
  函数说明: 返回字符串左边第length个字符以前的字符(含第length个字符).
  语法格式: Left(string, length)
  参数说明:string是原字符串,length是要取得的字符个数。
  代码范例: Left("Left",3)
  返回结果: Lef

Len()
  函数说明: 返回字符串的长度.
  语法格式: Len(string | varName)
  参数说明:string是任意合法的表达式。
  代码范例:
  返回结果: 15

LTrim()
  函数说明: 去掉字符串左边的空格.
  语法格式: LTrim(string)
  参数说明:string为字符串
  代码范例: LTrim("     This is a test!  ")
  返回结果: "This is a test!  "

Mid()
  函数说明: 返回特定长度的字符串(从start开始,长度为length).
  语法格式: Mid(string, start [, length>)
  参数说明:string是原字符串,start为开始截取的位置,length为截取的字符串长度
  代码范例: Mid("abcdefg",2,3)
  返回结果: bcd
 如果省略length,则截取从start位置到末尾的所有字符。

Minute()
  函数说明: 返回时间的分钟.
  语法格式: Minute(time)
  参数说明:time是任意合法的日期表达式。
  代码范例: Minute("2004-09-14 17:12:23")
  返回结果: 14

Month()
  函数说明: 返回月份.
  语法格式: Month(date)
  参数说明: date是任意合法的日期表达式。
  代码范例: Month("2004-09-14 17:12:23")
  返回结果: 9

MonthName()
  函数说明: 以本地系统格式返回用于识别特定月份的字符串.
  语法格式: MonthName(month, [, Abb>)
  参数说明: month是给定月的数字表示; Abb (可选的)是一个逻辑值,用于控制是否显示月份缩写.True表示显示月份缩写,False则不显示。
  代码范例: MonthName("2004-09-14 17:12:23")
  返回结果: September

Now()
  函数说明: Returns the current system date and time.
  语法格式: Now()
  参数说明: 无
  代码范例: Now()
  返回结果: 2004-09-14 17:12:23
 这是我的时间,你调用的时候应该是你当时的时间。

Replace()
  函数说明: 返回一个字符串strToBeSearched中的子字符串strSearchFor被另一个字符串strReplaceWith替换count次后的字符串。.
  语法格式: Replace(strToBeSearched, strSearchFor, strReplaceWith [, start [, count [, compare>>>)
  参数说明: strToBeSearched是被替换的字符串; strSearchFor是要在strToBeSearched中查找的子字符串; strReplace是要替换成的字符串; start (可选的)是开始搜索的位置; count (可选的)是要替换的次数,省略则全部替换。
  代码范例: Replace("This is an apple!","apple","orange")
  返回结果: This is an orange!

Right()
  函数说明: 返回字符串右边第length个字符以前的字符(含第length个字符).
  语法格式: Right(string, length)
  参数说明: string是原字符串,length是要截取的字符个数。
  代码范例: Right("right",3)
  返回结果: ght

Rnd()
  函数说明: 产生一个随机数.
  语法格式: Rnd [ (number) >
  参数说明:
  代码范例:
  返回结果: 任何一个在0 到 1 之间的数

Round()
  函数说明: 返回按指定位数进行四舍五入的数值.
  语法格式: Round(expression [, numRight>)
  参数说明: numRight数字表明小数点右边有多少位进行四舍五入。如果省略,则 Round 函数返回整数.
  代码范例: Round(1234.567,2)
  错误返回结果: 1234.570(注:感谢yippee 的提示,由于本人的疏忽,也是受了SqlServer的影响才有此
                                                  错误结果,同时在这里也提醒大家,SqlServer查询分析器的Round会得到此
                                                  结果。)
        正确返回结果:1234.57

Rtrim()
  函数说明: 去掉字符串右边的字符串.
  语法格式: Rtrim(string)
  参数说明:
  代码范例: RTim("   This is a test!   ")
  返回结果: "   This is a test!"

Second()
  函数说明: 返回秒.
  语法格式: Second(expression)
  参数说明: expression是任意合法的时间表达式。
  代码范例: MonthName("2004-09-14 17:12:23")
  返回结果: 23

StrReverse()
  函数说明: 反排一字符串
  语法格式: StrReverse(string)
  参数说明:
  代码范例: StrReverse("This is a test!")
  返回结果: "!tset a si sihT"

Time()
  函数说明: 返回系统时间.
  语法格式: Time()
  参数说明: .
  代码范例: Time()
  返回结果: 17:12:23

Trim()
  函数说明: 去掉字符串左右的空格.
  语法格式: Trim(string)
  参数说明: string是任意合法的字符串表达式。
  代码范例: Trim("   This is a test!   ")
  返回结果: "This is a test!"

UBound()
  函数说明: 返回指定数组维数的最大可用下标.
  语法格式: Ubound(arrayname [, dimension>)
  参数说明: dimension (optional) 指定返回哪一维上界的整数。1 表示第一维,2 表示第二维,以此类推。如果省略 dimension 参数,则默认值为 1.
  代码范例:
  返回结果: 2

UCase()
  函数说明: 返回字符串的大写形式.
  语法格式: UCase(string)
  参数说明:
  代码范例: UCase("This is a test!")
  返回结果: THIS IS A TEST!

VarType()
  函数说明: 返回指示变量子类型的值
  语法格式: VarType(varName)
  参数说明:varName是任意可用的表达式
  代码范例:
  返回结果: 2(数字)

WeekDay()
  函数说明: 返回在一周的第几天.
  语法格式: WeekDay(date [, firstdayofweek>)
  参数说明: date是任意合法的时间表达式
  代码范例: WeekDay("2004-09-14 17:12:23")
  返回结果: 3(星期二)
 注意外国人的习惯,周日为第一天,既是1,周一是第二天既是2,依此类推

WeekDayName()
  函数说明: 返回一周第几天的名字.
  语法格式: WeekDayName(date [, Abb [, firstdayofweek>>)
  参数说明: date是任意合法的时间表达式,Abb(可选的)Boolean 值,指明是否缩写表示星期各天的名称。如果省略, 默认值为 False,即不缩写星期各天的名称.firstdayofweek指明星期第一天的数值
  代码范例: WeekDayName("2004-09-14 17:12:23")
  返回结果: 星期二

Year()
  函数说明: 返回当前的年份.
  语法格式: Year(date)
  参数说明:date是任意合法的时间表达式。
  代码范例: Year("2004-09-14 17:12:23")
  返回结果: 2004

posted @ 2006-09-06 00:19 メ冰枫ぱ雪 阅读(265) | 评论 (0) | 编辑
 

2006年9月2日

使用 Input Type="File" 的一些技巧和注意事项(添加中)
<< 解决上传大文件的办法 >>

====================================================
在Asp.net的中使用<input type="file" />控件上传文件对文件的大小有限制,默认情况下大概在4m左右,如果上传再大的文件时就会出页面无法显示的错误.

具体的方法是,修改web.config文件中的参数可以设置该控件上传文件的大小,web.config中配置如下:
在<system.web>节点下增加"<httpRuntime maxRequestLength="409600"/>"可以来设置<input type='file' />控件上传文件的大小,maxRequestLength以字节位单位,所以要需要传的大小 xM*1024 就好啦。
 
不过在IIS6.0里已经没有此问题了
====================================================
posted @ 2006-09-02 17:09 メ冰枫ぱ雪 阅读(290) | 评论 (1) | 编辑
 
使用 Asp(vbs) 来读取 XML 数据岛 来制作网站菜单
     摘要: 总的来说还得使用到Microsoft的ActiveX创建XML对象:createObject("Microsoft.XMLDOM")读取节点:selectSingleNode("nodename") //nodename为节点名。读取属性:attributes.getNamedItem("attribute") //attribute为节点中所具有的属性名。加载Xml文档:Load(Server....  阅读全文
posted @ 2006-09-02 00:26 メ冰枫ぱ雪 阅读(802) | 评论 (0) | 编辑
 

2006年8月31日

使用Drawing类为图片添加图片水印

//加水印效果

     System.Drawing.Image image = System.Drawing.Image.FromFile(path);
     System.Drawing.Image copyImage = System.Drawing.Image.FromFile( Server.MapPath(".") + "/../../images/copy.gif");
     Graphics g = Graphics.FromImage(image);
     g.DrawImage(copyImage, new Rectangle(image.Width-copyImage.Width, image.Height-copyImage.Height, copyImage.Width, copyImage.Height), 0, 0, copyImage.Width, copyImage.Height, GraphicsUnit.Pixel);
     g.Dispose();
     
     string newPath = Server.MapPath("UploadFile/"+Cyear+"-"+Cmonth+"/")+"9"+newname;
     image.Save(newPath);
     image.Dispose();

     if(File.Exists(path))
     {
      File.Delete(path);
     }
 

posted @ 2006-08-31 12:26 メ冰枫ぱ雪 阅读(86) | 评论 (0) | 编辑
 

2006年8月19日

XmlHttp.readyState属性整理(陆续加入中)

readyState
返回XMLHTTP请求的当前状态

语法
lValue = oXMLHttpRequest.readyState;
Example
var XmlHttp;
XmlHttp = new ActiveXObject("Msxml2.XMLHTTP.3.0");

function send() {
   XmlHttp.onreadystatechange = doHttpReadyStateChange;
   XmlHttp.open("GET", "http://localhost/sample.xml", true);
   XmlHttp.send();
}

function doHttpReadyStateChange() {
   if (XmlHttp.readyState == 4) {
      alert("Done");
   }
}
备注
变量,此属性只读,状态用长度为4的整型表示.定义如下:

0 (未初始化) 对象已建立,但是尚未初始化(尚未调用open方法)
1 (初始化) 对象已建立,尚未调用send方法
2 (发送数据) send方法已调用,但是当前的状态及http头未知
3 (数据传送中) 已接收部分数据,因为响应及http头不全,这时通过responseBody和responseText获取部分数据会出现错误,
4 (完成) 数据接收完毕,此时可以通过通过responseBody和responseText获取完整的回应数据

posted @ 2006-08-19 20:11 メ冰枫ぱ雪 阅读(611) | 评论 (1) | 编辑
 
仅列出标题  下一页