2012年10月7日 星期日

CentOS 5下Yum安装本地光盘软件



首先 要先挂载光盘,把光盘挂载到media/CentOS/,media/cdrom/,或者media/cdrecorder/ 这样就不用修改配置文件了。如果想挂载到其他目录,只要修改下baseurl=file:///自己挂载的目录,就可以了。配置文件在 /etc/yum.repos.d/CentOS-Media.repo。

接着 把/etc/yum.repos.d/CentOS-Base.repo改下名,命令如下:
QUOTE:
#mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak

检查下配置文件的有没设置正确,命令如下:
QUOTE:
#cat /etc/yum.repos.d/CentOS-Media.repo
# CentOS-Media.repo
#
# This repo is used to mount the default locations for a CDROM / DVD on
# CentOS-5. You can use this repo and yum to install items directly off the
# DVD ISO that we release.
#
# To use this repo, put in your DVD and use it with the other repos to
# yum --enablerepo=c5-media [command]
#
# or for ONLY the media repo, do this:
#
# yum --disablerepo=\* --enablerepo=c5-media [command]

[c5-media]
name=CentOS-$releasever - Media
baseurl=file:///media/CentOS/
file:///media/cdrom/
file:///media/cdrecorder/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-beta

其实配置文件中已经有教怎么做的了,我好像是多此一举了。

最后 就是要安装软件咯,命令如下:
#yum --enablerepo=c5-media install gimp

安装你想要的软件。

CENTOS 下搭建配置VNC服务器



最近要用到在linux实现桌面共享,于是想到使用VNC。这个网上有很多教程,我们从头开始:
1.安装linux版的vnc

  (1)安装


tar zxvf vnc-3.3.3r1_x86_linux_2.0.tgz
cd vnc_x86_linux_2.0
cp *vnc* /usr/local/bin/
mkdir /usr/local/vnc
cp -r classes/ /usr/local/vnc/



  (2)设置vnc server的访问密码


vncpasswd



  (3)启动vnc server


vncserver



  注意运行后显示的信息,记下所用的端口号,一般从1开始,因为0被x server占用了.现在,你就能提供vnc服务了.vnc client的用法等会介绍.

  2、安装nt版的vnc

  1)安装

  解开vnc-3.3.3r7_x86_win32.zip包后,会产生winvnc和vncviewer两个目录.winvnc目录中是vnc server的安装程序,vncviewer目录中是vnc client的安装序.我只关心vnc server,在winvnc目录中执行setup即可.

  2)设置

  首先执行install default registry settings.

  run winvnc(app mode)就是执行vnc server

  这时可看到winvnc运行的小图标,用鼠标右键点击图标,在properties/incoming connections中设定密码.默认配置即可.

  现在,你的nt就能提供vnc服务了.

  3、使用vncviewer

  vnc server启动成功后,你就可用vncviewer来远程控制桌面了.


vncviewer xxx.xxx.xxx.xxx:display number



  例如,vncviewer 172.16.1.2:1

  按要求输入密码就可以看到远程的桌面了.

  注意:viewers需要在16位色的显示模式下工作,如果您的操作系统中没上16位色,那么请您及时的调整您计算机的显示模式。不然vncviewer无法正常工作。
这个实现的是远程桌面控制,但是这个一个桌面只能连接一个客户端,所以,如果要让多人连接服务器,可以在服务端启用以下命令:
xserver --passwordfile=/root/.vnc/passwd
然后客户端直接运行:
vncviewer serverIP就可以了,不用加上桌面号,这个环境下,客户端可以看到服务端的操作。
Linux学习网收集整理 ,(如果您觉得本站不错,请告诉身边的朋友,或转载到论坛、百度知道、贴吧等,记得带网址哟,不胜感激!)。

轉自:http://www.5dlinux.com/article/1/2011/linux_43459.html

2012年10月5日 星期五

解決在Hyper-V安裝CentOS 遠端桌面滑鼠不能動的問題


解決在Hyper-V安裝CentOS遠端桌面滑鼠不能動的問題


01# 設定網路(在Hyper-V設定用"傳統網路介面卡")
02# yum install kernel-devel gcc
03# rm /lib/modules/2.6.18-164.el5/build (目錄有可能會不一樣)
04# ln -s /usr/src/kernels/2.6.18-164.15.1.el5-x86_64/ /lib/modules/2.6.18-164.el5/build
05# 放光碟
06# cp -rp /media/driver /opt (目錄不一定是"/media/driver",可用mount指令查)
07# cd /opt/driver/LinuxICv2
08# ./setup.pl drivers
09# cd /opt/driver/inputvsc
10# ./setup.pl inputdriver

2012年8月15日 星期三

[Javascript] 密碼欄位提示文字"password"


SCRIPT:
script language="javascript">
 function changeBox()
 {
    document.getElementById('div1').style.display='none';
    document.getElementById('div2').style.display='';
    document.getElementById('password').focus();
 }
 function restoreBox()
 {
    if(document.getElementById('password').value=='')
    {
      document.getElementById('div1').style.display='';
      document.getElementById('div2').style.display='none';
    }
 }
/script>

FORM:

div id="div1">
input name="pass_temp" type="text" value="Password" size="20"
maxlength="20" onfocus="changeBox()" />
/div>
div id="div2" style="display:none">
input name="password" id="password" type="password" value="" size="20"
maxlength="20" onBlur="restoreBox()" />
/div>

2012年6月28日 星期四

[ASP] ADODB.Stream讀取檔案(效果如FSO)


讀出
<%
set stm=server.CreateObject("adodb.stream")
stm.charset="UTF-8"
stm.Open
stm.loadfromfile filepath '路徑
foslist=stm.readtext  '內容
stm.Close
set stm=nothing
%>
寫入
<%
Set stm = server.createobject("ADODB.Stream")
stm.Charset = "UTF-8"
stm.Open
stm.WriteText dsvd & foslist '內容,1換行
stm.SaveToFile filepath, 2  '路徑
stm.Close
set stm=nothing
%>

2012年6月22日 星期五

[Javascript] getElementsByClassName | getElementById 失效 IE 8 失效?

在制作记忆菜单的时候
我遇到了这个问题:
getElementsByClassName 在火狐下正常,IE下却说不认识这个方法。脚本错误。

