JSDecoder
Public Class JSDecoder
Private Const STATE_COPY_INPUT = 100
Private Const STATE_READLEN = 101
Private Const STATE_DECODE = 102
Private Const STATE_UNESCAPE = 103
Private Pick_Encoding, rawData As Integer()
Private Transformed(2, 287), Digits(122) As Integer
Public Sub New()
InitArrayData()
End Sub
Private Sub InitArrayData()
Dim i, j As Integer
Pick_Encoding = New Integer() { _
1, 2, 0, 1, 2, 0, 2, 0, 0, 2, 0, 2, 1, 0, 2, 0, _
1, 0, 2, 0, 1, 1, 2, 0, 0, 2, 1, 0, 2, 0, 0, 2, _
1, 1, 0, 2, 0, 2, 0, 1, 0, 1, 1, 2, 0, 1, 0, 2, _
1, 0, 2, 0, 1, 1, 2, 0, 0, 1, 1, 2, 0, 1, 0, 2 _
}
rawData = New Integer() { _
&H64, &H37, &H69, &H50, &H7E, &H2C, &H22, &H5A, &H65, &H4A, &H45, &H72, _
&H61, &H3A, &H5B, &H5E, &H79, &H66, &H5D, &H59, &H75, &H5B, &H27, &H4C, _
&H42, &H76, &H45, &H60, &H63, &H76, &H23, &H62, &H2A, &H65, &H4D, &H43, _
&H5F, &H51, &H33, &H7E, &H53, &H42, &H4F, &H52, &H20, &H52, &H20, &H63, _
&H7A, &H26, &H4A, &H21, &H54, &H5A, &H46, &H71, &H38, &H20, &H2B, &H79, _
&H26, &H66, &H32, &H63, &H2A, &H57, &H2A, &H58, &H6C, &H76, &H7F, &H2B, _
&H47, &H7B, &H46, &H25, &H30, &H52, &H2C, &H31, &H4F, &H29, &H6C, &H3D, _
&H69, &H49, &H70, &H3F, &H3F, &H3F, &H27, &H78, &H7B, &H3F, &H3F, &H3F, _
&H67, &H5F, &H51, &H3F, &H3F, &H3F, &H62, &H29, &H7A, &H41, &H24, &H7E, _
&H5A, &H2F, &H3B, &H66, &H39, &H47, &H32, &H33, &H41, &H73, &H6F, &H77, _
&H4D, &H21, &H56, &H43, &H75, &H5F, &H71, &H28, &H26, &H39, &H42, &H78, _
&H7C, &H46, &H6E, &H53, &H4A, &H64, &H48, &H5C, &H74, &H31, &H48, &H67, _
&H72, &H36, &H7D, &H6E, &H4B, &H68, &H70, &H7D, &H35, &H49, &H5D, &H22, _
&H3F, &H6A, &H55, &H4B, &H50, &H3A, &H6A, &H69, &H60, &H2E, &H23, &H6A, _
&H7F, &H9, &H71, &H28, &H70, &H6F, &H35, &H65, &H49, &H7D, &H74, &H5C, _
&H24, &H2C, &H5D, &H2D, &H77, &H27, &H54, &H44, &H59, &H37, &H3F, &H25, _
&H7B, &H6D, &H7C, &H3D, &H7C, &H23, &H6C, &H43, &H6D, &H34, &H38, &H28, _
&H6D, &H5E, &H31, &H4E, &H5B, &H39, &H2B, &H6E, &H7F, &H30, &H57, &H36, _
&H6F, &H4C, &H54, &H74, &H34, &H34, &H6B, &H72, &H62, &H4C, &H25, &H4E, _
&H33, &H56, &H30, &H56, &H73, &H5E, &H3A, &H68, &H73, &H78, &H55, &H9, _
&H57, &H47, &H4B, &H77, &H32, &H61, &H3B, &H35, &H24, &H44, &H2E, &H4D, _
&H2F, &H64, &H6B, &H59, &H4F, &H44, &H45, &H3B, &H21, &H5C, &H2D, &H37, _
&H68, &H41, &H53, &H36, &H61, &H58, &H58, &H7A, &H48, &H79, &H22, &H2E, _
&H9, &H60, &H50, &H75, &H6B, &H2D, &H38, &H4E, &H29, &H55, &H3D, &H3F _
}
For i = 31 To 126
For j = 0 To 2
Transformed(j, rawData((i - 31) * 3 + j)) = IIf(i = 31, 9, i)
Next
Next
For i = 0 To 25
Digits(65 + i) = i
Digits(97 + i) = i + 26
Next
For i = 0 To 9
Digits(48 + i) = i + 52
Next
Digits(43) = 62
Digits(47) = 63
End Sub
Private Function UnEscape(ByVal strChar As String) As String
Dim escapes As String
Dim escaped As String
Dim iIndex As Integer
escapes = "#&!*$"
escaped = Chr(13) & Chr(10) & "<>@"
If AscW(strChar.Substring(0, 1)) > 126 Then Return strChar
iIndex = escapes.IndexOf(strChar)
If iIndex <> -1 Then Return escaped.Substring(iIndex, 1)
Return "?"
End Function
Private Function DecodeBase64(ByVal strString As String) As Integer
Dim iVal As Integer = 0
iVal += (Digits(AscW(strString.Substring(0, 1))) << 2)
iVal += (Digits(AscW(strString.Substring(1, 1))) >> 4)
iVal += (Digits(AscW(strString.Substring(1, 1))) And &HF) << 12
iVal += ((Digits(AscW(strString.Substring(2, 1))) >> 2) << 8)
iVal += ((Digits(AscW(strString.Substring(2, 1))) And &H3) << 22)
iVal += (Digits(AscW(strString.Substring(3, 1))) << 16)
Return iVal
End Function
Public Function Decode(ByRef encodingString As String) As String
Dim marker As String = "#@~^"
Dim stringIndex As Integer = 0
Dim scriptIndex As Integer = -1
Dim unEncodingIndex As Integer = 0
Dim strChar As String = ""
Dim getCodeString As String = ""
Dim unEncodinglength As Integer = 0
Dim state As Integer = STATE_COPY_INPUT
Dim unEncodingString As String = ""
While state <> 0
Select Case state
Case STATE_COPY_INPUT
scriptIndex = encodingString.IndexOf(marker, stringIndex)
If scriptIndex <> -1 Then
unEncodingString &= Mid(encodingString, stringIndex + 1, scriptIndex - stringIndex)
scriptIndex += marker.Length
state = STATE_READLEN
Else
stringIndex = IIf(stringIndex = 0, 0, stringIndex)
unEncodingString &= Mid(encodingString, stringIndex + 1)
state = 0
End If
Case STATE_READLEN
getCodeString = Mid(encodingString, scriptIndex + 1, 6)
unEncodinglength = DecodeBase64(getCodeString)
scriptIndex += 8
state = STATE_DECODE
Case STATE_DECODE
If unEncodinglength = 0 Then
stringIndex = scriptIndex + "DQgAAA==^#~@".Length
unEncodingIndex = 0
state = STATE_COPY_INPUT
Else
strChar = Mid(encodingString, scriptIndex + 1, 1)
If strChar = "@" Then
state = STATE_UNESCAPE
unEncodingString &= UnEscape(Mid(encodingString, scriptIndex + 2, 1))
scriptIndex += 2
unEncodinglength -= 2
unEncodingIndex += 1
state = STATE_DECODE
Else
If AscW(strChar) < &HFF Then
unEncodingString &= Chr(Transformed(Pick_Encoding(unEncodingIndex Mod 64), AscW(strChar)))
unEncodingIndex += 1
Else
unEncodingString &= strChar
End If
scriptIndex += 1
unEncodinglength -= 1
End If
End If
Case STATE_UNESCAPE
unEncodingString &= UnEscape(Mid(encodingString, ++scriptIndex, 1))
scriptIndex += 1
unEncodinglength -= 2
unEncodingIndex += 1
state = STATE_DECODE
End Select
End While
Dim Pattern As String
Pattern = "(JScript|VBscript).encode"
unEncodingString = System.Text.RegularExpressions.Regex.Replace(unEncodingString, Pattern, "$1", System.Text.RegularExpressions.RegexOptions.IgnoreCase)
Return unEncodingString
End Function
End Class
Imports System.Web
Imports System.Web.Hosting
Imports System.Threading
Module Module1
Sub Main()
Dim t As MyHttpHandler
Dim context As HttpContext
Thread.GetDomain().SetData(".appPath", System.Environment.CurrentDirectory)
Thread.GetDomain().SetData(".appVPath", "/")
Thread.GetDomain().SetData(".hostingVirtualPath", "/")
Thread.GetDomain().SetData(".hostingInstallDir", HttpRuntime.AspInstallDirectory)
Dim wr As SimpleWorkerRequest = New SimpleWorkerRequest("/1.aspx", "", Console.Out)
context = New HttpContext(wr)
context.ApplicationInstance = New HttpApplication
t = New MyHttpHandler
t.ProcessRequest(context)
Console.ReadLine()
End Sub
End Module
Public Class MyHttpHandler
Implements System.Web.IHttpHandler
Public ReadOnly Property IsReusable() As Boolean Implements System.Web.IHttpHandler.IsReusable
Get
Return True
End Get
End Property
Public Sub ProcessRequest(ByVal context As System.Web.HttpContext) Implements System.Web.IHttpHandler.ProcessRequest
context.Response.Write("请求地址为:" & context.Request.Url.ToString() & "<br>")
For i As Integer = 0 To 3
context.Response.Write("当前时间:" & Now & "<br>")
context.Response.Flush()
Next
context.Response.End()
End Sub
End Class
Imports System.Net
Imports System.Net.Sockets
Imports System.Net.Sockets.Socket
Imports System.Collections.Specialized
Public Class GetServers
'采用udp协议
Private m_Client As Sockets.UdpClient
'广播地址,表示整个网络
Private StrHost As String = "255.255.255.255"
'广播端口
Private IntPort As Integer = 1434
'要发送的数据,发送这个数据所有的sqlserver就会响应了
Private B() As Byte = New Byte() {&H2}
'因为 send 里面有个死循环,这里用个定时器来处理超时间
Private WithEvents t As New Timers.Timer
'发送数据出去
Function Send() As ArrayList
m_Client = New UdpClient
'用来存储获取的sql列表
Dim atemp As New ArrayList
'发送的目标,广播地址
Dim host As New IPEndPoint(IPAddress.Parse(Me.StrHost), Me.IntPort)
Try
'这里发送数据
m_Client.Send(B, 1, host)
'下面开始读取,因为网络内sql server数量众多,数据包一个一个的返回
'所以这里循环处理了。
While True
'开定时器
t.Interval = 1000
t.Enabled = True
'接收的字节数组
Dim BR As Byte() = m_Client.Receive(host)
Dim A As System.Text.Encoding = System.Text.Encoding.Default
'用来存储当前字符串
Dim S As String = ""
'从第4个数字开始,前三个字符为非打印字符
S = A.GetString(BR, 3, BR.Length - 3)
Console.WriteLine(S)
'这里解析获取的文本
atemp.Add(New SqlServer(S))
'关闭
t.Enabled = False
End While
Catch ex As Exception
Console.WriteLine(ex.Message)
Finally
m_Client.Close()
End Try
Return atemp
'Console.WriteLine("检查完毕。。")
End Function
'超时后强制结束网络等待。
Private Sub t_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) Handles t.Elapsed
'Console.WriteLine("关闭。。")
m_Client.Close()
t.Dispose()
End Sub
End Class
Public Class SqlServer
'sql server解析类
'
'因为返回的字符串类似 name1;value1;name2;value2;name3;value3; ....
'而且不固定长度
'所以这里用NameValueCollection返回。
Private Nv As NameValueCollection
Sub New(ByVal Str As String)
Nv = New NameValueCollection
Dim a As String() = Str.Split(";")
For i As Integer = 0 To a.Length - 1 Step 2
Dim t As Integer = i
Nv(a(t)) = a(t + 1)
Next
End Sub
'因为要添加到combobox,这里重载了一下tostring以显示文本
Overrides Function tostring() As String
Return Nv("ServerName")
End Function
End Class
调用代码
Sub GetSqlServers()
Me.Cursor = Cursors.WaitCursor
Dim a As ArrayList
Dim g As New GetServers
a = g.Send()
For Each c As SqlServer In a
Me.cb_Server.Items.Add(c)
Next
Me.Cursor = Cursors.Default
End Sub
1、DateTime 数字型
System.DateTime currentTime=new System.DateTime();
1.1 取当前年月日时分秒
currentTime=System.DateTime.Now;
1.2 取当前年
int 年=currentTime.Year;
1.3 取当前月
int 月=currentTime.Month;
1.4 取当前日
int 日=currentTime.Day;
1.5 取当前时
int 时=currentTime.Hour;
1.6 取当前分
int 分=currentTime.Minute;
1.7 取当前秒
int 秒=currentTime.Second;
1.8 取当前毫秒
int 毫秒=currentTime.Millisecond;
(变量可用中文)
2、Int32.Parse(变量) Int32.Parse("常量")
字符型转换 转为32位数字型
3、 变量.ToString()
字符型转换 转为字符串
12345.ToString("n"); //生成 12,345.00
12345.ToString("C"); //生成 ¥12,345.00
12345.ToString("e"); //生成 1.234500e+004
12345.ToString("f4"); //生成 12345.0000
12345.ToString("x"); //生成 3039 (16进制)
12345.ToString("p"); //生成 1,234,500.00%
4、变量.Length 数字型
取字串长度:
如: string str="中国"
int Len = str.Length ; //Len是自定义变量, str是求测的字串的变量名
5、System.Text.Encoding.Default.GetBytes(变量)
字码转换 转为比特码
如:byte[] bytStr = System.Text.Encoding.Default.GetBytes(str);
然后可得到比特长度:
len = bytStr.Length;
6、System.Text.StringBuilder("")
字符串相加,(+号是不是也一样?)
如:System.Text.StringBuilder sb = new System.Text.StringBuilder("");
sb.Append("中华");
sb.Append("人民");
sb.Append("共和国");
7、变量.Substring(参数1,参数2);
截取字串的一部分,参数1为左起始位数,参数2为截取几位。
如:string s1 = str.Substring(0,2);
8、String user_IP=Request.ServerVariables["REMOTE_ADDR"].ToString();
取远程用户IP地址
9、穿过代理服务器取远程用户真实IP地址:
if(Request.ServerVariables["HTTP_VIA"]!=null){
string user_IP=Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
}else{
string user_IP=Request.ServerVariables["REMOTE_ADDR"].ToString();
}
10、 Session["变量"];
存取Session值;
如,赋值: Session["username"]="小布什"
取值: Object objName=Session["username"];
String strName=objName.ToString();
清空: Session.RemoveAll();
11、String str=Request.QueryString["变量"];
用超链接传送变量。
如在任一页中建超链接:<a href=Edit.aspx?fbid=23>点击</a>
在Edit.aspx页中取值:String str=Request.QueryString["fdid"];
12、DOC对象.CreateElement("新建节点名");
创建XML文档新节点
13、父节点.AppendChild(子节点);
将新建的子节点加到XML文档父节点下
14、 父节点.RemoveChild(节点);
删除节点
15、Response
Response.Write("字串");
Response.Write(变量);
向页面输出。
Response.Redirect("URL地址");
跳转到URL指定的页面
16、char.IsWhiteSpce(字串变量,位数)——逻辑型
查指定位置是否空字符;
如:
string str="中国 人民"
Response.Write(char.IsWhiteSpace(str,2)); //结果为:True, 第一个字符是0位,2是第三个字符。
17、char.IsPunctuation('字符') --逻辑型
查字符是否是标点符号
如:Response.Write(char.IsPunctuation('A')); //返回:False
18、(int)'字符'
把字符转为数字,查代码点,注意是单引号。
如:
Response.Write((int)'中'); //结果为中字的代码:20013
19、(char)代码
把数字转为字符,查代码代表的字符。
如:
Response.Write((char)22269); //返回“国”字。
20、 Trim()
清除字串前后空格
21 、字串变量.Replace("子字串","替换为")
字串替换
如:
string str="中国"
str=str.Replace("国","央"); //将国字换为央字
Response.Write(str); //输出结果为“中央”
再如:(这个非常实用)
string str="这是<script>脚本"
str=str.Replace("<","<font><</font>"); //将左尖括号替换为<font> 与 < 与 </font> (或换为<,但估计经XML存诸后,再提出仍会还原)
Response.Write(str); //显示为:“这是<script>脚本”
如果不替换,<script>将不显示,如果是一段脚本,将运行;而替换后,脚本将不运行。
这段代码的价值在于:你可以让一个文本中的所有HTML标签失效,全部显示出来,保护你的具有交互性的站点。
具体实现:将你的表单提交按钮脚本加上下面代码:
string strSubmit=label1.Text; //label1是你让用户提交数据的控件ID。
strSubmit=strSubmit.Replace("<","<font><</font>");
然后保存或输出strSubmit。
用此方法还可以简单实现UBB代码。
22、Math.Max(i,j)
取i与j中的最大值
如 int x=Math.Max(5,10); // x将取值 10
23、字串对比一般都用: if(str1==str2){ } , 但还有别的方法:
(1)、
string str1; str2
//语法: str1.EndsWith(str2); __检测字串str1是否以字串str2结尾,返回布尔值.如:
if(str1.EndsWith(str2)){ Response.Write("字串str1是以"+str2+"结束的"); }
(2)、
//语法:str1.Equals(str2); __检测字串str1是否与字串str2相等,返回布尔值,用法同上.
(3)、
//语法 Equals(str1,str2); __检测字串str1是否与字串str2相等,返回布尔值,用法同上.
24、IndexOf() 、LastIndexOf()
查找字串中指定字符或字串首次(最后一次)出现的位置,返回索引值,如:
str1.IndexOf("字"); //查找“字”在str1中的索引值(位置)
str1.IndexOf("字串");//查找“字串”的第一个字符在str1中的索引值(位置)
str1.IndexOf("字串",3,2);//从str1第4个字符起,查找2个字符,查找“字串”的第一个字符在str1中的索引值(位置)
25、Insert()
在字串中指定索引位插入指定字符。如:
str1.Insert(1,"字");在str1的第二个字符处插入“字”,如果str1="中国",插入后为“中字国”;
26、PadLeft()、PadRight()
在字串左(或右)加空格或指定char字符,使字串达到指定长度,如:
<%
string str1="中国人"
str1=str1.PadLeft(10,'1'); //无第二参数为加空格
Response.Write(str1); //结果为“1111111中国人” , 字串长为10
%>
27、Remove()
从指定位置开始删除指定数的字符
字串对比一般都用: if(str1==str2){ } , 但还有别的方法:
1、
string str1; str2
//语法: str1.EndsWith(str2); __检测字串str1是否以字串str2结尾,返回布尔值.如:
if(str1.EndsWith(str2)){ Response.Write("字串str1是以"+str2+"结束的"); }
2、
//语法:str1.Equals(str2); __检测字串str1是否与字串str2相等,返回布尔值,用法同上.
3、
//语法 Equals(str1,str2); __检测字串str1是否与字串str2相等,返回布尔值,用法同上.
IndexOf()
查找字串中指定字符或字串首次出现的位置,返首索引值,如:
str1.IndexOf("字"); //查找“字”在str1中的索引值(位置)
str1.IndexOf("字串");//查找“字串”的第一个字符在str1中的索引值(位置)
str1.IndexOf("字串",3,2);//从str1第4个字符起,查找2个字符,查找“字串”的第一个字符在str1中的索引值(位置)
1.9 取中文日期显示——年月日时分
string strY=currentTime.ToString("f"); //不显示秒
1.10 取中文日期显示_年月
string strYM=currentTime.ToString("y");
1.11 取中文日期显示_月日
string strMD=currentTime.ToString("m");
1.12 取当前年月日,格式为:2003-9-23
string strYMD=currentTime.ToString("d");
1.13 取当前时分,格式为:14:24
string strT=currentTime.ToString("t");
Abs(number) 取得数值的绝对值。
Asc(String) 取得字符串表达式的第一个字符ASCII 码。
Atn(number) 取得一个角度的反正切值。
CallByName (object, procname, usecalltype,[args()]) 执行一个对象的方法、设定或传回对象的属性。
CBool(expression) 转换表达式为Boolean 型态。
CByte(expression) 转换表达式为Byte 型态。
CChar(expression) 转换表达式为字符型态。
CDate(expression) 转换表达式为Date 型态。
CDbl(expression) 转换表达式为Double 型态。
CDec(expression) 转换表达式为Decimal 型态。
CInt(expression) 转换表达式为Integer 型态。
CLng(expression) 转换表达式为Long 型态。
CObj(expression) 转换表达式为Object 型态。
CShort(expression) 转换表达式为Short 型态。
CSng(expression) 转换表达式为Single 型态。
CStr(expression) 转换表达式为String 型态。
Choose (index, choice-1[, choice-2, ... [, choice-n]]) 以索引值来选择并传回所设定的参数。
Chr(charcode) 以ASCII 码来取得字符内容。
Close(filenumberlist) 结束使用Open 开启的档案。
Cos(number) 取得一个角度的余弦值。
Ctype(expression, typename) 转换表达式的型态。
DateAdd(dateinterval, number, datetime) 对日期或时间作加减。
DateDiff(dateinterval, date1, date2) 计算两个日期或时间间的差值。
DatePart (dateinterval, date) 依接收的日期或时间参数传回年、月、日或时间。
DateSerial(year, month, day) 将接收的参数合并为一个只有日期的Date 型态的数据。
DateValue(datetime) 取得符合国别设定样式的日期值,并包含时间。
Day(datetime) 依接收的日期参数传回日。
Eof(filenumber) 当抵达一个被开启的档案结尾时会传回True。
Exp(number) 依接收的参数传回e 的次方值。
FileDateTime(pathname) 传回档案建立时的日期、时间。
FileLen(pathname) 传回档案的长度,单位是Byte。
Filter(sourcearray, match[, include[, compare]]) 搜寻字符串数组中的指定字符串,凡是数组元素中含有指定字符串,会将它们结合成新的字符串数组并传回。若是要传回不含指定字符串的数组元素,则include 参数设为False。compare 参数则是设定搜寻时是否区分大小写,此时只要给TextCompare 常数或1 即可。
Fix(number) 去掉参数的小数部分并传回。
Format(expression[, style[, firstdayofweek[, firstweekofyear]]]) 将日期、时间和数值资料转为每个国家都可以接受的格式。
FormatCurrency(expression[,numdigitsafterdecimal [,includeleadingdigit]]) 将数值输出为金额型态。
numdigitsafterdecimal 参数为小数字数,includeleadingdigit 参数为当整数为0 时是否补至整数字数。
FormatDateTime(date[,namedformat]) 传回格式化的日期或时间数据。
FormatNumber(expression[,numdigitsafterdecimal [,includeleadingdigit]]) 传回格式化
的数值数据。Numdigitsafterdecimal 参数为小数字数,includeleadingdigit 参数为当整数为0 时是否补至整数字数。
FormatPercent(expression[,numdigitsafterdecimal [,includeleadingdigit]]) 传回转换为百分比格式的数值数据。numdigitsafterdecimal 参数为小数字数,includeleadingdigit 参数为当整数为0 时是否补至整数字数。
GetAttr(filename) 传回档案或目录的属性值。
Hex(number) 将数值参数转换为16 进制值。
Hour(time) 传回时间的小时字段,型态是Integer。
Iif(expression, truepart, falsepart) 当表达式的传回值为True 时执行truepart 字段的程序,反之则执行falsepart 字段。
InStr([start, ]string1, string2) 搜寻string2 参数设定的字符出现在字符串的第几个字符,start 为由第几个字符开始寻找,string1 为欲搜寻的字符串,string2 为欲搜寻的字符。
Int(number) 传回小于或等于接收参数的最大整数值。
IsArray(varname) 判断一个变量是否为数组型态,若为数组则传回True,反之则为False。
IsDate(expression) 判断表达式内容是否为DateTime 型态,若是则传回True,反之则为False。
IsDbNull(expression) 判断表达式内容是否为Null,若是则传回True,反之则为False。
IsNumeric(expression) 判断表达式内容是否为数值型态,若是则传回True,反之则为False。
Join(sourcearray[, delimiter]) 将字符串数组合并唯一个字符串,delimiter 参数是设定在各个元素间加入新的字符串。
Lcase(string) 将字符串转换为小写字体。
Left(string, length) 由字符串左边开始取得length 参数设定长度的字符。
Len(string) 取得字符串的长度。
Log(number) 取得数值的自然对数。
Ltrim(string) 去掉字符串的左边空白部分。
Mid(string, start[, length]) 取出字符串中strat 参数设定的字符后length 长度的字符串,若length 参数没有设定,则取回start 以后全部的字符。
Minute(time) 取得时间内容的分部分,型态为Integer。
MkDir(path) 建立一个新的目录。
Month(date) 取得日期的月部分,型态为Integer。
MonthName(month) 依接收的月份数值取得该月份的完整写法。
Now() 取得目前的日期和时间。
Oct(number) 将数值参数转换为8 进制值。
Replace(expression, find, replace) 将字符串中find 参数指定的字符串转换为replace 参数指定的字符串。
Right(string,length) 由字符串右边开始取得length 参数设定长度的字符。
RmDir(path) 移除一个空的目录。
Rnd() 取得介于0 到1 之间的小数,如果每次都要取得不同的值,使用前需加上Randomize 叙述。
Rtrim(string) 去掉字符串的右边空白部分。
Second(time) 取得时间内容的秒部分,型态为Integer。
Sign(number) 取得数值内容是正数或负数,正数传回1,负数传回-1,0 传回0。
Sin(number) 取得一个角度的正弦值。
Space(number) 取得number 参数设定的空白字符串。
Split(expression[, delimiter]) 以delimiter 参数设定的条件字符串来将字符串分割为字符串数组。
Sqrt(number) 取得一数值得平方根。
Str(number) 将数字转为字符串后传回。
StrReverse(expression) 取得字符串内容反转后的结果。
Tan(number) 取得某个角度的正切值。
TimeOfDay() 取得目前不包含日期的时间。
Timer() 取得由0:00 到目前时间的秒数,型态为Double。
TimeSerial(hour, minute, second) 将接收的参数合并为一个只有时间Date 型态的数据。
TimaValue(time) 取得符合国别设定样式的时间值。
Today() 取得今天不包含时间的日期。
Trim(string) 去掉字符串开头和结尾的空白。
TypeName(varname) 取得变量或对象的型态。
Ubound(arrayname[, dimension]) 取得数组的最终索引值,dimension 参数是指定取得第几维度的最终索引值。
Ucase(string) 将字符串转换为大写。
Val(string) 将代表数字的字符串转换为数值型态,若字符串中含有非数字的内容则会将其去除后,合并为一数字。
Weekday(date) 取的参数中的日期是一个星期的第几天,星期天为1、星期一为2、星期二为3 依此类推。
WeekDayName(number) 依接收的参数取得星期的名称,可接收的参数为1 到7,星期天为1、星期一为2、星期二为3 依此类推
一、返回多个数据集
检查你的访问数据库的代码,看是否存在着要返回多次的请求。每次往返降低了你的应用程序的每秒能够响应请求的次数。通过在单个数据库请求中返回多个结果集,可以减少与数据库通信的时间,使你的系统具有扩展性,也可以减少数据库服务器响应请求的工作量。
如果你是用动态的SQL语句来返回多个数据集,那我建议你用存储过程来替代动态的SQL语句。是否把业务逻辑写到存储过程中,这个有点争议。但是我认为,把业务逻辑写到存储过程里面可以限制返回结果集的大小,减小网络数据的流量,在逻辑层也不用在过滤数据,这是一个好事情。
用SqlCommand对象的ExecuteReader方法返回一个强类型的业务对象,再调用NextResult方法来移动数据集指针来定位数据集。示例一演示了一个返回多个ArrayList强类型对象的例子。只从数据库中返回你需要的数据可以大大的减小你的服务器所耗用的内存。
二、对数据进行分页
ASP。NET的DataGrid有一个非常有用的功能:分页。如果DataGrid允许分页,在某一时刻它只下载某一页的数据,另外,它有一个数据分页的济览导航栏,它让你可以选择浏览某一页,而且每次只下载一页的数据。
但是它有一个小小的缺点,就是你必须把所有的数据都绑定到DataGrid中。也就是说,你的数据层必须返回所有的数据,然后DataGrid再根据当前页过滤出当前页所需要的数据显示出来。如果有一个一万条记录的结果集要用DataGrid进行分页,假设DataGrid每页只显示25条数据,那就意味着每次请求都有9975条数据都是要丢弃的。每次请求都要返回这么大的数据集,对应用程序的性能影响是非常大的。
一个好的解决方案是写一个分页的存储过程,例子2是一个用于对Northwind数据库orders表的分页存储过程。你只需要传当前页码,每页显示的条数两个参数进来,存储过程会返回相应的结果。
在服务器端,我专门写了一个分页的控件来处理数据的分页,在这里,我用了第一个方法,在一个存储过程里面返回了两个结果集:数据记录总数和要求的结果集。
返回的记录总数取决于要执行查询,例如,一个where条件可以限制返回的结果集的大小。因为在分页界面中必须要根据数据集记录的大小来计算总的页数,所以必须要返回结果集的记录数。例如,如果一共有1000000条记录,如果用where条件就可以过滤成只返回1000条记录,存储过程的分页逻辑应该知道返回那些需要显示的数据。
三、连接池
用TCP来连接你的应用程序与数据库是一件昂贵的事情(很费时的事情),微软的开发者可以通过用连接池来反复的使用数据库的连接。比起每次请求都用TCP来连一次数据库,连接池只有在不存在有效的连接时才新建一个TCP连接。当关闭一个连接的时候,它会被放到池中,它仍然会保持与数据库的连接,这样就可以减少与数据库的TCP连接次数。
当然,你要注意那些忘记关的连接,你应在每次用完连接后马上关闭它。我要强调的是:无论什么人说.net framework中的GC(垃圾收集器)总会在你用完连接对象后调用连接对象的Close或者Dispose方法显式的关闭你的连接。不要期望CLR会在你想象的时间内关掉连接,虽然CLR最终都要销毁对象和关闭边接,但是我们并不能确定它到底会在什么时候做这些事情。
要用连接池优化,有两条规则,第一,打开连接,处理数据,然后关闭连接。如果你必须在每次请求中多次打开或关闭连接,这好过一直打开一个边接,然后把它传到各个方法中。第二,用相同的连接字符串(或者用相同的用户标识,当你用集成认证的时候)。如果你没有用相同的连接字符串,如你用基于登录用户的连接字符串,这将不能利用连接池的优化功能。如果你用的是集成的论证,因为用户很多,所以你也不能充分利用连接池的优化功能。.NET CLR提供了一个数据性能计数器,它在我们需要跟踪程序性能特性的时候非常有用,当然也包括连接池的跟踪了。
无论你的应用程序什么时候要连在另一台机子的资源,如数据库,你都应该重点优化你连资源所花的时间,接收和发送数据的时间,以及往返回之间的次数。优化你的应用程序中的每一个处理点(process hop),它是提高你的应用的性能的出发点。
应用程序层包含与数据层连接,传送数据到相应的类的实例以及业务处理的逻辑。例如,在Community Server中,要组装一个Forums或者Threads集合,然后应用业务逻辑,如授权,更重要的,这里要完成缓存逻辑。
四、ASP.NET缓存API
在写应用程序之前,你要做的第一件事是让应用程序最大化的利用ASP.NET的缓存功能。
如果你的组件是要在Asp.net应用程序中运行,你只要把System.Web.dll引用到你的项目中就可以了。然后用HttpRuntime.Cache属性就可访问Cache了(也可以通过Page.Cache或HttpContext.Cache访问)。
有以下几条缓存数据的规则。第一,数据可能会被频繁的被使用,这种数据可以缓存。第二,数据的访问频率非常高,或者一个数据的访问频率不高,但是它的生存周期很长,这样的数据最好也缓存起来。第三是一个常常被忽略的问题,有时候我们缓存了太多数据,通常在一台X86的机子上,如果你要缓存的数据超过800M的话,就会出现内存溢出的错误。所以说缓存是有限的。换名话说,你应该估计缓存集的大小,把缓存集的大小限制在10以内,否则它可能会出问题。在Asp.net中,如果缓存过大的话也会报内存溢出错误,特别是如果缓存大的DataSet对象的时候。
这里有几个你必须了解的重要的缓存机制。首先是缓存实现了“最近使用”原则( a least-recently-used algorithm),当缓存少的时候,它会自动的强制清除那些无用的缓存。其次 “条件依赖”强制清除原则(expiration dependencies),条件可以是时间,关键字和文件。以时间作为条件是最常用的。在asp.net2.0中增加一更强的条件,就是数据库条件。当数据库中的数据发生变化时,就会强制清除缓存。要更深入的了解数据库条件依赖请看Dino Esposito 在MSDN杂志2004年七月刊的Cutting Edge专栏文章。Asp.net的缓存架构如下图所示:
五、预请求缓存
在前面,我提到过即使我们只对某些地方作了一个小小的性能改进也可以获得大的性能提升,我非常喜欢用预请求缓存来提升程序的性能。
虽然Cache API设计成用来保存某段时间的数据,而预请求缓存只是保存某个时期的某个请求的内容。如果某个请求的访问频率高,而且这个请求只需要提取,应用,修改或者更新数据一次。那么就可以预缓存该请求。我们举个例子来说明。
在CS的论坛应用程序中,每一个页面的服务器控件都要求得到用于决定它的皮肤(skin)的自定义的数据,以决定用哪个样式表及其它的一些个性化的东西。这里面的某些数据可能要长时间的保存,有些时间则不然,如控件的skin数据,它只需要应用一次,而后就可以一直使用。
要实现预请求缓存,用Asp.net 的HttpContext类,HttpContext类的实例在每一个请求中创建,在请求期间的任何地方都可以通过HttpContext.Current属性访问。HttpContext类有一个Items集合属性,在请求期间所有的对象和数据都被添加到这个集合中缓存起来。和你用Cache缓存访问频率高数据一样,你可以用HttpContext.Items缓存那些每个请求都要用到的基础数据。它背后的逻辑很简单:我们向HttpContext.Items中添加一个数据,然后再从它里面读出数据。
六、后台处理
通过上面的方法你的应用程序应该运行得很快了,是不是?但是在某些时候,程序中的一次请求中可能要执行一个非常耗时的任务。如发送邮件或者是检查提交的数据的正确性等。
当我们把asp.net Forums 1.0集成在CS中的时侯,发现提交一个新的帖子的时候会非常的慢。每次新增一个帖子的时侯,应用程序首先要检查这个帖子是不是重复提的,然后用“badword”过滤器来过滤,检查图片附加码,作帖子的索引,把它添加到合适的队列中,验证它的附件,最后,发邮件到它的订阅者邮件箱中。显然,这个工作量很大。
结果是它把大量的时间都花在做索引和发送邮件中了。做帖子的索引是一项很耗时的操作,而发邮件给订阅都需要连接到SMTP服务,然后给每一个订阅者都发一封邮件,随着订阅用户的增加,发送邮件的时间会更长。
索引和发邮件并不需要在每次请求时触发,理想状态下,我们想要批量的处理这些操作,每次只发25封邮件或者每隔5分钟把所有的要发的新邮件发一次。我们决定使用与数据库原型缓存一样的代码,但是失败了,所以又不得不回到VS.NET 2005。
我们在System.Threading命名空间下找到了Timer类,这个类非常有用,但却很少有人知道,Web开发人员则更少有人知道了。一旦他建了该类的实例,每隔一个指定的时间,Timer类就会从线程池中的一个线程中调用指定的回调函数。这意味着你的asp.net应用程序可以在没有请求的时候也可以运行。这就是后以处理的解决方案。你就可以让做索引和发邮件工作在后台运行,而不是在每次请求的时候必须执行。
后台运行的技术有两个问题,第一是,当你的应用程序域卸载后,Timer类实例就会停止运行了。也就是不会调用回调方法了。另外,因为CLR的每个进程中都有许多的线程在运行,你将很难让Timer获得一个线程来执行它,或者能执行它,但会延时。Asp.net层要尽量少的使用这种技术,以减少进程中线程的数量,或者只让请求用一小部分的线程。当然如果你有大量的异步工作的话,那就只能用它了。
你可以从http://www.rob-howard.net/中下载示例程序,请下载Blackbelt TechEd 2004的示例程序。
七、页面输出缓存和代理服务
Asp.net是你的界面层(或者说应该是),它包含页面,用户控件,服务器控件(HttpHandlers 和HttpModules)以及它们生成的内容。如果你有一个Asp.net页面用来输出html,xml,imgae或者是其它的数据,对每一个请求你都用代码来生成相同的输出内容,你就很有必要考虑用页面输出缓存了。
你只要简单的把下面的这一行代码复制到你的页面中就可以实现了:<%@ PageOutputCache VaryByParams=”none” Duration=”60” %> 你就可以有效的利用第一次请求里生成的页面输出缓存内容,60秒后重新生成一道页面内容。这种技术其实也是运用一些低层的Cache API来实现。用页面输出缓存有几个参数可以配置,如上面所说的VaryByParams参数,该参数表示什么时候触发重输出的条件,也可以指定在Http Get或Http Post 请求模式下缓存输出。例如当我们设置该参数为VaryByParams=”Report”的时候,default.aspx?Report=1或者default.aspx?Report=2请求的输出都会被缓存起来。参数的值可以是多个用分号隔开参数。
许多人都没有意识到当用页面输出缓存的时候,asp.net也会生成HTTP头集(HTTP Header)保存在下游的缓存服务器中,这些信息可以用于Microsoft Internet安全性中以及加速服务器的响应速度。当HTTP缓存的头被重置时,请求的内容会被缓在网络资源中,当客户端再次请求该内容时,就不会再从源服务器上获得内容了,而直接从缓存中获得内容。
虽然用页面输出缓存不提高你的应用程序性能,但是它能减少了从的服务器中加载已缓存页面内容的次数。当然,这仅限于缓存匿名用户可以访问的页面。因为一旦页面被缓存后,就不能再执行授权操作了。
八、 用IIS6.0的Kernel Caching
如果你的应用程序没用运行在IIS6.0(windows server 2003)中,那么你就失去了一些很好的提高应用程序性能的方法。在第七个方法中,我讲了用页面输出缓存提高应用程序的性能的方法。在IIS5.0中,当一个请求到来到IIS后,IIS会把它转给asp.net,当应用了页面输出缓存时,ASP.NET中的HttpHandler会接到该请求,HttpHandler从缓存中把内容取出来并返回。
如果你用的是IIS6.0,它有一个非常好的功能就是Kernel Caching,而且你不必修改asp.net程序中任何代码。当asp.net接到一个已缓存的请求,IIS的Kernel Cache会从缓存中得到它的一份拷贝。当从网络中传来一个请求的时,Kernel层会得到该请求,如果该请求被缓存起来了,就直接把缓存的数据返回,这样就完工了。这就意味着当你用IIS的Kernel Caching来缓存页面输出时,你将获得不可置信的性能提升。在开发VS.NET 2005的 asp.net时有一点,我是专门负asp.net性能的程序经理,我的程序员用了这个方法,我看了所有日报表数据,发现用kernel model caching的结果总是最快的。它们的一个共同的特征就是网络的请求和响应量很大,但IIS只占用了5%的CPU资源。这是令人惊奇的。有许多让你使用用IIS6.0的理由,但kernel cashing是最好的一个。
九、 用Gzip压缩数据
除非你的CPU占用率太高了,才有必要用提升服务器性能的技巧。用gzip压缩数据的方法可以减少你发送到服务端的数据量,也可以提高页面的运行速度,同时也减少了网络的流量。怎么样更好的压缩数据取决于你要发送的数据,还有就是客户端的浏览器支不支持(IIS把用gzip压缩后的数据发送到客户端,客户端要支持gzip才能解析,IE6.0和Firefox都支持)。这样你的服务器每秒能多响应一些请求,同样,你也减少了发送响应的数据量,也就能多发送一些请求了。
好消息,gzip压缩已经被集成在IIS6.0中了,它比IIS5.0中gzip更好。不幸的是,在IIS6.0中启用gzip压缩,你不能在IIS6.0的属性对话中设置。IIS开发团队把gzip压缩功能开发出来了,但他们却忘了在管理员窗口中让管理员能很方便的启用它。要启用gzip压缩,你只能深入IIS6.0的xml配置文件中修改它的配置。
除了阅读本文以外,只好再看看Brad Wilson写的 IIS6 压缩一文:http://www.dotnetdevs.com/articles/IIS6compression.aspx;另外还有一篇介绍aspx压缩基础知识的文章,Enable ASPX Compression in IIS。但是要注意,在IIS6中动态压缩和kernel cashing是互斥的。
十、 服务器控件的ViewState
ViewState是asp.net中的一个特性,它用于把生成页面要用的一状态值保存在一个隐藏域中。当页面被回传到服务器时,服务器要解析,校验和应用ViewState中的数据以还原页面的控件树。ViewState是一个非常有用的特性,它能持久化客户端的状态而不用cookie或者服务器的内存。大部分的服务器控件都是用ViewState来持久化那些在页面中与用户交互的元素的状态值。例如,用以保存用于分页的当前页的页码。
用ViewState会带来一些负面的影响。首先,它加大的服务器的响应和请求的时间。其次,每次回传时都增加了序列化和反序列化数据的时间。最后,它还消耗了服务器更多的内存。
许多的服务器控件很趋于使用ViewState,如众所周知的DataGrid,而有时候是没有必须使用的。默认情况下是允许使用ViewState的,如果你不想使用ViewState的话,你可以在控件或页面级别把关闭它。在控件中,你只要把EnableViewState属性设为False就可以了;你也可以在页面中设置,使它的范围扩展到整个页面中: <%@ Page EnableViewState=”false” %> 如果页面无需回传或者每次请求页面只是呈现控件。你就应该在页面级别中把ViewState关掉。
转载:http://piaoye.cnblogs.com/archive/2005/09/09/233363.html
CONVERT的使用方法:
////////////////////////////////////////////////////////////////////////////////////////
格式:
CONVERT(data_type,expression[,style])
说明:
此样式一般在时间类型(datetime,smalldatetime)与字符串类型(nchar,nvarchar,char,varchar)
相互转换的时候才用到.
例子:
SELECT CONVERT(varchar(30),getdate(),101) now
结果为
now
---------------------------------------
09/15/2001
/////////////////////////////////////////////////////////////////////////////////////
style数字在转换时间时的含义如下
-------------------------------------------------------------------------------------------------
Style(2位表示年份) | Style(4位表示年份) | 输入输出格式
-------------------------------------------------------------------------------------------------
- | 0 or 100 | mon dd yyyy hh:miAM(或PM)
-------------------------------------------------------------------------------------------------
1 | 101 | mm/dd/yy
-------------------------------------------------------------------------------------------------
2 | 102 | yy-mm-dd
-------------------------------------------------------------------------------------------------
3 | 103 | dd/mm/yy
-------------------------------------------------------------------------------------------------
4 | 104 | dd-mm-yy
-------------------------------------------------------------------------------------------------
5 | 105 | dd-mm-yy
-------------------------------------------------------------------------------------------------
6 | 106 | dd mon yy
-------------------------------------------------------------------------------------------------
7 | 107 | mon dd,yy
-------------------------------------------------------------------------------------------------
8 | 108 | hh:mm:ss
-------------------------------------------------------------------------------------------------
- | 9 or 109 | mon dd yyyy hh:mi:ss:mmmmAM(或PM)
-------------------------------------------------------------------------------------------------
10 | 110 | mm-dd-yy
-------------------------------------------------------------------------------------------------
11 | 111 | yy/mm/dd
-------------------------------------------------------------------------------------------------
12 | 112 | yymmdd
-------------------------------------------------------------------------------------------------
- | 13 or 113 | dd mon yyyy hh:mi:ss:mmm(24小时制)
-------------------------------------------------------------------------------------------------
14 | 114 | hh:mi:ss:mmm(24小时制)
-------------------------------------------------------------------------------------------------
- | 20 or 120 | yyyy-mm-dd hh:mi:ss(24小时制)
-------------------------------------------------------------------------------------------------
- | 21 or 121 | yyyy-mm-dd hh:mi:ss:mmm(24小时制)
-------------------------------------------------------------------------------------------------
Transact SQL 语 句 功 能
========================================================================
--数据操作
SELECT --从数据库表中检索数据行和列
INSERT --向数据库表添加新数据行
DELETE --从数据库表中删除数据行
UPDATE --更新数据库表中的数据
--数据定义
CREATE TABLE --创建一个数据库表
DROP TABLE --从数据库中删除表
ALTER TABLE --修改数据库表结构
CREATE VIEW --创建一个视图
DROP VIEW --从数据库中删除视图
CREATE INDEX --为数据库表创建一个索引
DROP INDEX --从数据库中删除索引
CREATE PROCEDURE --创建一个存储过程
DROP PROCEDURE --从数据库中删除存储过程
CREATE TRIGGER --创建一个触发器
DROP TRIGGER --从数据库中删除触发器
CREATE SCHEMA --向数据库添加一个新模式
DROP SCHEMA --从数据库中删除一个模式
CREATE DOMAIN --创建一个数据值域
ALTER DOMAIN --改变域定义
DROP DOMAIN --从数据库中删除一个域
--数据控制
GRANT --授予用户访问权限
DENY --拒绝用户访问
REVOKE --解除用户访问权限
--事务控制
COMMIT --结束当前事务
ROLLBACK --中止当前事务
SET TRANSACTION --定义当前事务数据访问特征
--程序化SQL
DECLARE --为查询设定游标
EXPLAN --为查询描述数据访问计划
OPEN --检索查询结果打开一个游标
FETCH --检索一行查询结果
CLOSE --关闭游标
PREPARE --为动态执行准备SQL 语句
EXECUTE --动态地执行SQL 语句
DESCRIBE --描述准备好的查询
---局部变量
declare @id char(10)
--set @id = '10010001'
select @id = '10010001'
---全局变量
---必须以@@开头
--IF ELSE
declare @x int @y int @z int
select @x = 1 @y = 2 @z=3
if @x > @y
print 'x > y' --打印字符串'x > y'
else if @y > @z
print 'y > z'
else print 'z > y'
--CASE
use pangu
update employee
set e_wage =
case
when job_level = ’1’ then e_wage*1.08
when job_level = ’2’ then e_wage*1.07
when job_level = ’3’ then e_wage*1.06
else e_wage*1.05
end
--WHILE CONTINUE BREAK
declare @x int @y int @c int
select @x = 1 @y=1
while @x < 3
begin
print @x --打印变量x 的值
while @y < 3
begin
select @c = 100*@x + @y
print @c --打印变量c 的值
select @y = @y + 1
end
select @x = @x + 1
select @y = 1
end
--WAITFOR
--例 等待1 小时2 分零3 秒后才执行SELECT 语句
waitfor delay ’01:02:03’
select * from employee
--例 等到晚上11 点零8 分后才执行SELECT 语句
waitfor time ’23:08:00’
SELECT
select *(列名) from table_name(表名) where column_name operator value ex宿主)
select * from stock_information where stockid = str(nid)
stockname = 'str_name'
stockname like '% find this %'
stockname like '[a-zA-Z]%' --------- ([]指定值的范围)
stockname like '[^F-M]%' --------- (^排除指定范围)
--------- 只能在使用like关键字的where子句中使用通配符)
or stockpath = 'stock_path'
or stocknumber < 1000
and stockindex = 24
not stocksex = 'man'
stocknumber between 20 and 100
stocknumber in(10,20,30)
order by stockid desc(asc) --------- 排序,desc-降序,asc-升序
order by 1,2 --------- by列号
stockname = (select stockname from stock_information where stockid = 4)
--------- 子查询
--------- 除非能确保内层select只返回一个行的值
--------- 否则应在外层where子句中用一个in限定符
select distinct column_name form table_name
--------- distinct指定检索独有的列值,不重复
select stocknumber ,"stocknumber + 10" = stocknumber + 10 from table_name
select stockname , "stocknumber" = count(*) from table_name group by stockname
--------- group by 将表按行分组,指定列中有相同的值
having count(*) = 2 --------- having选定指定的组
select *
from table1, table2
where table1.id *= table2.id -------- 左外部连接,table1中有的而table2中没有得以null表示
table1.id =* table2.id -------- 右外部连接
select stockname from table1
union [all] -------- union合并查询结果集,all-保留重复行
select stockname from table2
insert
insert into table_name (Stock_name,Stock_number) value ("xxx","xxxx"
value (select Stockname , Stocknumber from Stock_table2)
-------value为select语句
update
update table_name set Stockname = "xxx" [where Stockid = 3]
Stockname = default
Stockname = null
Stocknumber = Stockname + 4
delete
delete from table_name where Stockid = 3
truncate table_name --------- 删除表中所有行,仍保持表的完整性
drop table table_name --------- 完全删除表
alter table -------- 修改数据库表结构
alter table database.owner.table_name add column_name char(2) null ..
sp_help table_name -------- 显示表已有特征
create table table_name (name char(20), age smallint, lname varchar(30))
insert into table_name select -------- 实现删除列的方法(创建新表)
alter table table_name drop constraint Stockname_default
--------- 删除Stockname的default约束
常用函数(function)
转换函数
convert(数据类型,值,格式)
统计函数
AVG --求平均值
COUNT --统计数目
MAX --求最大值
MIN --求最小值
SUM --求和
AVG
use pangu
select avg(e_wage) as dept_avgWage
from employee
group by dept_id
MAX
--求工资最高的员工姓名
use pangu
select e_name
from employee
where e_wage =
(select max(e_wage)
from employee)
STDEV()
--STDEV()函数返回表达式中所有数据的标准差
--STDEVP()
--STDEVP()函数返回总体标准差
VAR()
--VAR()函数返回表达式中所有值的统计变异数
VARP()
--VARP()函数返回总体变异数
算术函数
三角函数
SIN(float_expression) --返回以弧度表示的角的正弦
COS(float_expression) --返回以弧度表示的角的余弦
TAN(float_expression) --返回以弧度表示的角的正切
COT(float_expression) --返回以弧度表示的角的余切
反三角函数
ASIN(float_expression) --返回正弦是FLOAT 值的以弧度表示的角
ACOS(float_expression) --返回余弦是FLOAT 值的以弧度表示的角
ATAN(float_expression) --返回正切是FLOAT 值的以弧度表示的角
ATAN2(float_expression1,float_expression2)
------返回正切是float_expression1 /float_expres-sion2的以弧度表示的角
DEGREES(numeric_expression)
------把弧度转换为角度返回与表达式相同的数据类型可为
------INTEGER/MONEY/REAL/FLOAT 类型
RADIANS(numeric_expression)
------把角度转换为弧度返回与表达式相同的数据类型可为
------INTEGER/MONEY/REAL/FLOAT 类型
EXP(float_expression) --返回表达式的指数值
LOG(float_expression) --返回表达式的自然对数值
LOG10(float_expression)--返回表达式的以10 为底的对数值
SQRT(float_expression) --返回表达式的平方根
取近似值函数
CEILING(numeric_expression)
-------返回>=表达式的最小整数返回的数据类型与表达式相同可为
-------INTEGER/MONEY/REAL/FLOAT 类型
FLOOR(numeric_expression)
-------返回<=表达式的最小整数返回的数据类型与表达式相同可为
-------INTEGER/MONEY/REAL/FLOAT 类型
ROUND(numeric_expression)
-------返回以integer_expression 为精度的四舍五入值返回的数据
-------类型与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型
ABS(numeric_expression)
-------返回表达式的绝对值返回的数据类型与表达式相同可为
-------INTEGER/MONEY/REAL/FLOAT 类型
SIGN(numeric_expression)
-------测试参数的正负号返回0 零值1 正数或-1 负数返回的数据类型
-------与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型
PI() -------返回值为π 即3.1415926535897936
RAND([integer_expression])
-------用任选的[integer_expression]做种子值得出0-1 间的随机浮点数
字符串函数
ASCII() ------函数返回字符表达式最左端字符的ASCII 码值
CHAR() ------函数用于将ASCII 码转换为字符
------如果没有输入0 ~ 255 之间的ASCII 码值CHAR 函数会返回一个NULL 值
LOWER() ------函数把字符串全部转换为小写
UPPER() ------函数把字符串全部转换为大写
STR() ------函数把数值型数据转换为字符型数据
LTRIM() ------函数把字符串头部的空格去掉
RTRIM() ------函数把字符串尾部的空格去掉
LEFT(),RIGHT(),SUBSTRING() --函数返回部分字符串
CHARINDEX(),PATINDEX() --函数返回字符串中某个指定的子串出现的开始位置
SOUNDEX() ------函数返回一个四位字符码
------SOUNDEX函数可用来查找声音相似的字符串但SOUNDEX函数对数字和汉字均只返回0 值
DIFFERENCE() ------函数返回由SOUNDEX 函数返回的两个字符表达式的值的差异
------0 两个SOUNDEX 函数返回值的第一个字符不同
------1 两个SOUNDEX 函数返回值的第一个字符相同
------2 两个SOUNDEX 函数返回值的第一二个字符相同
------3 两个SOUNDEX 函数返回值的第一二三个字符相同
------4 两个SOUNDEX 函数返回值完全相同同
QUOTENAME() ------函数返回被特定字符括起来的字符串
/**//*select quotename('abc', '{') quotename('abc')
运行结果如下
{
{abc} [abc]*/
REPLICATE() ------函数返回一个重复character_expression 指定次数的字符串
/**//*select replicate('abc', 3) replicate( 'abc', -2)
运行结果如下
abcabcabc NULL*/
REVERSE() ------函数将指定的字符串的字符排列顺序颠倒
REPLACE() ------函数返回被替换了指定子串的字符串
/**//*select replace('abc123g', '123', 'def')
运行结果如下
abcdefg*/
SPACE() ------函数返回一个有指定长度的空白字符串
STUFF() ------函数用另一子串替换字符串指定位置长度的子串
数据类型转换函数
CAST() 函数语法如下
CAST() ( AS [ length ])
CONVERT() 函数语法如下
CONVERT() ([ length ], [, style])
select cast(100+99 as char) convert(varchar(12), getdate())
运行结果如下
199 Jan 15 2000
日期函数
DAY() ------函数返回date_expression 中的日期值
MONTH() ------函数返回date_expression 中的月份值
YEAR() ------函数返回date_expression 中的年份值
DATEADD( , ,)
-----函数返回指定日期date 加上指定的额外日期间隔number 产生的新日期
DATEDIFF( , ,)
-----函数返回两个指定日期在datepart 方面的不同之处
DATENAME( , ------函数以字符串的形式返回日期的指定部分
DATEPART( , ------函数以整数值的形式返回日期的指定部分
GETDATE() ------函数以DATETIME 的缺省格式返回系统当前的日期和时间
系统函数
APP_NAME() ------函数返回当前执行的应用程序的名称
COALESCE() -----函数返回众多表达式中第一个非NULL 表达式的值
COL_LENGTH(<'table_name'>, <'column_name'> ----函数返回表中指定字段的长度值
COL_NAME(, ----函数返回表中指定字段的名称即列名
DATALENGTH() -----函数返回数据表达式的数据的实际长度
DB_ID(['database_name']) ------函数返回数据库的编号
DB_NAME(database_id) ------函数返回数据库的名称
HOST_ID() -----函数返回服务器端计算机的名称
HOST_NAME() -----函数返回服务器端计算机的名称
IDENTITY([, seed increment]) [AS column_name])
--IDENTITY() 函数只在SELECT INTO 语句中使用用于插入一个identity column列到新表中
/**//*select identity(int, 1, 1) as column_name
into newtable
from oldtable*/
ISDATE() ----函数判断所给定的表达式是否为合理日期
ISNULL(, --函数将表达式中的NULL 值用指定值替换
ISNUMERIC() ----函数判断所给定的表达式是否为合理的数值
NEWID() ----函数返回一个UNIQUEIDENTIFIER 类型的数值
NULLIF(,
----NULLIF 函数在expression1 与expression2 相等时返回NULL 值若不相等时则返回xpression1 的值最近找到一很好的SQL存储过程,用过都觉得很不错,执行效率也可以,在此推荐给大家.
——缘易
CREATE proc up_GetTopicList
@a_TableList Varchar(200), --要查询的字段
@a_TableName Varchar(30), --要查询的表名
@a_SelectWhere Varchar(500), --查询限制条件
@a_SelectOrderId Varchar(20), --查询主键
@a_SelectOrder Varchar(50), --排序字段
@a_intPageNo int,
@a_intPageSize int,
@RecordCount int OUTPUT
as
/**//*定义局部变量*/
declare @intBeginID int
declare @intEndID int
declare @intRootRecordCount int
declare @intRowCount int
declare @TmpSelect NVarchar(600)
/**//*关闭计数*/
set nocount on
/**//*求总共根贴数*/
select @TmpSelect = 'set nocount on;select @SPintRootRecordCount = count(*) from '+@a_TableName+' '+@a_SelectWhere
execute sp_executesql
@TmpSelect,
N'@SPintRootRecordCount int OUTPUT',
@SPintRootRecordCount=@intRootRecordCount OUTPUT
select @RecordCount = @intRootRecordCount
if (@intRootRecordCount = 0) --如果没有贴子,则返回零
return 0
/**//*判断页数是否正确*/
if (@a_intPageNo - 1) * @a_intPageSize > @intRootRecordCount
return (-1)
/**//*求开始rootID*/
set @intRowCount = (@a_intPageNo - 1) * @a_intPageSize + 1
/**//*限制条数*/
select @TmpSelect = 'set nocount on;set rowcount @SPintRowCount;select @SPintBeginID = '+@a_SelectOrderId+' from '+@a_TableName+' '+@a_SelectWhere+' '+@a_SelectOrder
execute sp_executesql
@TmpSelect,
N'@SPintRowCount int,@SPintBeginID int OUTPUT',
@SPintRowCount=@intRowCount,@SPintBeginID=@intBeginID OUTPUT
/**//*结束rootID*/
set @intRowCount = @a_intPageNo * @a_intPageSize
/**//*限制条数*/
select @TmpSelect = 'set nocount on;set rowcount @SPintRowCount;select @SPintEndID = '+@a_SelectOrderId+' from '+@a_TableName+' '+@a_SelectWhere+' '+@a_SelectOrder
execute sp_executesql
@TmpSelect,
N'@SPintRowCount int,@SPintEndID int OUTPUT',
@SPintRowCount=@intRowCount,@SPintEndID=@intEndID OUTPUT
if @a_SelectWhere='' or @a_SelectWhere IS NULL
select @TmpSelect = 'set nocount off;set rowcount 0;select '+@a_TableList+' from '+@a_TableName+' where '+@a_SelectOrderId+' between '
else
select @TmpSelect = 'set nocount off;set rowcount 0;select '+@a_TableList+' from '+@a_TableName+' '+@a_SelectWhere+' and '+@a_SelectOrderId+' between '
if @intEndID > @intBeginID
select @TmpSelect = @TmpSelect+'@SPintBeginID and @SPintEndID'+' '+@a_SelectOrder
else
select @TmpSelect = @TmpSelect+'@SPintEndID and @SPintBeginID'+' '+@a_SelectOrder
execute sp_executesql
@TmpSelect,
N'@SPintEndID int,@SPintBeginID int',
@SPintEndID=@intEndID,@SPintBeginID=@intBeginID
return(@@rowcount)
--select @@rowcount
GO
熟悉SQL SERVER 2000的数据库管理员都知道,其DTS可以进行数据的导入导出,其实,我们也可以使用Transact-SQL语句进行导入导出操作。在Transact-SQL语句中,我们主要使用OpenDataSource函数、OPENROWSET 函数,关于函数的详细说明,请参考SQL联机帮助。利用下述方法,可以十分容易地实现SQL SERVER、ACCESS、EXCEL数据转换,详细说明如下:
一、SQL SERVER 和ACCESS的数据导入导出
常规的数据导入导出:
使用DTS向导迁移你的Access数据到SQL Server,你可以使用这些步骤:
○1在SQL SERVER企业管理器中的Tools(工具)菜单上,选择Data Transformation
○2Services(数据转换服务),然后选择 czdImport Data(导入数据)。
○3在Choose a Data Source(选择数据源)对话框中选择Microsoft Access as the Source,然后键入你的.mdb数据库(.mdb文件扩展名)的文件名或通过浏览寻找该文件。
○4在Choose a Destination(选择目标)对话框中,选择Microsoft OLE DB Prov ider for SQL Server,选择数据库服务器,然后单击必要的验证方式。
○5在Specify Table Copy(指定表格复制)或Query(查询)对话框中,单击Copy tables(复制表格)。
○6在Select Source Tables(选择源表格)对话框中,单击Select All(全部选定)。下一步,完成。
Transact-SQL语句进行导入导出:
1.在SQL SERVER里查询access数据:
SELECT * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="c:\DB.mdb";User ID=Admin;Password=')...表名
2.将access导入SQL server
在SQL SERVER 里运行:
SELECT * INTO newtable FROM OPENDATASOURCE ('Microsoft.Jet.OLEDB.4.0','Data Source="c:\DB.mdb";User ID=Admin;Password=' )...表名
3.将SQL SERVER表里的数据插入到Access表中
在SQL SERVER 里运行:
insert into OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source=" c:\DB.mdb";User ID=Admin;Password=')...表名 (列名1,列名2) select 列名1,列名2 from sql表
实例:
insert into OPENROWSET('Microsoft.Jet.OLEDB.4.0','C:\db.mdb';'admin';'', Test) select id,name from Test
INSERT INTO OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'c:\trade.mdb'; 'admin'; '', 表名) SELECT * FROM sqltablename
二、SQL SERVER 和EXCEL的数据导入导出
1、在SQL SERVER里查询Excel数据:
SELECT * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="c:\book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$]
下面是个查询的示例,它通过用于 Jet 的 OLE DB 提供程序查询 Excel 电子表格。
SELECT * FROM OpenDataSource ( 'Microsoft.Jet.OLEDB.4.0','Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions
2、将Excel的数据导入SQL server :
SELECT * into newtable FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="c:\book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$]
实例:
SELECT * into newtable FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions
3、将SQL SERVER中查询到的数据导成一个Excel文件
T-SQL代码:
EXEC master..xp_cmdshell 'bcp 库名.dbo.表名out c:\Temp.xls -c -q -S"servername" -U"sa" -P""'
参数:S 是SQL服务器名;U是用户;P是密码
说明:还可以导出文本文件等多种格式
实例:EXEC master..xp_cmdshell 'bcp saletesttmp.dbo.CusAccount out c:\temp1.xls -c -q -S"pmserver" -U"sa" -P"sa"'
EXEC master..xp_cmdshell 'bcp "SELECT au_fname, au_lname FROM pubs..authors ORDER BY au_lname" queryout C:\ authors.xls -c -Sservername -Usa -Ppassword'
在VB6中应用ADO导出EXCEL文件代码:
Dim cn As New ADODB.Connection
cn.open "Driver={SQL Server};Server=WEBSVR;DataBase=WebMis;UID=sa;WD=123;"
cn.execute "master..xp_cmdshell 'bcp "SELECT col1, col2 FROM 库名.dbo.表名" queryout E:\DT.xls -c -Sservername -Usa -Ppassword'"
4、在SQL SERVER里往Excel插入数据:
insert into OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="c:\Temp.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...table1 (A1,A2,A3) values (1,2,3)
T-SQL代码:
INSERT INTO
OPENDATASOURCE('Microsoft.JET.OLEDB.4.0','Extended Properties=Excel 8.0;Data source=C:\training\inventur.xls')...[Filiale1$] (bestand, produkt) VALUES (20, 'Test')
总结:利用以上语句,我们可以方便地将SQL SERVER、ACCESS和EXCEL电子表格软件中的数据进行转换,为我们提供了极大方便!(
对于服务器数据的备份是比较麻烦的事情,如果每天或者经常要手工去备份自然是很痛苦的事情。这里我介绍一种通过sql server的作业调度来建立自动备份的方法:
1、进入企业管理器中->管理->sql server代理->作业;
2、新建作业,作业名称随便取,例如:data备份,所有者选择sa,当然你也可以选择其他用户,前提是该用户有执行作业的权限;
3、点击步骤标签,进入步骤面板。新建步骤,步骤名可以随便填写,如步骤1,类型和数据库默认,不需要修改。命令中写入以下语句:
BACKUP DATABASE [数据库名] TO DISK = N'F:\数据库备份' WITH NOINIT , NOUNLOAD , NAME = N'数据库 备份', NOSKIP , STATS = 10, NOFORMAT
注意:需要修改的地方,数据库名,DISK=(这里需要填写路径和你的数据库备份的名称)后面的Name=可以随便填写。
4、点击调度标签,进入调度面板,新建调度,名称随便填写,选择反复出现,点更改可以选择你想要执行任务的随意调度。如每天,每2天,每星期,每月等。根据需要自己设置;
5、确定后,不要忘记一件事情,在你刚才建立的工作上点右键,启动工作,如果你的工作没有问题,将会提示执行成功,并有相对应的备份文件在你的磁盘上出现;
6、还有一个重要的问题就是你的sql server agent服务器已经启动。
如果我们需要根据每天的日期来生成一个新的备份,以便我们区别备份文件。这时,我们需要修改一下刚才的sql语句。参考实例:
declare @filename nvarchar(100) set @filename='F:\数据库备份\RBdata'+convert(char(10),getdate(),112) print @filename BACKUP DATABASE [addin] TO DISK = @filename WITH NOINIT , NOUNLOAD , NAME = N' 备份', NOSKIP , STATS = 10, NOFORMAT
1.SQL SERVER的数据类型
数据类弄是数据的一种属性,表示数据所表示信息的类型。任何一种计算机语言都定义了自己的数据类型。当然,不同的程序语言都具有不同的特点,所定义的数据类型的各类和名称都或多或少有些不同。SQLServer 提供了 25 种数据类型:
Binary [(n)]
Varbinary [(n)]
Char [(n)]
Varchar[(n)]
Nchar[(n)]
Nvarchar[(n)]
Datetime
Smalldatetime
Decimal[(p[,s])]
Numeric[(p[,s])]
Float[(n)]
Real
Int
Smallint
Tinyint
Money
Smallmoney
Bit
Cursor
Sysname
Timestamp
Uniqueidentifier
Text
Image
Ntext
(1)二进制数据类型
二进制数据包括 Binary、Varbinary 和 Image
Binary 数据类型既可以是固定长度的(Binary),也可以是变长度的。
Binary[(n)] 是 n 位固定的二进制数据。其中,n 的取值范围是从 1 到 8000。其存储窨的大小是 n + 4 个字节。
Varbinary[(n)] 是 n 位变长度的二进制数据。其中,n 的取值范围是从 1 到 8000。其存储窨的大小是 n + 4个字节,不是n 个字节。
在 Image 数据类型中存储的数据是以位字符串存储的,不是由 SQL Server 解释的,必须由应用程序来解释。例如,应用程序可以使用BMP、TIEF、GIF 和 JPEG 格式把数据存储在 Image 数据类型中。
(2)字符数据类型
字符数据的类型包括 Char,Varchar 和 Text
字符数据是由任何字母、符号和数字任意组合而成的数据。
Varchar 是变长字符数据,其长度不超过 8KB。Char 是定长字符数据,其长度最多为 8KB。超过 8KB 的ASCII 数据可以使用Text数据类型存储。例如,因为 Html 文档全部都是 ASCII 字符,并且在一般情况下长度超过 8KB,所以这些文档可以 Text 数据类型存储在SQL Server 中。
(3)Unicode 数据类型
Unicode 数据类型包括 Nchar,Nvarchar 和Ntext
在 Microsoft SQL Server 中,传统的非 Unicode 数据类型允许使用由特定字符集定义的字符。在 SQL Server安装过程中,允许选择一种字符集。使用 Unicode 数据类型,列中可以存储任何由Unicode 标准定义的字符。在 Unicode 标准中,包括了以各种字符集定义的全部字符。使用Unicode数据类型,所战胜的窨是使用非 Unicode 数据类型所占用的窨大小的两倍。
在 SQL Server 中,Unicode 数据以 Nchar、Nvarchar 和 Ntext 数据类型存储。使用这种字符类型存储的列可以存储多个字符集中的字符。当列的长度变化时,应该使用Nvarchar 字符类型,这时最多可以存储 4000 个字符。当列的长度固定不变时,应该使用 Nchar 字符类型,同样,这时最多可以存储4000 个字符。当使用 Ntext 数据类型时,该列可以存储多于 4000 个字符。
(4)日期和时间数据类型
日期和时间数据类型包括 Datetime 和 Smalldatetime两种类型
日期和时间数据类型由有效的日期和时间组成。例如,有效的日期和时间数据包括“4/01/98 12:15:00:00:00 PM”和“1:28:29:15:01AM 8/17/98”。前一个数据类型是日期在前,时间在后一个数据类型是霎时间在前,日期在后。在 Microsoft SQL Server中,日期和时间数据类型包括Datetime 和 Smalldatetime 两种类型时,所存储的日期范围是从 1753 年 1 月 1 日开始,到9999 年12 月 31 日结束(每一个值要求 8 个存储字节)。使用 Smalldatetime 数据类型时,所存储的日期范围是 1900年 1 月 1日 开始,到 2079 年 12 月 31 日结束(每一个值要求 4 个存储字节)。
日期的格式可以设定。设置日期格式的命令如下:
Set DateFormat {format | @format _var|
其中,format | @format_var 是日期的顺序。有效的参数包括 MDY、DMY、YMD、YDM、MYD 和 DYM。在默认情况下,日期格式为MDY。
例如,当执行 Set DateFormat YMD 之后,日期的格式为年 月 日 形式;当执行 Set DateFormat DMY 之后,日期的格式为日 月有年 形式
(5)数字数据类型
数字数据只包含数字。数字数据类型包括正数和负数、小数(浮点数)和整数
整数由正整数和负整数组成,例如 39、25、0-2 和 33967。在 Micrsoft SQL Server 中,整数存储的数据类型是 Int,Smallint和 Tinyint。Int 数据类型存储数据的范围大于 Smallint 数据类型存储数据的范围,而 Smallint 据类型存储数据的范围大于Tinyint 数据类型存储数据的范围。使用 Int 数据狗昔存储数据的范围是从 -2 147 483 648 到 2 147 483 647(每一个值要求4个字节存储空间)。使用 Smallint 数据类型时,存储数据的范围从 -32 768 到 32 767(每一个值要求2个字节存储空间)。使用Tinyint 数据类型时,存储数据的范围是从0 到255(每一个值要求1个字节存储空间)。
精确小娄数据在 SQL Server 中的数据类型是 Decimal 和 Numeric。这种数据所占的存储空间根据该数据的位数后的位数来确定。
在SQL Server 中,近似小数数据的数据类型是 Float 和 Real。例如,三分之一这个分数记作。3333333,当使用近似数据类型时能准确表示。因此,从系统中检索到的数据可能与存储在该列中数据不完全一样。
(6)货币数据表示正的或者负的货币数量 。
在 Microsoft SQL Server 中,货币数据的数据类型是Money 和 Smallmoney
Money数据类型要求 8 个存储字节,Smallmoney 数据类型要求 4 个存储字节。
(7)特殊数据类型
特殊数据类型包括前面没有提过的数据类型。特殊的数据类型有3种,即 Timestamp、Bit 和 Uniqueidentifier。
Timestamp 用于表示SQL Server 活动的先后顺序,以二进投影的格式表示。Timestamp 数据与插入数据或者日期和时间没有关系。
Bit 由 1 或者 0 组成。当表示真或者假、ON 或者 OFF 时,使用 Bit 数据类型。例如,询问是否是每一次访问的客户机请求可以存储在这种数据类型的列中。
Uniqueidentifier 由 16 字节的十六进制数字组成,表示一个全局唯一的。当表的记录行要求唯一时,GUID是非常有用。例如,在客户标识号列使用这种数据类型可以区别不同的客户。
2.用户定义的数据类型
用户定义的数据类型基于在 Microsoft SQL Server 中提供的数据类型。当几个表中必须存储同一种数据类型时,并且为保证这些列有相同的数据类型、长度和可空性时,可以使用用户定义的数据类型。例如,可定义一种称为 postal_code 的数据类型,它基于 Char 数据类型。
当创建用户定义的数据类型时,必须提供三个数:数据类型的名称、所基于的系统数据类型和数据类型的可空性。
(1)创建用户定义的数据类型
创建用户定义的数据类型可以使用 Transact-SQL 语句。系统存储过程 sp_addtype 可以来创建用户定义的数据类型。其语法形式如下:
sp_addtype {type},[,system_data_bype][,'null_type']
其中,type 是用户定义的数据类型的名称。system_data_type 是系统提供的数据类型,例如 Decimal、Int、Char 等等。 null_type 表示该数据类型是如何处理空值的,必须使用单引号引起来,例如'NULL'、'NOT NULL'或者'NONULL'。
例子:
Use cust
Exec sp_addtype ssn,'Varchar(11)',"Not Null'
创建一个用户定义的数据类型 ssn,其基于的系统数据类型是变长为11 的字符,不允许空。
例子:
Use cust
Exec sp_addtype birthday,datetime,'Null'
创建一个用户定义的数据类型 birthday,其基于的系统数据类型是 DateTime,允许空。
例子:
Use master
Exec sp_addtype telephone,'varchar(24),'Not Null'
Eexc sp_addtype fax,'varchar(24)','Null'
创建两个数据类型,即 telephone 和 fax
(2)删除用户定义的数据类型
当用户定义的数据类型不需要时,可删除。删除用户定义的数据类型的命令是 sp_droptype {'type'}。
例子:
Use master
Exec sp_droptype 'ssn'
注意:当表中的列还正在使用用户定义的数据类型时,或者在其上面还绑定有默认或者规则时,这种用户定义的数据类型不能删除。
SQL SERVER的字段类型说明
以下为SQL SERVER7.0以上版本的字段类型说明。SQL SERVER6.5的字段类型说明请参考SQL SERVER提供的说明。
字段类型 描述
bit 0或1的整型数字
int 从-2^31(-2,147,483,648)到2^31(2,147,483,647)的整型数字
smallint 从-2^15(-32,768)到2^15(32,767)的整型数字
tinyint 从0到255的整型数字
decimal 从-10^38到10^38-1的定精度与有效位数的数字
numeric decimal的同义词
money 从-2^63(-922,337,203,685,477.5808)到2^63-1(922,337,203,685,477.5807)的货币数据,最小货币单位千分之十
smallmoney 从-214,748.3648到214,748.3647的货币数据,最小货币单位千分之十
float 从-1.79E+308到1.79E+308可变精度的数字
real 从-3.04E+38到3.04E+38可变精度的数字
datetime 从1753年1月1日到9999年12日31的日期和时间数据,最小时间单位为百分之三秒或3.33毫秒
smalldatetime 从1900年1月1日到2079年6月6日的日期和时间数据,最小时间单位为分钟
timestamp 时间戳,一个数据库宽度的唯一数字
uniqueidentifier 全球唯一标识符GUID
char 定长非Unicode的字符型数据,最大长度为8000
varchar 变长非Unicode的字符型数据,最大长度为8000
text 变长非Unicode的字符型数据,最大长度为2^31-1(2G)
nchar 定长Unicode的字符型数据,最大长度为8000
nvarchar 变长Unicode的字符型数据,最大长度为8000
ntext 变长Unicode的字符型数据,最大长度为2^31-1(2G)
binary 定长二进制数据,最大长度为8000
varbinary 变长二进制数据,最大长度为8000
image 变长二进制数据,最大长度为2^31-1(2G)
--------------------------------------------------------------------------------
我把我原来写的一个关于DataGrid的功能的程序公布出来,都是些使用的东西,希望能给.net的初学者一点点帮助……,写的不好的地方请大家多多指教!
——缘易
//DataGrid_1.aspx
**************************************************************************
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<asp:datagrid id="Dg1" style="Z-INDEX: 101; LEFT: 7px; POSITION: absolute; TOP: 8px" runat="server"
HeaderStyle-HorizontalAlign="Center" HeaderStyle-Font-Bold="True" HeaderStyle-BackColor="#6699cc"
AutoGenerateColumns="false" ItemStyle-HorizontalAlign="Center">
<Columns>
<asp:EditCommandColumn HeaderText="编辑" EditText="编辑" CancelText="取消" UpdateText="更新" ItemStyle-Width="100"></asp:EditCommandColumn>
<asp:ButtonColumn HeaderText="删除" ButtonType="LinkButton" Text="删除" CommandName="Delete" ItemStyle-Width="60"></asp:ButtonColumn>
<asp:BoundColumn ReadOnly="True" HeaderText="用户编号" DataField="customerid"></asp:BoundColumn>
<asp:BoundColumn DataField="companyname" HeaderText="公司名"></asp:BoundColumn>
<asp:BoundColumn DataField="contactname" HeaderText="联系名"></asp:BoundColumn>
</Columns>
</asp:datagrid>
<asp:Label id="Label1" style="Z-INDEX: 102; LEFT: 14px; POSITION: absolute; TOP: 237px" runat="server">Label</asp:Label></form>
</body>//DataGrid_1.aspx.cs
**************************************************************************
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Configuration;
using DBF_Center;
namespace TestCenter
{
/**//// <summary>
/// *******************************DataGrid全部功能实现****************************************
/// </summary>
public class DataGrid_1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Label Label1;
protected System.Web.UI.WebControls.DataGrid Dg1;
/**//// <summary>
/// 数据邦定函数
/// </summary>
/// <param name="sortField">用于排序的字段</param>
public void BindGrid(string sortField)
{
//连接数据库,填充DataSet
string constr=System.Configuration.ConfigurationSettings.AppSettings["Connectstring"];
SqlConnection conn=new SqlConnection(constr);
string commstr="select customerid,companyname,contactname from customer";
SqlDataAdapter ad=new SqlDataAdapter(commstr,conn);
DataSet dst=new DataSet();
ad.Fill(dst);
//string pd_a="select * from newstype order by t_id desc";
DataView source=new DataView(dst.Tables[0]);
source.Sort=sortField;
Dg1.DataSource=source;
Dg1.DataBind();
}
private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
this.BindGrid("customerid");//数据邦定,按customerid排序
}
Dg1.PagerStyle.Mode=PagerMode.NumericPages;//显示默认的页码为数字
/**//*
* 以上下页的形式显示页码
Dg1.PagerStyle.Mode=PagerMode.NextPrev;
Dg1.PagerStyle.NextPageText="下一页";
Dg1.PagerStyle.PrevPageText="上一页";
*/
Dg1.PagerStyle.Position=0;//显示起始页码
Dg1.PagerStyle.PageButtonCount=10;//显示显示页数
Dg1.PagerStyle.Visible=true;//显示默认页码数
Dg1.PageSize=6;//每页显示信息数
Dg1.AllowPaging=true;
Dg1.AllowSorting=true;
Dg1.AutoGenerateColumns=false;
}
Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/**//// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Dg1.ItemCreated += new System.Web.UI.WebControls.DataGridItemEventHandler(this.ItemCreate_Grid);
this.Dg1.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.Pager_Grid);
this.Dg1.CancelCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.Cancel_Grid);
this.Dg1.EditCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.Edit_Grid);
this.Dg1.SortCommand += new System.Web.UI.WebControls.DataGridSortCommandEventHandler(this.Sort_Grid);
this.Dg1.UpdateCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.Update_Grid);
this.Dg1.DeleteCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.Delete_Grid);
this.Dg1.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.ItemBound_Grid);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
//实现自动排序
private void Sort_Grid(object source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e)
{
this.BindGrid((string)e.SortExpression);
}
//编辑按钮的实现
private void Edit_Grid(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
Dg1.EditItemIndex=e.Item.ItemIndex;
this.BindGrid("customerid");
}
//取消按钮的实现
private void Cancel_Grid(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
Dg1.EditItemIndex=-1;
this.BindGrid("customerid");
}
//更新数据
private void Update_Grid(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
TextBox C_name=(TextBox)e.Item.Cells[3].Controls[0];
//TextBox C_nid=(TextBox)e.Item.Cells[2].Controls[0];
TextBox C_cname=(TextBox)e.Item.Cells[4].Controls[0];
string C_id=e.Item.Cells[2].Text.ToString();
if(C_name.Text.ToString()=="")
{
Response.Write("<script LANGUAGE='javascript'>alert('请输入确认输入正确!');history.go(-1);</script>");
}
else
{
string up_sql="update customer set Companyname='"+C_name.Text.ToString()+"',contactname='"+C_cname.Text.ToString()+"' where customerid='"+C_id+"'";
dbcontrol.ExecuteSql(up_sql);
Label1.Text=up_sql;
}
Dg1.EditItemIndex=-1;
this.BindGrid("customerid");
}
//自动分页
private void Pager_Grid(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
Dg1.CurrentPageIndex=e.NewPageIndex;
BindGrid("customerid");
}
//Item事件
private void ItemCreate_Grid(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemType==ListItemType.AlternatingItem||e.Item.ItemType==ListItemType.EditItem||e.Item.ItemType==ListItemType.Item)
{
LinkButton btnDel=(LinkButton)e.Item.Cells[1].Controls[0];
btnDel.Attributes.Add("onClick","JavaScript:return confirm('确认要删除此行的信息?')");
btnDel.Text="删除";
}
}
//执行删除
private void Delete_Grid(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
string del_sql="delete from customer where customerid='"+e.Item.Cells[2].Text+"'";
dbcontrol.ExecuteSql(del_sql);
Dg1.EditItemIndex=-1;
BindGrid("customerid");
}
//行随鼠标移动变色
private void ItemBound_Grid(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
e.Item.Attributes.Add("onmouseover","this.style.backgroundColor='#fafafa'");
e.Item.Attributes.Add("onmouseout","this.style.backgroundColor='white'");
}
}
}
}
Best wishes for the year to come!
恭贺新禧!
Good luck in the year ahead!
祝吉星高照!
May you come into a good fortune!
恭喜发财!
Live long and proper!
多福多寿!
May many fortunes find their way to you!
祝财运亨通!
I want to wish you longevity and health!
愿你健康长寿!
Take good care of yourself in the year ahead.
请多保重!
Wishing you many future successes.
祝你今后获得更大成就。
On this special day I send you New Years greetings and hope that some day soon we shall be together.
在这特殊的日子,向你致以新年的祝福,希望不久我们能相聚在一起。
I would like to wish you a joyous new year and express my hope for your happiness and good future.
祝新年快乐,并愿你幸福吉祥,前程似锦。
May the New Year bring many good things and rich blessings to you and all those you love!
愿新年带给你和你所爱的人许多美好的事物和无尽的祝福!
Rich blessings for health and longevity is my special wish for you in the coming year.
祝你在新的一年里身体健康,多福多寿。
Good luck, good health, hood cheer. I wish you a happy New Year.
祝好运、健康、佳肴伴你度过一个快乐新年。
With best wishes for a happy New Year!
祝新年快乐,并致以良好的祝福。
I hope you have a most happy and prosperous New Year.
谨祝新年快乐幸福,大吉大利。
With the compliments of the season.
祝贺佳节。
May the seasons joy fill you all the year round.
愿节日的愉快伴你一生。
Seasons greetings and best wishes for the New Year.
祝福您,新年快乐。
Please accept my seasons greetings.
请接受我节日的祝贺。
To wish you joy at this holy season. Wishing every happiness will always be with you.
恭祝新年吉祥,幸福和欢乐与你同在。
Good health, good luck and much happiness throughout the year.
恭祝健康、幸运,新年快乐。
May the joy and happiness around you today and always.
愿快乐幸福永伴你左右。
Please accept my sincere wishes for the New Year. I hope you will continue to enjoy good health.
请接受我诚挚的新年祝福,顺祝身体健康。
Allow me to congratulate you on the arrival of the New Year and to extend to
you all my best wishes for your perfect health and lasting prosperity.
恭贺新禧,祝身体健康、事业发达。
Best wishes for the holidays and happiness throughout the New Year.
恭贺新禧,万事如意。
With very best wishes for your happiness in the New Year.
致以最良好的祝福,原你新年快乐幸福。
Please accept our wishes for you and yours for a happy New Year.
请接受我们对你及你全家的美好祝福,祝你们新年快乐。
May the coming New Year bring you joy, love and peace.
愿新年为你带来快乐,友爱和宁静。
Wishing you happiness during the holidays and throughout the New Year.
祝节日快乐,新年幸福。
A happy New Year to you.
1.html代码
<HTML>
<HEAD>
<title>DataGridTooltip</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
<style type="text/css"> .transparent {}{ BORDER-RIGHT: indianred 1px solid; BORDER-TOP: indianred 1px solid; DISPLAY: none; FILTER: alpha(opacity=85); BORDER-LEFT: indianred 1px solid; BORDER-BOTTOM: indianred 1px solid; POSITION: absolute; BACKGROUND-COLOR: infobackground } </style>
<script language="javascript">
function Show(Country, City, Address, PostalCode, Phone, Fax)
{
//debugger;
document.getElementById("td1").innerText="国家:"+Country;
document.getElementById("td2").innerText="城市:"+City;
document.getElementById("td3").innerText="地址:"+Address;
document.getElementById("td4").innerText="邮编:"+PostalCode;
document.getElementById("td5").innerText="电话:"+Phone;
document.getElementById("td6").innerText="传真:"+Fax;
x = event.clientX + document.body.scrollLeft;
y = event.clientY + document.body.scrollTop + 20;
Popup.style.display="block";
Popup.style.left = x;
Popup.style.top = y;
}
function Hide()
{
Popup.style.display="none";
}
</script>
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<div id="Popup" class="transparent">
<table border="0" cellpadding="0" bgColor="#00ccff">
<tr>
<td align="center" bgcolor="indianred"><font color="white">联系方式</font></td>
</tr>
<tr>
<td id="td1"></td>
</tr>
<tr>
<td id="td2"></td>
</tr>
<tr>
<td id="td3"></td>
</tr>
<tr>
<td id="td4"></td>
</tr>
<tr>
<td id="td5"></td>
</tr>
<tr>
<td id="td6"></td>
</tr>
</table>
</div>
<asp:DataGrid id="DataGrid1" runat="server">
<FooterStyle ForeColor="#003399" BackColor="#99CCCC"></FooterStyle>
<SelectedItemStyle Font-Bold="True" ForeColor="#CCFF99" BackColor="#009999"></SelectedItemStyle>
<ItemStyle ForeColor="#003399" BackColor="White"></ItemStyle>
<HeaderStyle Font-Bold="True" ForeColor="#CCCCFF" BackColor="#003399"></HeaderStyle>
<PagerStyle HorizontalAlign="Left" ForeColor="#003399" BackColor="#99CCCC" Mode="NumericPages"></PagerStyle>
</asp:DataGrid>
</form>
</body>
</HTML>2.cs代码
public class DataGridTooltip : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DataGrid DataGrid1;
private DataTable dt;
Page_Load#region Page_Load
private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
SqlConnection cnn = new SqlConnection();
cnn.ConnectionString = "data source=meng;initial catalog=Northwind;password=sa;persist security info=True;user id=sa;packet size=4096";
string sqlstr = "select Top 16 CustomerID, CompanyName,ContactTitle,Country, City, Address,PostalCode,Phone,Fax from Customers";
cnn.Open();
SqlDataAdapter ad = new SqlDataAdapter(sqlstr,cnn);
dt = new DataTable();
ad.Fill(dt);
DataGrid1.DataSource = dt;
DataGrid1.DataBind();
}
}
#endregion
DataGrid1_ItemDataBound#region DataGrid1_ItemDataBound
private void DataGrid1_ItemDataBound(object sender,System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.AlternatingItem|| e.Item.ItemType == ListItemType.Item)
{
e.Item.Attributes.Add("onmouseover","this.oldcolor=this.style.backgroundColor;this.style.backgroundColor='#C8F7FF';");
e.Item.Attributes.Add("onmousemove",
"Show('"+dt.Rows[e.Item.ItemIndex]["country"].ToString()+"','"
+dt.Rows[e.Item.ItemIndex]["City"].ToString()+"','"
+dt.Rows[e.Item.ItemIndex]["Address"].ToString()+"','"
+dt.Rows[e.Item.ItemIndex]["PostalCode"].ToString()+"','"
+dt.Rows[e.Item.ItemIndex]["Phone"].ToString()+"','"
+dt.Rows[e.Item.ItemIndex]["Fax"].ToString()+"');");
e.Item.Attributes.Add("onmouseout", "this.style.backgroundColor=this.oldcolor;Hide();");
}
}
#endregion
Web Form Designer generated code#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}
/**//// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.DataGrid1.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemDataBound);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
所有逻辑都写到了存储过程中,所以在使用的时候,直接调用存储过程即可,无需在前台代码中做过多的处理,但是一定要记得在绑定的sql语句中必须有order by orderno来排序
--测试表
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Job_Person]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Job_Person]
GO
CREATE TABLE [dbo].[Job_Person] (
[Job_PersonID] [int] NOT NULL ,
[PersonID] [int] NOT NULL ,
[OrderNo] [int] NULL ,
[CreateOn] [datetime] NULL ,
[CreateByID] [int] NULL ,
[ModifyOn] [datetime] NULL ,
[ModifyByID] [int] NULL
) ON [PRIMARY]
GO
--测试存储过程
CREATE PROCEDURE tp_MoveOrder_Entity_Job
(
@Job_EntityID int ,--表主键id
@Direction INT, -- @Direction : move up : -1 , move down : 1
@UserID int --修改人id
)
AS
declare @EntityID int
declare @OrderNo INT
declare @MaxOrderNo Int
declare @OrderNo_1 int
declare @OrderNo_2 int
declare @Job_EntityID_1 int
declare @Job_EntityID_2 int
BEGIN
SET NOCOUNT ON
BEGIN
Select @OrderNo = OrderNo, @EntityID = PersonID From Job_Person
Where Job_PersonID = @Job_EntityID
select @MaxOrderNo = max(OrderNo) From Job_Person
WHERE PersonID = @EntityID
SET @OrderNo_1 = @OrderNo
SET @OrderNo_2 = @OrderNo + @Direction
if (@MaxOrderNo = 1 )
return 0 --只有一条记录则返回
if ((@OrderNo = 1 ) AND (@Direction = -1))--设置move up orderno
BEGIN
SET @OrderNo_1 = 1
SET @OrderNo_2 = @MaxOrderNo
END
if ((@OrderNo = @MaxOrderNo ) AND (@Direction = 1))--设置move down orderno
BEGIN
SET @OrderNo_1 = 1
SET @OrderNo_2 = @MaxOrderNo
END
--根据orderno取得不同的move资料
select @Job_EntityID_1= Job_PersonID from Job_Person
where PersonID = @EntityID and OrderNo = @OrderNo_2
select @Job_EntityID_2= Job_PersonID from Job_Person
where PersonID = @EntityID and OrderNo = @OrderNo_1
--update orderno
update Job_Person
set orderno = @OrderNo_1,
ModifyOn = getdate(),
ModifyByID = @UserID
where Job_PersonID = @Job_EntityID_1
IF @@ERROR <> 0
RETURN 1
--update orderno
update Job_Person
set orderno = @OrderNo_2,
ModifyOn = getdate(),
ModifyByID = @UserID
where Job_PersonID = @Job_EntityID_2
IF @@ERROR <> 0
RETURN 1
END
RETURN 0
END
GO
1.html
<HTML>
<HEAD>
<title>GridFormat</title>
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<asp:datagrid id="DataGrid1" style="Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 16px" runat="server"
AutoGenerateColumns="False" BorderColor="#CC9966" BorderStyle="None" BorderWidth="1px" BackColor="White"
CellPadding="4">
<FooterStyle ForeColor="#330099" BackColor="#FFFFCC"></FooterStyle>
<SelectedItemStyle Font-Bold="True" ForeColor="#663399" BackColor="#FFCC66"></SelectedItemStyle>
<ItemStyle ForeColor="#330099" BackColor="White"></ItemStyle>
<HeaderStyle Font-Bold="True" ForeColor="#FFFFCC" BackColor="#990000"></HeaderStyle>
<Columns>
<asp:TemplateColumn HeaderText="ID">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem,"UserID") %>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="学位">
<ItemTemplate>
<%# Format(Container.DataItem,"Degree") %>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="性别">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem,"Gender") %>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="婚姻状况">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem,"MaritalStatus").ToString()=="1"?"已婚":"未婚" %>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="描述">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem,"Description") %>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
<PagerStyle HorizontalAlign="Center" ForeColor="#330099" BackColor="#FFFFCC"></PagerStyle>
</asp:datagrid></form>
</body>
</HTML>2.cs代码
public class GridFormat : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DataGrid DataGrid1;
private void Page_Load(object sender, System.EventArgs e)
{
//1.用<%# DataBinder.Eval(Container.DataItem,"MaritalStatus").ToString()=="1"?"已婚":"未婚" %>方式显示
//2.用sql中的case Gender when 1 then '男' else '女' end显示
//3.在后台写方法,前台调用显示,如Format(object item,string type)
//4.DataGrid1_ItemDataBound
DataBind();
for(int i=0; i < DataGrid1.Items.Count; i++)
{
if(DataGrid1.Items[i].Cells[2].Text=="男")
{
DataGrid1.Items[i].Cells[2].ForeColor = System.Drawing.Color.Red;
}
}
}
GetDataSet#region GetDataSet
private DataSet GetDataSet(string sql)
{
string constring=System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
SqlDataAdapter sda =new SqlDataAdapter(sql,constring);
DataSet ds=new DataSet();
sda.Fill(ds);
return ds;
}
#endregion
DataBind#region DataBind
private void DataBind()
{
string sql="select UserID,Degree,Gender =case Gender when 1 then '男' else '女' end,MaritalStatus,Description from formatgrid ";
DataSet ds=GetDataSet(sql);
this.DataGrid1.DataSource=ds;
this.DataGrid1.DataBind();
}
#endregion
Format#region Format
protected string Format(object item,string type)
{
DataRowView drv=(DataRowView)item;
string val=string.Empty;
switch (drv["Degree"].ToString().ToLower())
{
case "1":
val="博士后";
break;
case "2":
val="博士";
break;
case "3":
val="硕士";
break;
case "4":
val="学士";
break;
default:
val=drv["Degree"].ToString();
break;
}
return val;
}
#endregion
Web Form Designer generated code#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
this.DataGrid1.ItemDataBound+=new DataGridItemEventHandler(DataGrid1_ItemDataBound);
}
/**//**//**//**//**//**//**//// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
DataGrid1_ItemDataBound#region DataGrid1_ItemDataBound
private void DataGrid1_ItemDataBound(object sender, DataGridItemEventArgs e)
{
if (e.Item.ItemType!=ListItemType.Header)
{
string subject=Convert.ToString(DataBinder.Eval(e.Item.DataItem,"Description"));
if (subject.Length >10)
{
subject=subject.Substring(0,10)+"";
}
e.Item.Cells[4].Text=subject;
}
if (e.Item.ItemType!=ListItemType.Header)
{
e.Item.Cells[1].Attributes.Add( "onmouseover","this.style.color='Red';this.style.cursor='hand'");
e.Item.Cells[1].Attributes.Add( "onmouseout","this.style.color='Black';this.style.cursor='default'");
}
}
#endregion
}3.数据库教本
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FormatGrid]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[FormatGrid]
GO
CREATE TABLE [dbo].[FormatGrid] (
[UserID] [int] NULL ,
[Degree] [int] NULL ,
[Gender] [int] NULL ,
[MaritalStatus] [int] NULL ,
[Description] [nvarchar] (500) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
--测试数据
insert into FormatGrid(UserID,Degree,Gender,MaritalStatus,Description) values(1,1,1,0,'可以读取流。读取是从流到数据结构(如字节数组)的数据传输。')
insert into FormatGrid(UserID,Degree,Gender,MaritalStatus,Description) values(2,2,0,1,'可以写入流。写入是从数据结构到流的数据传输。')
insert into FormatGrid(UserID,Degree,Gender,MaritalStatus,Description) values(3,3,1,0,'流可以支持查找。查找是对流内的当前位置进行查询和修改。查找功能取决于流具有的后备存储区类型。例如,网络流没有当前位置的统一概念,因此一般不支持查找。')
insert into FormatGrid(UserID,Degree,Gender,MaritalStatus,Description) values(4,4,0,1,'小山哥')
insert into FormatGrid(UserID,Degree,Gender,MaritalStatus,Description) values(5,5,1,0,'山哥')
1.html代码
<HTML>
<HEAD>
<title>WriteToCVS</title>
<meta content="False" name="vs_snapToGrid">
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<asp:DataGrid id="DataGrid1" style="Z-INDEX: 101; LEFT: 14px; POSITION: absolute; TOP: 109px"
runat="server" BorderColor="#CC9966" BorderStyle="None" BorderWidth="1px" BackColor="White"
CellPadding="4">
<FooterStyle ForeColor="#330099" BackColor="#FFFFCC"></FooterStyle>
<SelectedItemStyle Font-Bold="True" ForeColor="#663399" BackColor="#FFCC66"></SelectedItemStyle>
<ItemStyle ForeColor="#330099" BackColor="White"></ItemStyle>
<HeaderStyle Font-Bold="True" ForeColor="#FFFFCC" BackColor="#990000"></HeaderStyle>
<PagerStyle HorizontalAlign="Center" ForeColor="#330099" BackColor="#FFFFCC"></PagerStyle>
</asp:DataGrid>
<asp:Button id="Button1" style="Z-INDEX: 102; LEFT: 18px; POSITION: absolute; TOP: 11px" runat="server"
Text="DataSet导出到csv文件" Width="148px"></asp:Button>
<asp:Button id="Button2" style="Z-INDEX: 103; LEFT: 19px; POSITION: absolute; TOP: 42px" runat="server"
Text="DataGrid导出到csv文件" Width="157px"></asp:Button>
<asp:Button id="Button3" style="Z-INDEX: 104; LEFT: 18px; POSITION: absolute; TOP: 73px" runat="server"
Text="DataGrid导出到Excel" Width="149px"></asp:Button>
</form>
</body>
</HTML>2.cs代码
using System.IO;
using System.Data.SqlClient;
public class WriteToCVS : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DataGrid DataGrid1;
protected System.Web.UI.WebControls.Button Button2;
protected System.Web.UI.WebControls.Button Button3;
protected System.Web.UI.WebControls.Button Button1;
private void Page_Load(object sender, System.EventArgs e)
{
if(!Page.IsPostBack)
{
string sql="select * from TestGrid";
ds=GetDataSet(sql);
this.DataGrid1.DataSource=ds;
this.DataGrid1.DataBind();
}
}
WriteDSToCsv 传入dataset生成csv文件#region WriteDSToCsv 传入dataset生成csv文件
public void WriteDSToCsv(DataSet ds)
{
string strFile="";
string path="";
DataTable dt=ds.Tables[0];
//文件信息设置
strFile=strFile+"LogBackUp";
strFile=strFile+DateTime.Now.ToString("yyyyMMddhhmmss");
strFile=strFile+".csv";
path=Server.MapPath(strFile);
//string[] strHead={"使用者姓名","员工编号","所属分行别","作业时间","使用功能","作业说明"};
System.IO.FileStream fs=new FileStream(path,System.IO.FileMode.Create,System.IO.FileAccess.Write);
StreamWriter sw=new StreamWriter(fs,new System.Text.UnicodeEncoding());
//画表头
for(int i=0;i<dt.Columns.Count;i++)
{
sw.Write(dt.Columns[i].ColumnName);
sw.Write("\t");
}
sw.WriteLine("");
//画表体
for(int i=0;i<dt.Rows.Count;i++)
{
sw.Write(DelQuota(dt.Rows[i]["UserID"].ToString()));
sw.Write("\t");
sw.Write(DelQuota(dt.Rows[i]["UserName"].ToString()));
sw.Write("\t");
sw.Write(DelQuota(dt.Rows[i]["provinceID"].ToString()));
sw.Write("\t");
sw.Write(DelQuota(dt.Rows[i]["cityID"].ToString()));
sw.Write("\t");
sw.Write(DelQuota(dt.Rows[i]["areaID"].ToString()));
sw.Write("\t");
sw.Write(DelQuota(dt.Rows[i]["Enabled"].ToString()));
sw.WriteLine("");
}
sw.Flush();
sw.Close();
}
#endregion
WriteDatagridToCsv 传入datagrid生成csv文件#region WriteDatagridToCsv 传入datagrid生成csv文件
public void WriteDatagridToCsv(System.Web.UI.WebControls.DataGrid grid)
{
string strFile="";
string path="";
DataTable dt=ds.Tables[0];
//文件信息设置
strFile=strFile+"LogBackUp";
strFile=strFile+DateTime.Now.ToString("yyyyMMddhhmmss");
strFile=strFile+".csv";
path=Server.MapPath(strFile);
string[] strHead={"UserID","UserName","provinceID","cityID","areaID","Enabled"};
System.IO.FileStream fs=new FileStream(path,System.IO.FileMode.Create,System.IO.FileAccess.Write);
StreamWriter sw=new StreamWriter(fs,new System.Text.UnicodeEncoding());
//画表头
for(int i=0;i<strHead.Length;i++)
{
sw.Write(strHead[i]);
sw.Write("\t");
}
sw.WriteLine("");
//画表体
for(int i=0;i<grid.Items.Count;i++)
{
sw.Write(DelQuota(grid.Items[i].Cells[0].Text.ToString()));
sw.Write("\t");
sw.Write(DelQuota(grid.Items[i].Cells[1].Text.ToString()));
sw.Write("\t");
sw.Write(DelQuota(grid.Items[i].Cells[2].Text.ToString()));
sw.Write("\t");
sw.Write(DelQuota(grid.Items[i].Cells[3].Text.ToString()));
sw.Write("\t");
sw.Write(DelQuota(grid.Items[i].Cells[4].Text.ToString()));
sw.Write("\t");
sw.Write(DelQuota(grid.Items[i].Cells[5].Text.ToString()));
sw.WriteLine("");
}
sw.Flush();
sw.Close();
}
#endregion
ToExcel#region ToExcel
public static void ToExcel(System.Web.UI.Control ctl,string FileName)
{
HttpContext.Current.Response.Charset ="UTF-8";
HttpContext.Current.Response.ContentEncoding =System.Text.Encoding.Default;
HttpContext.Current.Response.ContentType ="application/ms-excel";
HttpContext.Current.Response.AppendHeader("Content-Disposition","attachment;filename="+""+FileName+".xls");
ctl.Page.EnableViewState =false;
System.IO.StringWriter tw = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);
ctl.RenderControl(hw);
HttpContext.Current.Response.Write(tw.ToString());
HttpContext.Current.Response.End();
}
#endregion
DelQuota#region DelQuota
public string DelQuota(string str)//删除特殊字符
{
string result=str;
string[] strQuota={"~","!","@","#","$","%","^","&","*","(",")","`",";","'",",",".","/",":","/,","<",">","?"};
for(int i=0;i<strQuota.Length;i++)
{
if(result.IndexOf(strQuota[i])>-1)
result=result.Replace(strQuota[i],"");
}
return result;
}
#endregion
GetDataSet#region GetDataSet
public static DataSet GetDataSet(string sql)
{
string ConnectionString=System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
SqlDataAdapter sda =new SqlDataAdapter(sql,ConnectionString);
DataSet ds=new DataSet();
sda.Fill(ds);
return ds;
}
#endregion
Web Form Designer generated code#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}
/**//// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Button2.Click += new System.EventHandler(this.Button2_Click);
this.Button3.Click += new System.EventHandler(this.Button3_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void Button1_Click(object sender, System.EventArgs e)
{
WriteDSToCsv(ds);
}
private void Button2_Click(object sender, System.EventArgs e)
{
WriteDatagridToCsv(this.DataGrid1);
}
private void Button3_Click(object sender, System.EventArgs e)
{
ToExcel(this.DataGrid1,"meng");
}
property#region property
private DataSet ds
{
get
{
if(ViewState["ds"]!=null)
{
return (DataSet)ViewState["ds"];
}
else
{
return null;
}
}
set
{
ViewState["ds"]=value;
}
}
#endregion
}3.数据库脚本
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TestGrid]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[TestGrid]
GO
CREATE TABLE [dbo].[TestGrid] (
[UserID] [int] IDENTITY (1, 1) NOT NULL ,
[UserName] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[provinceID] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[cityID] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[areaID] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[Enabled] [bit] NULL
) ON [PRIMARY]
GO
1.添加资源文件strings.zh-cn.resx和strings.en-us.resx
也可以参考资源文件配置和使用
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="ResMimeType">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="Version">
<value>1.0.0.0</value>
</resheader>
<resheader name="Reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="Writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="LoginName">
<value>用户名</value>
</data>
<data name="Password">
<value>密码</value>
</data>
</root>2.html代码
<HTML>
<HEAD>
<title>XMLGrid</title>
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
<script language=javascript>
function test(obj)
{
var id = obj.id;
var objs;
if(id!="")
{
var len = id.length;
var objs = obj.children;
}
document.getElementById("<%=TextBox1.ClientID%>").innerText=objs[1].innerText;
document.getElementById("<%=TextBox2.ClientID%>").innerText=objs[2].innerText;
}
</script>
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<TABLE id="Table1" style="Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 8px" cellSpacing="1"
cellPadding="1" width="300" border="1">
<tr>
<td colspan="2">资源文件配置</td>
</tr>
<tr>
<td>Language</td>
<td><asp:dropdownlist id="DropDownList1" runat="server" AutoPostBack="True">
<asp:ListItem Value="zh-cn">中文</asp:ListItem>
<asp:ListItem Value="en-us">英文</asp:ListItem>
</asp:dropdownlist></td>
</tr>
<TR>
<TD>Name</TD>
<TD><asp:textbox id="TextBox1" runat="server"></asp:textbox></TD>
</TR>
<TR>
<TD>Value</TD>
<TD><asp:textbox id="TextBox2" runat="server"></asp:textbox></TD>
</TR>
<TR>
<TD></TD>
<TD><asp:button id="Button1" runat="server" Text="新增"></asp:button></TD>
</TR>
</TABLE>
<asp:datagrid id="DataGrid1" style="Z-INDEX: 102; LEFT: 8px; POSITION: absolute; TOP: 160px" runat="server"
AutoGenerateColumns="False" DataKeyField="name" BorderColor="#CC9966" BorderWidth="1px" BackColor="White"
CellPadding="4" OnDeleteCommand="Delete" BorderStyle="None">
<FooterStyle ForeColor="#330099" BackColor="#FFFFCC"></FooterStyle>
<SelectedItemStyle Font-Bold="True" ForeColor="#663399" BackColor="#FFCC66"></SelectedItemStyle>
<ItemStyle ForeColor="#330099" BackColor="White"></ItemStyle>
<HeaderStyle Font-Bold="True" ForeColor="#FFFFCC" BackColor="#990000"></HeaderStyle>
<Columns>
<asp:TemplateColumn HeaderText="序号">
<ItemTemplate>
<%# Container.ItemIndex+1 %>
</ItemTemplate>
</asp:TemplateColumn>
<asp:BoundColumn DataField="name" ReadOnly="True" HeaderText="Name"></asp:BoundColumn>
<asp:TemplateColumn HeaderText="Value">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem,"value") %>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID=txtvalue Runat=server Text='<%# DataBinder.Eval(Container.DataItem,"value") %>'>
</asp:TextBox>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:ButtonColumn Text="删除" ButtonType="PushButton" HeaderText="删除" CommandName="Delete"></asp:ButtonColumn>
</Columns>
</asp:datagrid>
</form>
</body>
</HTML>3. cs代码
public class WebForm1 : System.Web.UI.Page
{
private XmlNode node=null;
protected System.Web.UI.WebControls.DropDownList DropDownList1;
protected System.Web.UI.WebControls.TextBox TextBox1;
protected System.Web.UI.WebControls.TextBox TextBox2;
protected System.Web.UI.WebControls.Button Button1;
protected System.Web.UI.WebControls.DataGrid DataGrid1;
private void Page_Load(object sender, System.EventArgs e)
{
if(!Page.IsPostBack)
{
DataBind();
}
}
DataBind#region DataBind
private void DataBind()
{
FileName=Server.MapPath("strings."+this.DropDownList1.SelectedValue+".resx");
DataSet ds=new DataSet();
ds.ReadXml(FileName);
this.DataGrid1.DataSource=ds;
this.DataGrid1.DataBind();
}
#endregion
SetValue#region SetValue
public void SetValue(string key, string Value)
{
XmlDocument doc = new XmlDocument();
doc.Load(FileName);
node = doc.SelectSingleNode("//root");
if( node!= null )
{
XmlElement addElem= (XmlElement)node.SelectSingleNode("//data[@name='" +key +"']") ;
if(addElem!=null)
{
AlertError("该元素已经存在了。");
}
else
{
XmlElement first = doc.CreateElement("data");
first.SetAttribute("name",key);
node.AppendChild(first);
XmlElement second = doc.CreateElement("value");
second.InnerText=Value;
first.AppendChild(second);
saveDoc(doc,FileName);
}
}
}
#endregion
saveDoc#region saveDoc
private void saveDoc(XmlDocument doc,string docPath)
{
try
{
XmlTextWriter writer = new XmlTextWriter( docPath , null );
writer.Formatting = Formatting.Indented;
doc.WriteTo( writer );
writer.Flush();
writer.Close();
return;
}
catch
{
throw;
}
}
#endregion
removeElement#region removeElement
public void removeElement(string elementKey)
{
XmlDocument doc = new XmlDocument();
doc.Load(FileName);
node = doc.SelectSingleNode("//root");
if( node != null )
{
node.RemoveChild( node.SelectSingleNode("//data[@name='" +elementKey +"']") );
saveDoc(doc,FileName);
}
}
#endregion
Web Form Designer generated code#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}
/**//// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.DropDownList1.SelectedIndexChanged += new System.EventHandler(this.DropDownList1_SelectedIndexChanged);
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += new System.EventHandler(this.Page_Load);
this.DataGrid1.ItemDataBound+=new DataGridItemEventHandler(DataGrid1_ItemDataBound);
}
#endregion
property#region property
private string FileName
{
get
{
if(ViewState["FileName"]!=null && ViewState["FileName"].ToString()!="")
{
return ViewState["FileName"].ToString();
}
else
{
return "";
}
}
set
{
ViewState["FileName"]=value;
}
}
#endregion
Button1_Click#region Button1_Click
private void Button1_Click(object sender, System.EventArgs e)
{
SetValue(this.TextBox1.Text,this.TextBox2.Text);
DataBind();
}
#endregion
Delete#region Delete
protected void Delete(object sender,DataGridCommandEventArgs e)
{
removeElement(this.DataGrid1.DataKeys[e.Item.ItemIndex].ToString());
DataBind();
}
#endregion
AlertError#region AlertError
private void AlertError(string msg)
{
string script = "<script language='javascript'>";
script +=" alert('" + msg +"');";
script +="</script>";
Page.RegisterClientScriptBlock("Alert", script);
}
#endregion
DropDownList1_SelectedIndexChanged#region DropDownList1_SelectedIndexChanged
private void DropDownList1_SelectedIndexChanged(object sender, System.EventArgs e)
{
DataBind();
}
#endregion
DataGrid1_ItemDataBound#region DataGrid1_ItemDataBound
private void DataGrid1_ItemDataBound(object sender, DataGridItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
e.Item.Attributes.Add("onclick","test(this);");
e.Item.ID = "ItemID";
}
}
#endregion
}
1.html
<HTML>
<HEAD>
<title>StreamXml</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<asp:TextBox id="TextBox1" style="Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 16px" runat="server"></asp:TextBox>
<asp:TextBox id="TextBox2" style="Z-INDEX: 102; LEFT: 240px; POSITION: absolute; TOP: 16px" runat="server"
TextMode="MultiLine" Height="160px" Width="352px"></asp:TextBox>
<asp:Button id="Button1" style="Z-INDEX: 103; LEFT: 184px; POSITION: absolute; TOP: 16px" runat="server"
Text="保存"></asp:Button>
<asp:DataGrid id="DataGrid1" style="Z-INDEX: 104; LEFT: 8px; POSITION: absolute; TOP: 48px" runat="server"
BorderColor="#CC9966" BorderStyle="None" BorderWidth="1px" BackColor="White" CellPadding="4"
AutoGenerateColumns="False" OnItemCommand="Compare">
<FooterStyle ForeColor="#330099" BackColor="#FFFFCC"></FooterStyle>
<SelectedItemStyle Font-Bold="True" ForeColor="#663399" BackColor="#FFCC66"></SelectedItemStyle>
<ItemStyle ForeColor="#330099" BackColor="White"></ItemStyle>
<HeaderStyle Font-Bold="True" ForeColor="#FFFFCC" BackColor="#990000"></HeaderStyle>
<Columns>
<asp:BoundColumn Visible="False" DataField="UserID" HeaderText="UserID"></asp:BoundColumn>
<asp:BoundColumn DataField="UserName" HeaderText="UserName"></asp:BoundColumn>
<asp:TemplateColumn HeaderText="比较">
<ItemTemplate>
<asp:Button id="Button2" runat="server" Text="比较" CommandName="Compare"></asp:Button>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
<PagerStyle HorizontalAlign="Center" ForeColor="#330099" BackColor="#FFFFCC"></PagerStyle>
</asp:DataGrid>
<asp:TextBox id="TextBox3" style="Z-INDEX: 105; LEFT: 240px; POSITION: absolute; TOP: 192px"
runat="server" TextMode="MultiLine" Height="144px" Width="352px"></asp:TextBox>
</form>
</body>
</HTML>2.cs代码
public class StreamXml : System.Web.UI.Page
{
protected System.Web.UI.WebControls.TextBox TextBox1;
protected System.Web.UI.WebControls.TextBox TextBox2;
protected System.Web.UI.WebControls.Button Button1;
protected System.Web.UI.WebControls.TextBox TextBox3;
protected System.Web.UI.WebControls.DataGrid DataGrid1;
private void Page_Load(object sender, System.EventArgs e)
{
if(!Page.IsPostBack)
{
BindData();
}
}
BindData#region BindData
private void BindData()
{
string sql="select * from UserInfo";
DataSet ds=GetDataSet(sql);
this.DataGrid1.DataSource=ds;
this.DataGrid1.DataBind();
}
#endregion
SaveXml#region SaveXml
private void SaveXml(DataSet ds)
{
SqlConnection conn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"]);
SqlCommand comm=new SqlCommand("insert into StreamXml (UserID,XmlStream,XmlString) values(@UserID,@XmlStream,@XmlString)",conn);
SqlParameter parm1=new SqlParameter("@UserID",SqlDbType.UniqueIdentifier,50);
parm1.Value=new Guid(ds.Tables[0].Rows[0]["UserID"].ToString());
//以流方式保存xml
System.IO.MemoryStream mStream = new System.IO.MemoryStream();
ds.WriteXml(mStream, XmlWriteMode.WriteSchema);
SqlParameter parm2=new SqlParameter("@XmlStream",SqlDbType.Image);
parm2.Value=mStream.ToArray();
//以字符串方式保存xml
SqlParameter parm3=new SqlParameter("@XmlString",SqlDbType.NVarChar,500);
parm3.Value=ds.GetXml();
comm.Parameters.Add(parm1);
comm.Parameters.Add(parm2);
comm.Parameters.Add(parm3);
conn.Open();
comm.ExecuteNonQuery();
conn.Close();
}
#endregion
SaveUserInfo#region SaveUserInfo
private void SaveUserInfo()
{
SqlConnection conn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"]);
SqlCommand comm=new SqlCommand("insert into UserInfo (UserID,UserName) values(@UserID,@UserName)",conn);
SqlParameter parm1=new SqlParameter("@UserID",SqlDbType.UniqueIdentifier,50);
parm1.Value=new Guid(UserID);
SqlParameter parm2=new SqlParameter("@UserName",SqlDbType.NVarChar,50);
if(this.TextBox1.Text!="")
{
parm2.Value=this.TextBox1.Text;
}
else
{
parm2.Value=System.DBNull.Value;
}
comm.Parameters.Add(parm1);
comm.Parameters.Add(parm2);
conn.Open();
comm.ExecuteNonQuery();
conn.Close();
}
#endregion
GetDataSet#region GetDataSet
private DataSet GetDataSet(string sql)
{
string constring=System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
SqlDataAdapter sda =new SqlDataAdapter(sql,constring);
DataSet ds=new DataSet();
sda.Fill(ds);
return ds;
}
#endregion
Compare event#region Compare event
protected void Compare(object sender,DataGridCommandEventArgs e)
{
switch(Convert.ToString(((Button)e.CommandSource).CommandName))
{
case "Compare":
DataSet ds = new DataSet();
string sql="select * from StreamXml where UserID='"+e.Item.Cells[0].Text.ToString()+"'";
DataSet dsxml=GetDataSet(sql);
Byte[] stream = (Byte[])dsxml.Tables[0].Rows[0]["XmlStream"];
ds.ReadXml(new System.IO.MemoryStream(stream),System.Data.XmlReadMode.ReadSchema);
this.TextBox2.Text=ds.GetXml();//流
this.TextBox3.Text=dsxml.Tables[0].Rows[0]["XmlString"].ToString();//字符串
break;
}
}
#endregion
Web Form Designer generated code#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}
/**//// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
save#region save
private void Button1_Click(object sender, System.EventArgs e)
{
string sql="select * from UserInfo where 1=2";
DataSet ds=GetDataSet(sql);
DataRow row;
if( ds.Tables[0].Rows.Count == 0 )
{
row = ds.Tables[0].NewRow();
row["UserID"]=System.Guid.NewGuid().ToString();
UserID=row["UserID"].ToString();
if(this.TextBox1.Text!="")
{
row["UserName"]=this.TextBox1.Text;
}
else
{
row["UserName"]=System.DBNull.Value;
}
ds.Tables[0].Rows.Add(row);
}
SaveUserInfo();
SaveXml(ds);
BindData();
}
#endregion
property#region property
private string UserID
{
get
{
if(ViewState["UserID"]!=null && ViewState["UserID"].ToString()!="")
{
return ViewState["UserID"].ToString();
}
else
{
return System.Guid.NewGuid().ToString();
}
}
set
{
ViewState["UserID"]=value;
}
}
#endregion
}3.数据库脚本
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[StreamXml]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[StreamXml]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[UserInfo]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[UserInfo]
GO
CREATE TABLE [dbo].[StreamXml] (
[UserID] [uniqueidentifier] NULL ,
[XmlStream] [image] NULL ,
[XmlString] [varchar] (500) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
CREATE TABLE [dbo].[UserInfo] (
[UserID] [uniqueidentifier] NULL ,
[UserName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
建立一个aspx页面,copy如下代码
html代码
<HTML>
<HEAD>
<title>WebForm9</title>
</HEAD>
<body>
<form id="Form1" method="post" runat="server">
<asp:DropDownList id="Dropdownlist3" runat="server" Width="352px"></asp:DropDownList></form>
</body>
</HTML>
cs代码
public class WebForm3 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DropDownList Dropdownlist3;
private void Page_Load(object sender, System.EventArgs e)
{
DataTable dt = GetData();
BindData(dt,0);
}
private void BindData(DataTable dt,int id)
{
DataView dv = new DataView(dt);
dv.RowFilter = "parentid = " + id.ToString();
int m=0;
foreach(DataRowView drv in dv)
{
m++;
string blank="";
if(id!=0)
{
for(int i=0;i<m;i++)
{
blank+="空格";
}
}
ListItem li=new ListItem();
li.Text=blank+drv["id"].ToString()+drv["name"].ToString();
li.Value=drv["id"].ToString();
this.Dropdownlist3.Items.Add(li);
BindData(dt,Convert.ToInt32(drv["id"]));
}
}
GetData#region GetData
private DataTable GetData()
{
DataTable dt;
dt = new DataTable();
dt.Columns.Add("id");
dt.Columns.Add("parentid");
dt.Columns.Add("name");
DataRow dr;
dr = dt.NewRow();
dr["id"] = "1";
dr["parentid"] = "0";
dr["name"] = "a";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["id"] = "2";
dr["parentid"] = "1";
dr["name"] = "b";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["id"] = "3";
dr["parentid"] = "1";
dr["name"] = "c";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["id"] = "4";
dr["parentid"] = "2";
dr["name"] = "d";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["id"] = "5";
dr["parentid"] = "2";
dr["name"] = "e";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["id"] = "6";
dr["parentid"] = "3";
dr["name"] = "f";
dt.Rows.Add(dr);
return dt;
}
#endregion
Web Form Designer generated code#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}
/**//**//**//// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
.数据库脚本(3,4随便一个就可以)
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[area]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[area]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[city]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[city]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[povince]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[povince]
GO
CREATE TABLE [dbo].[area] (
[id] [int] NOT NULL ,
[areaID] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[area] [nvarchar] (60) COLLATE Chinese_PRC_CI_AS NULL ,
[father] [nvarchar] (6) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[city] (
[id] [int] NOT NULL ,
[cityID] [nvarchar] (6) COLLATE Chinese_PRC_CI_AS NULL ,
[city] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[father] [nvarchar] (6) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[povince] (
[id] [int] NOT NULL ,
[provinceID] [nvarchar] (6) COLLATE Chinese_PRC_CI_AS NULL ,
[province] [nvarchar] (40) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
<html>
<head>
<style>
<!--
.cls1 {}{ position:absolute; left:250px; top:89px; width:216px; height:72px; z-index:1; }
.cls2 {}{ position:absolute; left:250px; top:89px; width:95px; height:18px; z-index:2 }
input {}{ font-size: 12px; padding-top: 2px; padding-left: 2px;width:127;}
//-->
</style>
</head>
<script>
<!--
function addOption(pos){
if(event.keyCode==13)
{
var select_obj = document.getElementById("myselect");
var text_value = document.getElementById("test").value;
if (select_obj.length)
{
for (var i=0;i<select_obj.length;i++)
{
// 如果已经存在,不添加,直接退出
if (select_obj.options[i].text==text_value)
alert("选项已存在,请重新输入");
}
}
var the_option= new Option(text_value,text_value);
select_obj.add(the_option);
select_obj.selectedIndex = select_obj.options.length-1
}
}
//-->
</script>
<div class="cls1" style="clip: rect(3 280 21 110)">
<select name="myselect" style="width:127" onchange="document.getElementById('test').value=this.value">
<option value=1>1</option>
<option value=2>2</option>
<option value=3>3</option>
</select>
</div>
<div class="cls2">
<input type="text" name="test" onkeydown="addOption()" size="20" style="width: 127; height: 23">
</div>
</body>
</html>
演示radSpell动态给多textbox一次性从头到尾做拼写检查
一.静态绑定
也就是在html代码中把需要拼写检查的textbox写死在js代码中
1.1建立测试页面,copy如下html代码,然后就ok了
<HTML>
<body class="BODY">
<form runat="server" id="mainForm" method="post" style="WIDTH:100%">
<table width="98%">
<tr>
<td class="text">
<b>Spellchecking three text areas with a single dialog.</b><br>
</td>
</tr>
<tr>
<td class="text">
<textarea id="textarea1" rows="6" cols="50" style="WIDTH:360px">My firzt client side TEXTAREA with some delibirate mistakees.</textarea>
<br>
</td>
</tr>
<tr>
<td class="text">
<textarea id="textarea2" rows="6" cols="50" style="WIDTH:360px">My secont client side TEXTAREA with some delibirate mistakees.</textarea>
<br>
</td>
</tr>
<tr>
<td class="text">
<textarea id="textarea3" rows="6" cols="50" style="WIDTH:360px">My thirdth client side TEXTAREA with some delibirate mistakees.</textarea>
<br>
</td>
</tr>
</table>
<input type="button" onclick="startSpell();" value="Check all" class="button">
<script type="text/javascript">
/**//*<![CDATA[*/
function MultipleTextSource(sources)
{
this.sources = sources;
this.getText = function()
{
var texts = [];
for (var i = 0; i < this.sources.length; i++)
{
texts[texts.length] = this.sources[i].getText();
}
return texts.join("<controlSeparator><br/></controlSeparator>");
}
this.setText = function(text)
{
var texts = text.split("<controlSeparator><br/></controlSeparator>");
for (var i = 0; i < this.sources.length; i++)
{
this.sources[i].setText(texts[i]);
}
}
}
function startSpell()
{
var sources =
[
new HtmlElementTextSource(document.getElementById('textarea1')),
new HtmlElementTextSource(document.getElementById('textarea2')),
new HtmlElementTextSource(document.getElementById('textarea3'))
];
//debugger;
var spell = RadSpell.getSpellChecker('<%= RadSpell1.ClientID %>');
spell.setTextSource(new MultipleTextSource(sources));
spell.startSpellCheck();
}
/**//*]]>*/
</script>
<radS:RadSpell id="RadSpell1" Runat="server"></radS:RadSpell>
</form>
</body>
</HTML>二.动态绑定
也就是在后台动态换取页面textbox来做拼写检查,而不用写死在js中
2.1建立测试页面,copy如下html代码
<HTML>
<HEAD>
<title>WebForm4</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<radS:RadSpell id="RadSpell1" style="Z-INDEX: 101; LEFT: 112px; POSITION: absolute; TOP: 344px"
Runat="server"></radS:RadSpell>
<table width="98%">
<tr>
<td class="text">
<b>Spellchecking three text areas with a single dialog.</b><br>
</td>
</tr>
<tr>
<td class="text">
<asp:TextBox id="TextBox1" Text="My firzt client side TEXTAREA with some delibirate mistakees."
runat="server" TextMode="MultiLine" Width="288px" Height="64px"></asp:TextBox>
<br>
</td>
</tr>
<tr>
<td class="text">
<asp:TextBox id="TextBox2" Text="My secont client side TEXTAREA with some delibirate mistakees."
runat="server" TextMode="MultiLine" Width="288px" Height="64px"></asp:TextBox>
<br>
</td>
</tr>
<tr>
<td class="text">
<asp:TextBox id="TextBox3" Text="My thirdth client side TEXTAREA with some delibirate mistakees."
runat="server" TextMode="MultiLine" Width="288px" Height="72px"></asp:TextBox>
<br>
</td>
</tr>
</table>
<input type="button" onclick="startSpell();" value="Check all" class="button">
</form>
</body>
</HTML>2.2copy如下cs代码
public class WebForm4 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.TextBox TextBox1;
protected System.Web.UI.WebControls.TextBox TextBox2;
protected System.Web.UI.WebControls.TextBox TextBox3;
protected Telerik.WebControls.RadSpell RadSpell1;
StringBuilder second = new StringBuilder();
private void Page_Load(object sender, System.EventArgs e)
{
SecondScript(this);
if(second.ToString().EndsWith(","))
{
second = new StringBuilder( second.ToString().Substring(0,second.ToString().LastIndexOf(",")) );
}
string script=FirstScript()+second.ToString()+ThirdScript();
Page.RegisterStartupScript("MoreSpell",script);
}
FirstScript#region FirstScript
private string FirstScript()
{
StringBuilder First = new StringBuilder();
First.Append(@"<script type='text/javascript'>
/*<![CDATA[*/
function MultipleTextSource(sources)
{
this.sources = sources;
this.getText = function()
{
var texts = [];
for (var i = 0; i < this.sources.length; i++)
{
texts[texts.length] = this.sources[i].getText();
}
return texts.join('<controlSeparator><br/></controlSeparator>');
}
this.setText = function(text)
{
var texts = text.split('<controlSeparator><br/></controlSeparator>');
for (var i = 0; i < this.sources.length; i++)
{
this.sources[i].setText(texts[i]);
}
}
}
function startSpell()
{
var sources =
[");
return First.ToString();
}
#endregion
SecondScript#region SecondScript
private void SecondScript(Control ctrl)
{
foreach (Control c in ctrl.Controls)
{
if(c is TextBox)
{
second.AppendFormat("new HtmlElementTextSource(document.getElementById('{0}')),",c.ClientID);
}
SecondScript(c);
}
}
#endregion
ThirdScript#region ThirdScript
private string ThirdScript()
{
StringBuilder Third = new StringBuilder();
Third.Append(@"];
//debugger;
var spell = RadSpell.getSpellChecker('RadSpell1');
spell.setTextSource(new MultipleTextSource(sources));
spell.startSpellCheck();
}
/*]]>*/
</script>");
return Third.ToString();
}
#endregion
Web Form Designer generated code#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}
/**//// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
1.html代码
<HTML>
<HEAD>
<title>TreeView</title>
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
<SCRIPT type="text/javascript">
function UltraWebTree1_DragStart(oTree, oNode, oDataTransfer, oEvent)
{
//debugger;
oDataTransfer.dataTransfer.setData("Text", oNode.getText());
oDataTransfer.dataTransfer.effectAllowed = "move";
}
function UltraWebTree1_Drop(oTree, oNode, oDataTransfer, oEvent)
{
//debugger;
if(oNode.getParent()!=null)
{
alert("Please make sure that the form is moved to a case and try again.");
return false;
}
var sourceNode = oDataTransfer.sourceObject;
if(sourceNode.getParent()==null)
{
alert("Please make sure that the form is moved to a case and try again.");
return false;
}
oNode.addChild(oDataTransfer.dataTransfer.getData("Text"));
oNode.setExpanded(true);
if(sourceNode)
{
sourceNode.remove();
}
return false;
}
</SCRIPT>
</HEAD>
<body>
<form id="Form1" method="post" runat="server">
<TABLE id="Table1" height="100%" cellSpacing="0" cellPadding="0" width="100%" border="0">
<TR vAlign="top" height="100%">
<TD colSpan="2"><ignav:ultrawebtree id="UltraWebTree1" runat="server" AllowDrop="True" AllowDrag="True" BorderStyle="Groove"
BackColor="#E0E0E0" BrowserTarget="Auto" Cursor="hand" WebTreeTarget="HierarchicalTree" AutoPostBack="False"
Editable="False" Height="100%" Width="100%" BorderWidth="3px">
<SelectedNodeStyle ForeColor="White" BackColor="DarkBlue"></SelectedNodeStyle>
<Padding Top="5px"></Padding>
<Levels>
<ignav:Level Index="0"></ignav:Level>
<ignav:Level Index="1"></ignav:Level>
<ignav:Level Index="2"></ignav:Level>
</Levels>
<Styles>
<ignav:Style CssClass="DefaultItemClass"></ignav:Style>
<ignav:Style Cursor="Hand" Font-Underline="True" Font-Names="Arial" ForeColor="#FF8000" BackColor="PaleGoldenrod"
CssClass="HoverClass"></ignav:Style>
<ignav:Style ForeColor="White" BackColor="Tan" CssClass="HiliteClass"></ignav:Style>
</Styles>
<ClientSideEvents AfterNodeSelectionChange="AfterNodeSelChange" DragStart="UltraWebTree1_DragStart"
Drop="UltraWebTree1_Drop"></ClientSideEvents>
</ignav:ultrawebtree></TD>
</TR>
</TABLE>
</form>
</body>
</HTML>
2.cs代码
//using Infragistics.WebUI.UltraWebNavigator;
public class TreeView : System.Web.UI.Page
{
protected Infragistics.WebUI.UltraWebNavigator.UltraWebTree UltraWebTree1;
private void Page_Load(object sender, System.EventArgs e)
{
if(!Page.IsPostBack)
{
UltraWebTree1.Nodes.Clear();
BindTree(UltraWebTree1.Nodes,ds.Tables[0],"0");
}
}
private void BindTree(Infragistics.WebUI.UltraWebNavigator.Nodes Nds,DataTable dt,string id)
{
DataView dv = new DataView(dt);
dv.RowFilter = "parentid = '"+id.ToString()+"'";
Node node;
foreach(DataRowView drv in dv)
{
node=new Node();
node.Tag=drv["id"].ToString();
node.Text=drv["name"].ToString();
node.Expanded=true;
Nds.Add(node);
BindTree(node.Nodes,dt,drv["id"].ToString());
}
}
Web Form Designer generated code#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}
/**//// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
GetData#region GetData
private DataTable GetData()
{
DataTable dt;
dt = new DataTable();
dt.Columns.Add("id");
dt.Columns.Add("parentid");
dt.Columns.Add("name");
DataRow dr;
dr = dt.NewRow();
dr["id"] = "1";
dr["parentid"] = "0";
dr["name"] = "a";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["id"] = "2";
dr["parentid"] = "1";
dr["name"] = "b";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["id"] = "3";
dr["parentid"] = "1";
dr["name"] = "c";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["id"] = "4";
dr["parentid"] = "2";
dr["name"] = "d";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["id"] = "5";
dr["parentid"] = "2";
dr["name"] = "e";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["id"] = "6";
dr["parentid"] = "3";
dr["name"] = "f";
dt.Rows.Add(dr);
return dt;
}
}
1. oncontextmenu="window.event.returnValue=false" 将彻底屏蔽鼠标右键
<table border oncontextmenu=return(false)><td>no</table> 可用于Table
2. <body onselectstart="return false"> 取消选取、防止复制
3. onpaste="return false" 不准粘贴
4. oncopy="return false;" oncut="return false;" 防止复制
5. <link rel="Shortcut Icon" href="favicon.ico"> IE地址栏前换成自己的图标
6. <link rel="Bookmark" href="favicon.ico"> 可以在收藏夹中显示出你的图标
7. <input style="ime-mode:disabled"> 关闭输入法
8. 永远都会带着框架
<script language="javascript"><!--
if (window == top)top.location.href = "frames.htm"; //frames.htm为框架网页
// --></script>
9. 防止被人frame
<SCRIPT LANGUAGE=javascript><!--
if (top.location != self.location)top.location=self.location;
// --></SCRIPT>
10. 网页将不能被另存为
<noscript><iframe src=*.html></iframe></noscript>
11. <input type=button value=查看网页源代码
onclick="window.location = "view-source:"+ "http://www.51js.com/"">
12.删除时确认
<a href="javascript:if(confirm("确实要删除吗?"))location="boos.asp?&areyou=删除&page=1"">删
除</a>
13. 取得控件的绝对位置
//javascript
<script language="javascript">
function getIE(e){
var t=e.offsetTop;
var l=e.offsetLeft;
while(e=e.offsetParent){
t+=e.offsetTop;
l+=e.offsetLeft;
}
alert("top="+t+"/nleft="+l);
}
</script>
//VBScript
<script language="VBScript"><!--
function getIE()
dim t,l,a,b
set a=document.all.img1
t=document.all.img1.offsetTop
l=document.all.img1.offsetLeft
while a.tagName<>"BODY"
set a = a.offsetParent
t=t+a.offsetTop
l=l+a.offsetLeft
wend
msgbox "top="&t&chr(13)&"left="&l,64,"得到控件的位置"
end function
--></script>
14. 光标是停在文本框文字的最后
<script language="javascript">
function cc()
{
var e = event.srcElement;
var r =e.createTextRange();
r.moveStart("character",e.value.length);
r.collapse(true);
r.select();
}
</script>
<input type=text name=text1 value="123" onfocus="cc()">
15. 判断上一页的来源
javascript:
document.referrer
16. 最小化、最大化、关闭窗口
<object id=hh1 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11">
<param name="Command" value="Minimize"></object>
<object id=hh2 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11">
<param name="Command" value="Maximize"></object>
<OBJECT id=hh3 classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11">
<PARAM NAME="Command" VALUE="Close"></OBJECT>
<input type=button value=最小化 onclick=hh1.Click()>
<input type=button value=最大化 onclick=hh2.Click()>
<input type=button value=关闭 onclick=hh3.Click()>
本例适用于IE
17.屏蔽功能键Shift,Alt,Ctrl
<script>
function look(){
if(event.shiftKey)
alert("禁止按Shift键!"); //可以换成ALT CTRL
}
document.onkeydown=look;
</script>
18. 网页不会被缓存
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
<META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT">
或者<META HTTP-EQUIV="expires" CONTENT="0">
19.怎样让表单没有凹凸感?
<input type=text style="border:1 solid #000000">
或
<input type=text style="border-left:none; border-right:none; border-top:none; border-bottom:
1 solid #000000"></textarea>
20.<div><span>&<layer>的区别?
<div>(division)用来定义大段的页面元素,会产生转行
<span>用来定义同一行内的元素,跟<div>的唯一区别是不产生转行
<layer>是ns的标记,ie不支持,相当于<div>
21.让弹出窗口总是在最上面:
<body onblur="this.focus();">
22.不要滚动条?
让竖条没有:
<body style="overflow:scroll;overflow-y:hidden">
</body>
让横条没有:
<body style="overflow:scroll;overflow-x:hidden">
</body>
两个都去掉?更简单了
<body scroll="no">
</body>
23.怎样去掉图片链接点击后,图片周围的虚线?
<a href="#" onFocus="this.blur()"><img src="logo.jpg" border=0></a>
24.电子邮件处理提交表单
<form name="form1" method="post" action="mailto:****@***.com" enctype="text/plain">
<input type=submit>
</form>
25.在打开的子窗口刷新父窗口的代码里如何写?
window.opener.location.reload()
26.如何设定打开页面的大小
<body onload="top.resizeTo(300,200);">
打开页面的位置<body onload="top.moveBy(300,200);">
27.在页面中如何加入不是满铺的背景图片,拉动页面时背景图不动
<STYLE>
body
{background-image:url(logo.gif); background-repeat:no-repeat;
background-position:center;background-attachment: fixed}
</STYLE>
28. 检查一段字符串是否全由数字组成
<script language="javascript"><!--
function checkNum(str){return str.match(//D/)==null}
alert(checkNum("1232142141"))
alert(checkNum("123214214a1"))
// --></script>
29. 获得一个窗口的大小
document.body.clientWidth; document.body.clientHeight
30. 怎么判断是否是字符
if (/[^/x00-/xff]/g.test(s)) alert("含有汉字");
else alert("全是字符");
31.TEXTAREA自适应文字行数的多少
<textarea rows=1 name=s1 cols=27 onpropertychange="this.style.posHeight=this.scrollHeight">
</textarea>
32. 日期减去天数等于第二个日期
<script language=javascript>
function cc(dd,dadd)
{
//可以加上错误处理
var a = new Date(dd)
a = a.valueOf()
a = a - dadd * 24 * 60 * 60 * 1000
a = new Date(a)
alert(a.getFullYear() + "年" + (a.getMonth() + 1) + "月" + a.getDate() + "日")
}
cc("12/23/2002",2)
</script>
33. 选择了哪一个Radio
<HTML><script language="vbscript">
function checkme()
for each ob in radio1
if ob.checked then window.alert ob.value
next
end function
</script><BODY>
<INPUT name="radio1" type="radio" value="style" checked>Style
<INPUT name="radio1" type="radio" value="barcode">Barcode
<INPUT type="button" value="check" onclick="checkme()">
</BODY></HTML>
34.脚本永不出错
<SCRIPT LANGUAGE="javascript">
<!-- Hide
function killErrors() {
return true;
}
window.onerror = killErrors;
// -->
</SCRIPT>
35.ENTER键可以让光标移到下一个输入框
<input onkeydown="if(event.keyCode==13)event.keyCode=9">
36. 检测某个网站的链接速度:
把如下代码加入<body>区域中:
<script language=javascript>
tim=1
setInterval("tim++",100)
b=1
var autourl=new Array()
autourl[1]="www.njcatv.net"
autourl[2]="javacool.3322.net"
autourl[3]="www.sina.com.cn"
autourl[4]="www.nuaa.edu.cn"
autourl[5]=www.cctv.com
function butt(){
document.write("<form name=autof>")
for(var i=1;i<autourl.length;i++)
document.write("<input type=text name=txt"+i+" size=10 value=测试中……> =》<input type=text
name=url"+i+" size=40> =》<input type=button value=GO
onclick=window.open(this.form.url"+i+".value)><br>")
document.write("<input type=submit value=刷新></form>")
}
butt()
function auto(url){
document.forms[0]["url"+b].value=url
if(tim>200)
{document.forms[0]["txt"+b].value="链接超时"}
else
{document.forms[0]["txt"+b].value="时间"+tim/10+"秒"}
b++
}
function run(){for(var i=1;i<autourl.length;i++)document.write("<img
src=http://"+autourl+"/"+Math.random()+" width=1 height=1
onerror=auto("http://"+autourl+"")>")}
run()</script>
37. 各种样式的光标
auto :标准光标
default :标准箭头
hand :手形光标
wait :等待光标
text :I形光标
vertical-text :水平I形光标
no-drop :不可拖动光标
not-allowed :无效光标
help :?帮助光标
all-scroll :三角方向标
move :移动标
crosshair :十字标
e-resize
n-resize
nw-resize
w-resize
s-resize
se-resize
sw-resize
38.页面进入和退出的特效
进入页面<meta http-equiv="Page-Enter" content="revealTrans(duration=x, transition=y)">
推出页面<meta http-equiv="Page-Exit" content="revealTrans(duration=x, transition=y)">
这个是页面被载入和调出时的一些特效。duration表示特效的持续时间,以秒为单位。transition表示使
用哪种特效,取值为1-23:
0 矩形缩小
1 矩形扩大
2 圆形缩小
3 圆形扩大
4 下到上刷新
5 上到下刷新
6 左到右刷新
7 右到左刷新
8 竖百叶窗
9 横百叶窗
10 错位横百叶窗
11 错位竖百叶窗
12 点扩散
13 左右到中间刷新
14 中间到左右刷新
15 中间到上下
16 上下到中间
17 右下到左上
18 右上到左下
19 左上到右下
20 左下到右上
21 横条
22 竖条
23 以上22种随机选择一种
39.在规定时间内跳转
<META http-equiv=V="REFRESH" content="5;URL=http://www.51js.com">
40.网页是否被检索
<meta name="ROBOTS" content="属性值">
其中属性值有以下一些:
属性值为"all": 文件将被检索,且页上链接可被查询;
属性值为"none": 文件不被检索,而且不查询页上的链接;
属性值为"index": 文件将被检索;
属性值为"follow": 查询页上的链接;
属性值为"noindex": 文件不检索,但可被查询链接;
属性值为"nofollow": 文件不被检索,但可查询页上的链接。