查阅了相关资料 发现是因为标准状态下 不认识getElementsByClassName 这个方法。

标准状态下据说有三个方法可以支持:
分别是:
1. 通过顶层document节点获取:
            (1) document.getElementById(elementId):该方法通过节点的ID,可以准确获得需要的元素,是比较简单快捷的方法。如果页面上含有多个相同id的节点,那么只返回第一个节点。
             如今,已经出现了如prototype、Mootools等多个JavaScript库,它们提供了更简便的方法:$(id),参数仍然是节点的id。这个方法可以看作是document.getElementById()的另外一种写法,不过$()的功能更为强大,具体用法可以参考它们各自的API文档。
            (2)document.getElementsByName(elementName):该方法是通过节点的name获取节点,从名字可以看出,这个方法返回的不是一个节点元素,而是具有同样名称的节点数组。然后,我们可以通过要获取节点的某个属性来循环判断是否为需要的节点。
            例如:在HTML中checkbox和radio都是通过相同的name属性值,来标识一个组内的元素。如果我们现在要获取被选中的元素,首先获取改组元素,然后循环判断是节点的checked属性值是否为true即可。
           (3)document.getElementsByTagName(tagName):该方法是通过节点的Tag获取节点,同样该方法也是返回一个数组,例如:document.getElementsByTagName('A')将会返回页面上所有超链接节点。在获取节点之前,一般都是知道节点的类型的,所以使用该方法比较简单。但是缺点也是显而易见,那就是返回的数组可能十分庞大,这样就会浪费很多时间。那么,这个方法是不是就没有用处了呢?当然不是,这个方法和上面的两个不同,它不是document节点的专有方法,还可以应用其他的节点,下面将会提到。
   2、通过父节点获取:
            (1)parentObj.firstChild:如果节点为已知节点(parentObj)的第一个子节点就可以使用这个方法。这个属性是可以递归使用的,也就是支持parentObj.firstChild.firstChild.firstChild...的形式,如此就可以获得更深层次的节点。
           (2)parentObj.lastChild:很显然,这个属性是获取已知节点(parentObj)的最后一个子节点。与firstChild一样,它也可以递归使用。
           在使用中,如果我们把二者结合起来,那么将会达到更加令人兴奋的效果,即:parentObj.firstChild.lastChild.lastChild...
          (3)parentObj.childNodes:获取已知节点的子节点数组,然后可以通过循环或者索引找到需要的节点。
注意:经测试发现,在IE7上获取的是直接子节点的数组,而在Firefox2.0.0.11上获取的是所有子节点即包括子节点的子节点。
          (4)parentObj.children:获取已知节点的直接子节点数组。
注意:经测试,在IE7上,和childNodes效果一样,而Firefox2.0.0.11不支持。这也是为什么我要使用和其他方法不同样式的原因。因此不建议使用。
          (5)parentObj.getElementsByTagName(tagName):使用方法不再赘述,它返回已知节点的所有子节点中类型为指定值的子节点数组。例如:parentObj.getElementsByTagName('A')返回已知的子节点中的所有超链接。
3、通过临近节点获取:
     (1)neighbourNode.previousSibling:获取已知节点(neighbourNode)的前一个节点,这个属性和前面的firstChild、lastChild一样都似乎可以递归使用的。
     (2)neighbourNode.nextSibling:获取已知节点(neighbourNode)的下一个节点,同样支持递归。
4、通过子节点获取:
     (1)childNode.parentNode:获取已知节点的父节点。
   上面提到的方法,只是一些基本的方法,如果使用了Prototype等JavaScript库,可能还获得其他不同的方法,例如通过节点的class获取等等。不过,如果能够灵活运用上面的各种方法,相信应该可以应付大部分的程序


经过本人测试。发现getElementsByName这个东西不好使。甚至我没有成功的使用过。

所以我建议 平时只使用getElementById和getElementsByTagName即可。getElementsByName尽量少用。

我在做记忆菜单的时候要使用getElementsByClassName ,但是IE不支持。怎么办呢?
据说IE8可以支持了。并且现在火狐是支持的,注意我使用的FF3 他是支持这个getElementsByClassName 的。
最后针对IE 专门有写了一段代码来实现getElementsByClassName这个方法
代码如下:

document.getElementsByClassName = function(eleClassName){
  var getEleClass = [];//定义一个数组
  var myclass = new RegExp("\\b"+eleClassName+"\\b");//创建一个正则表达式对像
  var elem = this.getElementsByTagName("*");//获取文档里所有的元素
  for(var h=0;h<elem.length;h++){
    var classes = elem[h].className;//获取class对像
    if (myclass.test(classes)) getEleClass.push(elem[h]);//正则比较,取到想要的CLASS对像
  }
  return getEleClass;//返回数组
}


这样IE这个傻X就会认识getElementsByClassName 这个方法了。

关于记忆菜单的源码请看下一遍日志。



2012年6月20日 星期三

[SQL] null 空字串

不等於某個特定值 SELECT * FROM  table  WHERE  欄位  <>  ' xxx'
不等於NULL值 SELECT * FROM  table  WHERE  欄位 IS NOT NULL


where len(欄位)<>0 --不等於空字串(欄位 <> '') where 欄位<>0 --不等於0(數字) where 欄位 is not null --不為空值
where 欄位 is null --為空值

在資料庫中如果你不輸入任何的資訊資料表默認的值即為“null”,而null不是字串,
因此在查詢時不能用“=”,“!=”,“<>”,等來判斷;
null是bool型別的資料,因此你在查詢不為空時只能透過判斷:
select * from 資料表名稱 where 欄位名稱 is null


select * from 資料表名稱 where not(欄位名稱 is null or 欄位名稱='')




[Javascript][ASP.NET]Javascript編碼,解碼。ASP.NET(C#)對應之編碼,解碼


escape不編碼字符有69個:*,+,-,.,/,@,_,0-9,a-z,A-Z
encodeURI不編碼字符有82個:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z
encodeURIComponent不編碼字符有71個:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z
1.
JS: escape :
js使用數據時可以使用escape
例如:搜藏中history紀錄。
0-255以外的unicode值進行編碼時輸出%u****格式,其它情况下escape,encodeURI,encodeURIComponent編碼結果相同。
解碼使用:unescape
C#:
HttpUtility.UrlEncode 
HttpUtility.UrlDecode

2.
JS: encodeURI :
進行url跳轉時可以整體使用encodeURI
例如:Location.href=encodeURI("http://cang.baidu.com/do/s?word=百度&ct=21");
解碼使用decodeURI();
C#: decodeURIComponent

3.
JS: encodeURIComponent :
傳遞參數時需要使用encodeURIComponent,這樣組合的url才不會被#等特殊字符截斷。 
例如:<script language="javascript">document.write('<a href="http://passport.baidu.com/?logout&aid=7& u='+encodeURIComponent("http://cang.baidu.com/bruce42")+'">退出</a& gt;');</script>
解碼使用decodeURIComponent()
C#:
[HttpContext.Current.]Server.UrlDecode

[HttpContext.Current.]Server.UrlEncode

2012年6月18日 星期一

[SQL] SQL語法在處理字串前加一個N的涵意

在 SQL Server 中處理 Unicode 字串常數時,您必需在所有的 Unicode 字串前加上大寫字母 N 做為前置詞,如《SQL Server 線上叢書》主題<使用 Unicode 資料>所述。「N」前置詞代表的是 SQL-92 標準中的國家語言,且必須為大寫。如果您沒有在 Unicode 字串常數前面加上 N 做為前置詞,則 SQL Server 會在使用字串前,先將其轉換成目前資料庫的非 Unicode 字碼頁。



轉自:http://tw.myblog.yahoo.com/jw!oOvU5fiVERDIUmoK_5xMN0c-/article?mid=3

DIV屬性


用於較短文字的設定<span>

用於長文章段落設定<div>

基本架構:<div id='容器名稱'>
          <div class='容器類別名稱'>
          <div style='容器定義'>
相關屬性:<span>

<div></div>  區段標籤
<div style='font:XX XX XX XX XX XX'>區段文字樣式的綜合設定 XX 設定方式如下說明
  文字基本樣式:
    1.normal:一般
    2.italic:斜體
    3.oblique:斜體
  英文字大小寫:
    1.normal:一般
    2.smallcaps:大寫字
  文字粗細:
    1.normal:一般
    2.bold:粗
    3.bolder:更粗
    4.lighter:細
    5.直接設定100-900間的粗細值
  文字字級:
    通常以點數來表示,如:10pt、20pt等等。
  文字字高:
    通常以點數來表示,如:12pt、24pt等等。
<div style="font-family:XX">設定區段字型
  設定區段文字字型 , 可連續設定多個字型 , 若是瀏覽者沒有第一種字型 , 就會依序往下尋找
  若是全部設定的字型都未安裝 , 則會以預設的字型顯示 , 一般預設新細明體
<div style="font-size:XX">設定區段文字的大小
  設定大小有三種方式
    A.絕對大小:
      mm : 公釐
      cm : 公分 , 1cm=10mm
      in : 英吋 , 1in=2.54cm
      pt : 點數 , 1pt=1/72in
      pc : 1pc=12pt
      px : 像素 , 在繪圖軟體中為 pix
    B.相對大小:
      em => 以預設字體間的相對大小  
      ex => 以倍數來顯示大小  
       % => 以預設字體的百分比來顯示表示大小
    C.參數設定:
      1.XX-small:超特小文字
      2.x-small:特小文字
      3.small:小文字
      4.medium:中等文字
      5.XX-large:超特大
      6.x-large:特大larg:大
      7.samller:比預設文字小一級
      8.larger : 比預設文字大一級
<div style='line-height:XX'>設定區段行高
  設定大小有二種方式
    A.絕對大小:
      請參考上面絕對大小
    B.相對大小: 
      請參考上面相對大小
<div style='font-weight:XX'>設定區段文字的粗細
  參數:
    請參考上面粗細設定
  粗細值:
    直接輸入100-900的粗細值,其中400為正常粗細的預設值。
<div style="font-STYLE:XX">設定區段文字的樣式
  樣式參數:
    1.normal:一般
    2.bold:粗體
    3.italic:斜體
    4.oblique:斜體
<div style="font-VARIANT:XX">設定段落英文字大寫
  參數:
    1.normal:依輸入顯示
    2.small-caps:所有字母大寫
<div style="TEXT-DECORATION:XX">設定區段文字效果
  參數:
    1.none:無效果
    2.underline:文字底線效果
    3.overline:在文字上方畫線
    4.line-through:刪除線的效果
    5.blink:閃爍效果,僅在Netscape適用
<div style="TEXT-TRANSFORM:XX">設定區段英文單字的大小寫
  參數:
    1.none:無效果
    2.uppercase:所有的字母轉換成大寫
    3.lowercase:所有的字母轉換成小寫
    4.capitalize:將單字的首字字母轉成大寫
<div align="XX">設定區段內文字的對齊方式
  對齊參數:
    1.left:向左對齊
    2.center:置中對齊,效果如同<CENTER>….</CENTER>
    3.light:向右對齊
<div style="TEXT-INDENT:XX">設定區段的縮排
  設定大小有二種方式
    A.絕對大小:
      請參考上面絕對大小
    B.相對大小: 
      請參考上面相對大小
<div style="LETTER-SPACING:XX">設定區段文字的間距
  設定大小有二種方式
    A.絕對大小:
      請參考上面絕對大小
    B.相對大小: 
      請參考上面相對大小
<div style="WORD-SPACING:XX">設定區段內英文單字間的間距
  設定大小有二種方式
    A.絕對大小:
      請參考上面絕對大小
    B.相對大小: 
      請參考上面相對大小
<div style="WIDTH:XX">控制區段文字的顯示寬度
  設定大小有二種方式
    A.絕對大小:
      請參考上面絕對大小
    B.相對大小: 
      請參考上面相對大小
<div style="HEIGHT:XX">控制區段文字的高度
  設定大小有二種方式
    A.絕對大小:
      請參考上面絕對大小
    B.相對大小: 
      請參考上面相對大小
<div style="OVERFLOW:XX">設定區段的捲軸
  參數:
    1.visable:顯示所有內容而不理會段落大小設定
    2.hidden:超出段落大小設定的內容將不顯示出來
    3.scroll:如果內容超出段落大小設定,將出現捲軸,並滾動顯示
    4.auto:自動改變段落大小,以適應內容顯示
<div style="COLOR:XX">設定區段文字的色彩
    有二種方式設定顏色
    A.色碼表示
    B.顏色語法
<div style='background:xx xx xx xx xx xx'>區段背景的綜合設定 XX 設定方式如下說明
  色彩 : 設定區段背景顏色
  插入的圖檔 : 設定作為背景圖片的路徑
  圖檔排列 : 指定北警圖片的排列方式
  圖檔固定 : 指定北警圖片的固定方式
  圖檔位置 : 指定北警圖片的水平或基本位置
<div style="BACKGROUND-COLOR:XX">設定區段內的背景色彩
    有二種方式設定顏色
    A.色碼表示
    B.顏色語法
<div style="BACKGROUND-IMAGE:XX">使用圖片作為區段的背景
   圖檔路徑表示方式有兩種
     相對路徑:
       標示法通常為 '/資料夾名稱/檔案名稱'
       要使用上一層檔案 , 則使用 '../檔案名稱'
     絕對路徑:
       標示法通常試伺服器上的存放位置 , 例如 : 'www.hcvs.kh.edu.tw/teacher/benme/image/bk4.jpg'
   路徑設定往往是網頁設計初學者之殺手 , 很多初學者路徑觀念若不清楚
       常常會看不到自己精心設計的圖片. 後面的超連結也會連帶受影響 , 初學者不可大意略過
<div style="BACKGROUND-REPEAT:XX">設定區段中的背景圖片排列方式
  參數:
    1.repeat:填滿整個網頁
    2.repeat-X:單行水平排列
    3.repeat-Y:單行垂直排列
    4.no-repeat:單一圖片效果
<div STYLE="BACKGROUND-ATTACHMENT:XX">設定區段背景圖片的浮水印效果
  參數:
    1.scroll:讓背景圖片與網頁內容同時滾動。
    2.fixed:套用浮水印效果,背景圖片不隨著內容滾動。
<div STYLE="BACKGROUND-POSITION:XX">設定區段內背景圖片的位置
  水平參數:
    1.left:靠左對齊
    2.center:置中對齊
    3.light:靠右對齊
  水平參數:
    1.top:向上對齊
    2.center:置中對齊
    3.bottom:向下對齊
  距離設定有二種方式
    A.絕對距離:
      請參考上面絕對大小
    B.相對距離: 
      請參考上面相對大小
<div STYLE="MARGIN:XX XX XX XX">設定區段四邊與視窗的距離
  有二種設定方式
    A.絕對距離:
      請參考上面絕對大小
    B.相對距離: 
      請參考上面相對大小
<div STYLE="PADDING:XX XX XX XX">設定區段文字與邊框的距離
  有二種設定方式
    A.絕對距離:
      請參考上面絕對大小
    B.相對距離: 
      請參考上面相對大小
<div STYLE="BORDER:XX XX XX">設定區段邊框的樣式
  有三種設定方式
    A.絕對距離:
      請參考上面絕對大小
    B.相對距離: 
      請參考上面相對大小
    C.參數語法:
      thin:細邊框
      medium:中等邊框
      thick:粗邊框
  有二種方式設定顏色
    A.色碼表示
    B.顏色語法
  樣式參數
    語法      IE        Netscape
    none    無效果       無效果
    hidden  立體樣式1    無效果
    dotted  實線         虛線樣式1
    dashed  無效果       虛線2
    solid   無效果       實線
    double  無效果       雙實線
    groove  立體樣式2    立體樣式3
    ridge   立體樣式4    立體樣式5
    inset   立體樣式6    立體樣式7
<div STYLE="POSITION:XX LEFT:XX;TOP:XX">設定區段的位置
  position 使用定位基準 , left 及 top 使用距離設定
  定位基準:
    1.static:自動調整區段的位置
    2.absolute:指定絕對位置
    3.relative:指定相對位置
  距離有二種設定方式
    A.絕對距離:
      請參考上面絕對大小
    B.相對距離: 
      請參考上面相對大小
<div STYLE="VISIBILITY:XX">設定區段內容的顯示與隱藏
  參數:
    1.hidden:隱藏
    2.visible:不隱藏
<div STYLE="POSITION:ABSOLUTE;FILTER:ALPHA(XX)">設定區段的絕對位置及透明度
  指令名稱:
    1.opacity:設定開始點的透明度,代表完全透明;100代表完全不透明。
    2.finishopacity:終結點的透明度,範圍也是0到100。
    3.style:指定了透明區域的形狀,0全部、1線形、2橢圓形、3長方形。
    4.startX、startY:適用範圍的開始X和Y座標。
    5.finishX、finishY:適用範圍的終點X和Y座標。

2012年5月3日 星期四

Exchange Server 2003 所有進出郵件副本設定(郵件監控)


Exchange Server 2003 設定所有郵件監控可利用下列方式將所有郵件副本一份給某一個信箱,再利用此信箱看到所有進出的信件。
開啟系統管理員=>伺服器=>Server=>預設儲存群組=>信箱儲存區
執行=>內容
封存由此儲存.......打勾
下方選擇欲接收郵件的信箱即可

Exchange Server 2003 設定轉寄郵件的問題

如果帳號在內部 

從AD使用者和電腦-->Exchange一般-->傳遞選項-->轉送(挑選你要轉的Account) 

如果帳號在外部 

先在AD使用者和電腦建立一個連絡人(SMTP) 

之後再依上述操作就可以

2012年4月23日 星期一

[ASP] 常用函數表

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    



2012年4月20日 星期五

[ASP] 用Asp隱藏檔案路徑實現防盜鏈

如果我們知道一個靜態檔案的實際路徑如:http://www.xxxx.com/download/51windows.pdf,如果伺服器沒有作特別的限制設定,我們就可以毫不費力的把它下載下來!當網站提供51windows.pdf下載時,怎麼樣才能讓下載者無法得到他的實際路徑呢!本文就來介紹如何使用Asp來隱藏檔案的實際下載路徑。
  我們在管理網站檔案時,可以把附檔名一樣的檔案放在同一個目錄下,起一個比較特別名字,例如放pdf檔案目錄為the_pdf_file_s,把下面程式碼另存為down.asp,他的網上路徑為http://www.xx.com/down.asp,我們就可以用http://www.xx.com/down.asp?FileName=51windows.pdf來下載這個檔案了,而且下載者無法看到這個檔案實際下載路徑的!在down.asp中我們還可以設定下載檔案是否需要登入,判斷下載的來源頁是否為外部網站,從而可以做到防止檔案被盜鏈。
示例程式碼:

<%
From_url = Cstr(Request.ServerVariables("HTTP_REFERER"))
Serv_url = Cstr(Request.ServerVariables("SERVER_NAME"))

if mid(From_url,8,len(Serv_url)) <> Serv_url then
response.write "非法連結!" '防止盜鏈
response.end
end if
if Request.Cookies("Logined")="" then
response.redirect "/login.asp" '需要登入!
end if

Function GetFileName(longname)'/folder1/folder2/file.asp=>file.asp
while instr(longname,"/")
  longname = right(longname,len(longname)-1)
wend
GetFileName = longname
End Function

Dim Stream
Dim Contents
Dim FileName
Dim TrueFileName
Dim FileExt

Const adTypeBinary = 1
FileName = Request.QueryString("FileName")

if FileName = "" Then
    Response.Write "無效檔案名!"
    Response.End
End if

FileExt = Mid(FileName, InStrRev(FileName, ".") + 1)

Select Case UCase(FileExt)
    Case "ASP", "ASA", "ASPX", "ASAX", "MDB"
        Response.Write "非法操作!"
        Response.End
End Select

Response.Clear

if lcase(right(FileName,3))="gif" or lcase(right(FileName,3))="jpg" or lcase(right(FileName,3))="png" then
Response.ContentType = "image/*" '對圖像檔案不出現下載對話框
else
Response.ContentType = "application/ms-download"
end if

Response.AddHeader "content-disposition", "attachment; filename=" & GetFileName(Request.QueryString("FileName"))

Set Stream = server.CreateObject("ADODB.Stream")
Stream.Type = adTypeBinary
Stream.Open

if lcase(right(FileName,3))="pdf" then '設定pdf類型檔案目錄
TrueFileName = "/the_pdf_file_s/"&FileName
end if

if lcase(right(FileName,3))="doc" then '設定DOC類型檔案目錄
TrueFileName = "/my_D_O_C_file/"&FileName
end if

if lcase(right(FileName,3))="gif" or lcase(right(FileName,3))="jpg" or lcase(right(FileName,3))="png" then
TrueFileName = "/all_images_/"&FileName '設定圖像檔案目錄
end if

Stream.LoadFromFile Server.MapPath(TrueFileName)

While Not Stream.EOS
    Response.BinaryWrite Stream.Read(1024 * 64)
Wend

Stream.Close
Set Stream = Nothing
Response.Flush
Response.End
%>



2012年4月9日 星期一

[ASP.NET] asp.net中Bind和Eval的有什麼區別

TemplateField模組中Bind和Eval的有什麼區別 
eval()方法在運行時使用反射執行後期綁定計算,因此與標準的ASP.NET數據綁定方法bind相比,會導致性能明顯下降。它一般用在綁定時需要格式化字符串的情況下。多數情況盡量少用此方法
   
   
  Eval 方法是靜態(只讀)方法,該方法採用數據字段的值作為參數並將其作為字符串返回。 Bind 方法支持讀/寫功能,可以檢索數據綁定控件的值並將任何更改提交回數據庫。
   
  使用 Eval 方法
  Eval 方法可計算數據綁定控件(如GridView、DetailsView 和FormView 控件)的模板中的後期綁定數據表達式。在運行時,Eval 方法調用DataBinder 對象的Eval 方法,同時引用命名容器的當前數據項。命名容器通常是包含完整記錄的數據綁定控件的最小組成部分,如GridView 控件中的一行。因此,只能對數據綁定控件的模板內的綁定使用Eval 方法。
   
  Eval 方法以數據字段的名稱作為參數,從數據源的當前記錄返回一個包含該字段值的字符串。可以提供第二個參數來指定返回字符串的格式,該參數為可選參數。字符串格式參數使用為String 類的Format 方法定義的語法。
   
  使用 Bind 方法
  Bind 方法與Eval 方法有一些相似之處,但也存在很大的差異。雖然可以像使用Eval 方法一樣使用Bind 方法來檢索數據綁定字段的值,但當數據可以被修改時,還是要使用Bind 方法。
   
  在ASP.NET 中,數據綁定控件(如GridView、DetailsView 和FormView 控件)可自動使用數據源控件的更新、刪除和插入操作。例如,如果已為數據源控件定義了SQL Select、Insert、Delete 和Update 語句,則通過使用GridView、DetailsView 或FormView 控件模板中的Bind 方法,就可以使控件從模板中的子控件中提取值,並將這些值傳遞給數據源控件。然後數據源控件將執行適當的數據庫命令。出於這個原因,在數據綁定控件的EditItemTemplate 或InsertItemTemplate 中要使用Bind 函數。
   
  Bind 方法通常與輸入控件一起使用,例如由編輯模式中的GridView 行所呈現的TextBox 控件。當數據綁定控件將這些輸入控件作為自身呈現的一部分創建時,該方法便可提取輸入值。
   
  Bind 方法採用數據字段的名稱作為參數,從而與綁定屬性關聯,如下面的示例所示:
<EditItemTemplate>
   <table>
   <tr>
   <td align=right>
   <b>Employee ID:</b>
   </td>
   <td>
   <%# Eval("EmployeeID") %>
   </td>
   </tr>
   <tr>
   <td align=right>
   <b>First Name:</b>
   </td>
   <td>
   <asp:TextBox ID="EditFirstNameTextBox" RunAt="Server"
   Text='<%# Bind("FirstName") %>' />
   </td>
   </tr>
   <tr>
   <td align=right>
   <b>Last Name:</b>
   </td>
   <td>
   <asp:TextBox ID="EditLastNameTextBox" RunAt="Server"
   Text='<%# Bind("LastName") %>' />
   </td>
   </tr>
   <tr>
   <td colspan="2">
   <asp:LinkButton ID="UpdateButton" RunAt="server"
   Text="Update" CommandName="Update" />
  
   <asp:LinkButton ID="CancelUpdateButton" RunAt="server"
   Text="Cancel" CommandName="Cancel" />
   </td>
   </tr>
   </table>
  </EditItemTemplate>
單擊行的Update 按鈕時,使用Bind 語法綁定的每個控件屬性值都會被提取出來,並傳遞給數據源控件以執行更新操作。
   
   
  使用 DataBinder.Eval
  ASP.NET 提供了一個名為DataBinder.Eval 的靜態方法,該方法計算後期綁定的數據綁定表達式,並將結果格式化為字符串(可選)。利用此方法,可以避免許多在將值強制為所需數據類型時必須執行的顯式強制轉換操作。
   
  例如,在下面的代碼片段中,一個整數顯示為貨幣字符串。使用標準的ASP.NET 數據綁定語法,必須首先強制轉換數據行的類型以便檢索數據字段IntegerValue。然後,這將作為參數傳遞到String.Format 方法:
   
   
  <%# String.Format("{0:c}", ((DataRowView)Container.DataItem)["IntegerValue"]) %>
   
   
  將此語法與DataBinder.Eval 的語法進行比較,後者只有三個參數:數據項的命名容器、數據字段名稱和格式字符串。在模板化列表中(如DataList 類、DataGrid 類或Repeater 類),命名容器始終是Container.DataItem。
   
   
  <%# DataBinder.Eval(Container.DataItem, "IntegerValue", "{0:c}") %>
   
   
  格式字符串參數是可選的。如果它被忽略,DataBinder.Eval 將返回類型對象的值,如下面的示例所示:
   
   
  <%# (bool)DataBinder.Eval(Container.DataItem, "BoolValue") %>
   
   
  當對模板化列表中的控件進行數據綁定時,DataBinder.Eval 特別有用,因為數據行和數據字段通常都必須強制轉換。 

C#加密算法匯總


方法一:
 //須添加對System.Web的引用 
 using System.Web.Security; 
 
 ... 
 
 /// <summary> 
 /// SHA1加密字符串 
 /// </summary> 
 /// <param name="source">源字符串</param> 
 /// <returns>加密後的字符串</returns> 
 public string SHA1(string source) 
 { 
     return FormsAuthentication.HashPasswordForStoringInConfigFile(source, "SHA1"); 
 } 


 /// <summary> 
 /// MD5加密字符串 
 /// </summary> 
 /// <param name="source">源字符串</param> 
 /// <returns>加密後的字符串</returns> 
 public string MD5(string source) 
 { 
     return FormsAuthentication.HashPasswordForStoringInConfigFile(source, "MD5");; 
 } 



方法二(可逆加密解密):
 using System.Security.Cryptography; 
 
 ... 
 
 public string Encode(string data) 
 { 
     byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64); 
     byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64); 
 
     DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider(); 
     int i = cryptoProvider.KeySize; 
     MemoryStream ms = new MemoryStream(); 
     CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateEncryptor(byKey, byIV), CryptoStreamMode.Write); 
 
     StreamWriter sw = new StreamWriter(cst); 
     sw.Write(data); 
     sw.Flush(); 
     cst.FlushFinalBlock(); 
     sw.Flush(); 
     return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length); 
 
 } 
 
 public string Decode(string data) 
 { 
     byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64); 
     byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64); 
 
     byte[] byEnc; 
     try 
     { 
         byEnc = Convert.FromBase64String(data); 
     } 
     catch 
     { 
         return null; 
     } 
 
     DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider(); 
     MemoryStream ms = new MemoryStream(byEnc); 
     CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateDecryptor(byKey, byIV), CryptoStreamMode.Read); 
     StreamReader sr = new StreamReader(cst); 
     return sr.ReadToEnd(); 
 } 
方法三(MD5不可逆):
 using System.Security.Cryptography; 
 
 ... 
 
 //MD5不可逆加密 
 
 //32位加密 
 
 public string GetMD5_32(string s, string _input_charset) 
 { 
     MD5 md5 = new MD5CryptoServiceProvider(); 
     byte[] t = md5.ComputeHash(Encoding.GetEncoding(_input_charset).GetBytes(s)); 
     StringBuilder sb = new StringBuilder(32); 
     for (int i = 0; i < t.Length; i++) 
     { 
         sb.Append(t[i].ToString("x").PadLeft(2, '0')); 
     } 
     return sb.ToString(); 
 } 
 
 //16位加密 
 public static string GetMd5_16(string ConvertString) 
 { 
     MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider(); 
     string t2 = BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(ConvertString)), 4, 8); 
     t2 = t2.Replace("-", ""); 
     return t2; 
 } 
方法四(對稱加密):
 using System.IO; 
 using System.Security.Cryptography; 
 
 ... 
 
 private SymmetricAlgorithm mobjCryptoService; 
 private string Key; 
 /// <summary>    
 /// 對稱加密類的構造函數    
 /// </summary>    
 public SymmetricMethod() 
 { 
     mobjCryptoService = new RijndaelManaged(); 
     Key = "Guz(%&hj7x89H$yuBI0456FtmaT5&fvHUFCy76*h%(HilJ$lhj!y6&(*jkP87jH7"; 
 } 
 /// <summary>    
 /// 獲得密鑰    
 /// </summary>    
 /// <returns>密鑰</returns>    
 private byte[] GetLegalKey() 
 { 
     string sTemp = Key; 
     mobjCryptoService.GenerateKey(); 
     byte[] bytTemp = mobjCryptoService.Key; 
     int KeyLength = bytTemp.Length; 
     if (sTemp.Length > KeyLength) 
         sTemp = sTemp.Substring(0, KeyLength); 
     else if (sTemp.Length < KeyLength) 
         sTemp = sTemp.PadRight(KeyLength, ' '); 
     return ASCIIEncoding.ASCII.GetBytes(sTemp); 
 } 
 /// <summary>    
 /// 獲得初始向量IV    
 /// </summary>    
 /// <returns>初試向量IV</returns>    
 private byte[] GetLegalIV() 
 { 
     string sTemp = "E4ghj*Ghg7!rNIfb&95GUY86GfghUb#er57HBh(u%g6HJ($jhWk7&!hg4ui%$hjk"; 
     mobjCryptoService.GenerateIV(); 
     byte[] bytTemp = mobjCryptoService.IV; 
     int IVLength = bytTemp.Length; 
     if (sTemp.Length > IVLength) 
         sTemp = sTemp.Substring(0, IVLength); 
     else if (sTemp.Length < IVLength) 
         sTemp = sTemp.PadRight(IVLength, ' '); 
     return ASCIIEncoding.ASCII.GetBytes(sTemp); 
 } 
 /// <summary>    
 /// 加密方法    
 /// </summary>    
 /// <param name="Source">待加密的串</param>    
 /// <returns>經過加密的串</returns>    
 public string Encrypto(string Source) 
 { 
     byte[] bytIn = UTF8Encoding.UTF8.GetBytes(Source); 
     MemoryStream ms = new MemoryStream(); 
     mobjCryptoService.Key = GetLegalKey(); 
     mobjCryptoService.IV = GetLegalIV(); 
     ICryptoTransform encrypto = mobjCryptoService.CreateEncryptor(); 
     CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write); 
     cs.Write(bytIn, 0, bytIn.Length); 
     cs.FlushFinalBlock(); 
     ms.Close(); 
     byte[] bytOut = ms.ToArray(); 
     return Convert.ToBase64String(bytOut); 
 } 
 /// <summary>    
 /// 解密方法    
 /// </summary>    
 /// <param name="Source">待解密的串</param>    
 /// <returns>經過解密的串</returns>    
 public string Decrypto(string Source) 
 { 
     byte[] bytIn = Convert.FromBase64String(Source); 
     MemoryStream ms = new MemoryStream(bytIn, 0, bytIn.Length); 
     mobjCryptoService.Key = GetLegalKey(); 
     mobjCryptoService.IV = GetLegalIV(); 
     ICryptoTransform encrypto = mobjCryptoService.CreateDecryptor(); 
     CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read); 
     StreamReader sr = new StreamReader(cs); 
     return sr.ReadToEnd(); 
 } 
方法五:
 using System.IO; 
 using System.Security.Cryptography; 
 using System.Text; 
 
 ... 
 
 //默認密鑰向量 
 private static byte[] Keys = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF }; 
 /// <summary> 
 /// DES加密字符串 
 /// </summary> 
 /// <param name="encryptString">待加密的字符串</param> 
 /// <param name="encryptKey">加密密鑰,要求為8位</param> 
 /// <returns>加密成功返回加密後的字符串,失敗返回源串</returns> 
 public static string EncryptDES(string encryptString, string encryptKey) 
 { 
     try 
     { 
         byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8)); 
         byte[] rgbIV = Keys; 
         byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString); 
         DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider(); 
         MemoryStream mStream = new MemoryStream(); 
         CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write); 
         cStream.Write(inputByteArray, 0, inputByteArray.Length); 
         cStream.FlushFinalBlock(); 
         return Convert.ToBase64String(mStream.ToArray()); 
     } 
     catch 
     { 
         return encryptString; 
     } 
 } 
 
 /// <summary> 
 /// DES解密字符串 
 /// </summary> 
 /// <param name="decryptString">待解密的字符串</param> 
 /// <param name="decryptKey">解密密鑰,要求為8位,和加密密鑰相同</param> 
 /// <returns>解密成功返回解密後的字符串,失敗返源串</returns> 
 public static string DecryptDES(string decryptString, string decryptKey) 
 { 
     try 
     { 
         byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey); 
         byte[] rgbIV = Keys; 
         byte[] inputByteArray = Convert.FromBase64String(decryptString); 
         DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider(); 
         MemoryStream mStream = new MemoryStream(); 
         CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write); 
         cStream.Write(inputByteArray, 0, inputByteArray.Length); 
         cStream.FlushFinalBlock(); 
         return Encoding.UTF8.GetString(mStream.ToArray()); 
     } 
     catch 
     { 
         return decryptString; 
     } 
 }  
方法六(文件加密):
 using System.IO; 
 using System.Security.Cryptography; 
 using System.Text; 
 
 ... 
 
 //加密文件 
 private static void EncryptData(String inName, String outName, byte[] desKey, byte[] desIV) 
 { 
     //Create the file streams to handle the input and output files. 
     FileStream fin = new FileStream(inName, FileMode.Open, FileAccess.Read); 
     FileStream fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write); 
     fout.SetLength(0); 
 
     //Create variables to help with read and write. 
     byte[] bin = new byte[100]; //This is intermediate storage for the encryption. 
     long rdlen = 0;              //This is the total number of bytes written. 
     long totlen = fin.Length;    //This is the total length of the input file. 
     int len;                     //This is the number of bytes to be written at a time. 
 
     DES des = new DESCryptoServiceProvider(); 
     CryptoStream encStream = new CryptoStream(fout, des.CreateEncryptor(desKey, desIV), CryptoStreamMode.Write); 
 
     //Read from the input file, then encrypt and write to the output file. 
     while (rdlen < totlen) 
     { 
         len = fin.Read(bin, 0, 100); 
         encStream.Write(bin, 0, len); 
         rdlen = rdlen + len; 
     } 
 
     encStream.Close(); 
     fout.Close(); 
     fin.Close(); 
 } 
 
 //解密文件 
 private static void DecryptData(String inName, String outName, byte[] desKey, byte[] desIV) 
 { 
     //Create the file streams to handle the input and output files. 
     FileStream fin = new FileStream(inName, FileMode.Open, FileAccess.Read); 
     FileStream fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write); 
     fout.SetLength(0); 
 
     //Create variables to help with read and write. 
     byte[] bin = new byte[100]; //This is intermediate storage for the encryption. 
     long rdlen = 0;              //This is the total number of bytes written. 
     long totlen = fin.Length;    //This is the total length of the input file. 
     int len;                     //This is the number of bytes to be written at a time. 
 
     DES des = new DESCryptoServiceProvider(); 
     CryptoStream encStream = new CryptoStream(fout, des.CreateDecryptor(desKey, desIV), CryptoStreamMode.Write); 
 
     //Read from the input file, then encrypt and write to the output file. 
     while (rdlen < totlen) 
     { 
         len = fin.Read(bin, 0, 100); 
         encStream.Write(bin, 0, len); 
         rdlen = rdlen + len; 
     } 
 
     encStream.Close(); 
     fout.Close(); 
     fin.Close(); 

}


using System;
using System.Security.Cryptography;//這個是處理文字編碼的前提
using System.Text;
using System.IO;
/// <summary>
/// DES加密方法
/// </summary>
/// <param name="strPlain">明文</param>
/// <param name="strDESKey">密鑰</param>
/// <param name="strDESIV">向量</param>
/// <returns>密文</returns>
public string DESEncrypt(string strPlain,string strDESKey,string strDESIV)
{
 //把密鑰轉換成字節數組
 byte[] bytesDESKey=ASCIIEncoding.ASCII.GetBytes(strDESKey);
 //把向量轉換成字節數組
 byte[] bytesDESIV=ASCIIEncoding.ASCII.GetBytes(strDESIV);
 //聲明1個新的DES對象
 DESCryptoServiceProvider desEncrypt=new DESCryptoServiceProvider();
 //開辟一塊內存流
 MemoryStream msEncrypt=new MemoryStream();
 //把內存流對象包裝成加密流對象
 CryptoStream csEncrypt=new CryptoStream(msEncrypt,desEncrypt.CreateEncryptor(bytesDESKey,bytesDESIV),CryptoStreamMode.Write);
 //把加密流對象包裝成寫入流對象
 StreamWriter swEncrypt=new StreamWriter(csEncrypt);
 //寫入流對象寫入明文
 swEncrypt.WriteLine(strPlain);
 //寫入流關閉
 swEncrypt.Close();
 //加密流關閉
 csEncrypt.Close();
 //把內存流轉換成字節數組,內存流現在已經是密文了
 byte[] bytesCipher=msEncrypt.ToArray();
 //內存流關閉
 msEncrypt.Close();
 //把密文字節數組轉換為字符串,並返回
 return UnicodeEncoding.Unicode.GetString(bytesCipher);
}




/// <summary>
/// DES解密方法
/// </summary>
/// <param name="strCipher">密文</param>
/// <param name="strDESKey">密鑰</param>
/// <param name="strDESIV">向量</param>
/// <returns>明文</returns>
public string DESDecrypt(string strCipher,string strDESKey,string strDESIV)
{
 //把密鑰轉換成字節數組
 byte[] bytesDESKey=ASCIIEncoding.ASCII.GetBytes(strDESKey);
 //把向量轉換成字節數組
 byte[] bytesDESIV=ASCIIEncoding.ASCII.GetBytes(strDESIV);
 //把密文轉換成字節數組
 byte[] bytesCipher=UnicodeEncoding.Unicode.GetBytes(strCipher);
 //聲明1個新的DES對象
 DESCryptoServiceProvider desDecrypt=new DESCryptoServiceProvider();
 //開辟一塊內存流,並存放密文字節數組
 MemoryStream msDecrypt=new MemoryStream(bytesCipher);
 //把內存流對象包裝成解密流對象
 CryptoStream csDecrypt=new CryptoStream(msDecrypt,desDecrypt.CreateDecryptor(bytesDESKey,bytesDESIV),CryptoStreamMode.Read);
 //把解密流對象包裝成讀出流對象
 StreamReader srDecrypt=new StreamReader(csDecrypt);
 //明文=讀出流的讀出內容
 string strPlainText=srDecrypt.ReadLine();
 //讀出流關閉
 srDecrypt.Close();
 //解密流關閉
 csDecrypt.Close();
 //內存流關閉
 msDecrypt.Close();
 //返回明文
 return strPlainText;
}

asp.net中DataBinder.Eval的用法總結


DataBinder.Eval總結一、DataBinder.Eval的基本格式
在綁定數據時經常會用到這個句程序:<%# DataBinder.Eval(Container.DataItem,"xxxx")%>或者<%# DataBinder.Eval(Container,"DataItem.xxxx")%>
今天又學到一種,而且微軟也說這種方法的效率要比以上兩種高。
<%# ((DataRowView)Container.DataItem)["xxxx"]%>
很有用的,這樣可以在前臺頁面做好多事情了。
還要記住要這樣用必須要在前臺頁面導入名稱空間System.Data,否則會生成錯誤信息。
<%@ Import namespace="System.Data" %>
這種用法其實和<%# ((DictionaryEntry)Container.DataItem).Key%>是一個道理。
Text='<%# DataBinder.Eval(Container.DataItem, "字段") %>'
這樣的方法是最快的
Text='<%# GetPrice() %>'
也可以綁定方法,但方法要是public的
Text='<%# "CarDetails.aspx?CarID=" + DataBinder.Eval(Container.DataItem, "CarID") %>'
還可以連接多個字段
關鍵是Container這個東西,它比較神秘。它的名稱空間是System.ComponentModel。對於它我還需要進一步理解。
二、DataBinder.Eval實現判斷選擇
<asp:TemplateColumn HeaderText="性別">
<ItemTemplate>
<%# DGFormatSex(Convert.ToString(DataBinder.Eval(Container.DataItem,"xb"))) %>
</ItemTemplate>
</asp:TemplateColumn>
cs裏定義DGFormatSex方法
protected string DGFormatSex(string xb)
{
if(xb == "1")
return "男";
else
return "女";
}
DataBinder.Eval用法範例
//顯示二位小數
//<%# DataBinder.Eval(Container.DataItem, "UnitPrice", "${0:F2}") %>
//{0:G}代表顯示True或False
//<ItemTemplate>
// <asp:Image Width="12" Height="12" Border="0" runat="server"
// AlternateText='<%# DataBinder.Eval(Container.DataItem, "Discontinued", "{0:G}") %>'
// ImageUrl='<%# DataBinder.Eval(Container.DataItem, "Discontinued", "~/images/{0:G}.gif") %>' />
// </ItemTemplate>
//轉換類型
((string)DataBinder.Eval(Container, "DataItem.P_SHIP_TIME_SBM8")).Substring(4,4)
{0:d} 日期只顯示年月日
{0:yyyy-mm-dd} 按格式顯示年月日
{0:c} 貨幣樣式