2015年5月14日 星期四

上傳檔案,錯誤 'ASP 0104 : 80004005' 上傳下載檔案大小限制設定


在執行上傳檔案時,出現錯誤訊息,如下

錯誤訊息:
要求物件 錯誤 'ASP 0104 : 80004005'
不允許的操作


其實是因為iis 有上傳檔大小限制,以我 IIS7.5 為例,(後面補充IIS6的做法),開啟 iis後,

==============================================
 IIS7.5 上傳下載檔案大小限制設定

  1. 點開ASP
  2. 調整 "要求實體的上限" byte值










完畢。

==============================================
IIS 6 上傳下載檔案大小限制設定

1.視需求勾選
啟用直接 metabase 編輯。允許您在IIS執行時,編輯IIS Metabase設定檔。



2.
開啟 C:\WINDOWS\system32\inetsrv\metabase.xml
AspBufferingLimit="4194304"                     \\下載限制
AspMaxRequestEntityAllowed="204800"   \\上傳限制

把上傳限制設大一點。

重啟IIS

完畢。

==============================================

參考:
win2003 解除iis6.0上傳容量限制
http://pecoju.pixnet.net/blog/post/18548676-win2003-%E8%A7%A3%E9%99%A4iis6.0%E4%B8%8A%E5%82%B3%E5%AE%B9%E9%87%8F%E9%99%90%E5%88%B6-

檔案重新命名


檔案重新命名,用搬移檔案的方式達成。

Syntax

FileSystemObject.MoveFile source,destination

<%
dim fs
set fs=Server.CreateObject("Scripting.FileSystemObject")
fs.MoveFile "c:\web\*.gif","c:\images\"
set fs=nothing
%>



======================================
參考 :
w3c, The FileSystemObject Object
http://www.w3schools.com/asp/asp_ref_filesystem.asp

2015年3月23日 星期一

asp判斷是否為英文或數字

方法一:
<%
'Response.Write(isValidate("ac4中123") & "<br>")
'Response.Write(isValidate("ac4123") & "<br>")


Function isValidate(str)
  Dim re
  Set re = new RegExp
  re.Pattern = "[^a-zA-Z0-9]"
  isValidate = re.Test(str)
End Function
%>




方法二:

function ContainsChtString(str)
  dim x,tmp
  tmp = false
  for x = 1 to len(str)
    if asc(mid(str,x,1)) > 32 and asc(mid(str,x,1)) < 127 then
      tmp = true
      exit for
    end if
  next
  ContainsChtString= tmp
end function


if ContainsChtString(Name) then
  error_mag = "字串包含特殊符號、數字和大小寫英文字"
end if


原先查到的資料是判斷
 asc(mid(str,x,1)) < 0 ,ascii碼小於零,即中文字,但後來發現,中文字中間夾英數字,就判斷不出來了。

所以改寫成 asc(mid(str,x,1)) > 32 and asc(mid(str,x,1)) < 127
判斷包含特殊符號、數字和大小寫英文字


================================

如果要判斷是否為數字
IsNumeric()

================================




2015年3月20日 星期五

mssql資料型態介紹: nvarchar, ntext


n        unicode
var     非固定長度,4000字以內的文字
ntext  unicode,4000字以上的文字


varchar
長度為 n 個字元之可變長度非 Unicode 字元資料。n 必須介於 1 至 8,000,儲存大小為實際輸入資料的長度,而非 n 個位元組。輸入的資料長度可以是 0 字元。

ntext
可變長度的 Unicode 資料,最大長度為 2^30 - 1 (1,073,741,823) 個字元。


適用時機:
varchar:
當你的字元長度少於8000個字元,且字元內容無須以 unicode 格式儲存時,可選擇varchar 註:一個中文字及一個英文字母皆算一個字元

ntext:
在 SQL Server 中,Unicode 資料是使用 nchar、nvarchar 和 ntext 資料型別來儲存。設成這些資料型別的資料行可儲存來自多個字元集的字元。若資料行項目所包含的 Unicode 字元個數並不一致 (最多為 4,000) ,請使用 nvarchar。若資料行每個項目的長度是固定的 (最多為 4,000 個 Unicode 字元),請使用 nchar。若資料行的任何項目長度超過 4,000 個 Unicode 字元,則使用 ntext。



這篇教學文章寫得很好(出處 http://www.dotblogs.com.tw/jeff-yeh/archive/2010/11/14/19440.aspx)

認識Char/NChar/VarChar/NVarChar/Text/NText


Char/NChar/VarChar/NVarChar/Text/NText,這幾個資料型別或許有些人很熟,有些人只熟其中幾個,尤其是程式設計師,不碰DB Design的,如果有碰到,也可能依"慣例"的去設定資料型別,所以不難看見,有些Table資料型別很單調,看的到的型別不多,只要是存文字的,都是NVarChar,或許在瞭解後,可以做出更好的規劃.
其實這個的識別方式很簡單.


  • 帶Var的 : 代表就是非固定長度的型別,所以Var在存不固定長度的資料時,會較省空間,
  • 帶N的 : 就是支援Unicode,但要注意,儲存的資料會大兩倍.

這樣就把Char全部講完,剩Text跟Char有什麼不同,Text的特性跟VarChar一樣,只是用來儲存大量的文字資料,但後來的VarChar也做了調整,也可以存大量的文字資料,所以Text在未來新版的DB會移除.


  • Char的長度為1~8000
  • VarChar的長度為1~8000,如果是VarChar(max)就是2^31-1 位元組,VarChar(max)只有SQL2005(含)以上才支援,SQL2000就沒有.
  • Text的長度為2^31-1,它的長度跟VarChar(max)是一樣的.


如果您有支援多國語言的網站,請考慮利用 Unicode nchar 或 nvarchar 資料類型,將字元轉換問題減到最少。如果您使用 char 或 varchar,我們建議您執行下列動作:

  • 當資料行資料項目的大小一致時,請使用 char。
  • 當資料行資料項目的大小變化相當大時,請使用 varchar。
  • 當資料行資料項目的大小變化相當大,且大小可能超出 8,000 位元組時,請使用 varchar(max)。



2015年3月15日 星期日

IUSR & IWAM


IUSR
Internet 來賓帳戶
匿名存取 Internet Information Services 的內建帳戶





IWAM

啟動 IIS 處理程序帳戶
從作業應用程式啟動的內建 Internet Information Services 帳戶






2015年3月12日 星期四

asp實作線上人數



Application 物件的應用

Application 物件可以用來保存總體變數,這些變數將保留到伺服器關機為止,由於這些變數在保存時不會去區分個別用戶端的連線編號(Session ID),因此無論是哪個用戶端都可以讀寫,利用這個特性我們可以很容易開發出計數器與聊天室的功能。

下面的例子,當參觀者連線到首頁時,就累計人數:

<%
Application.Lock
 Application("count")=Application("count")+1
 Application.Unlock
 %>
累計參觀人次:<% =Application("count") %>

在操作 Application 物件時要特別注意寫入衝突的問題,當參觀者同時上線時,由於大家所存取的 Application 變數是同一個,如果不把它鎖定就直接寫入,會造成計數不正確的現象。Application.Lock 就是用來鎖定物件,防止他人寫入。當物件被鎖定時,其他人就會暫停執行程式,等到鎖定解除後才會繼續執行。

如果要製作的計數器是線上人數,則不可以只累加而不減少,正確的作法應該是在參觀者上線時加 1,離線時減 1,特別要注意的是參觀者上線時,並不一定都會去連首頁,所以進行計數的程式不能寫在首頁中,首頁頂多只是用來秀出人數而已。

要達到這個功能必須使用 Session 物件所提供的兩個事件處理器:onStart 和 onEnd,前者在參觀者連線時會自動觸發執行,後者在離線時觸發執行。而要定義這兩個事件處理器,只能將程式寫在 global.asa 檔案中,這個檔案必須建立在網站主目錄的根目錄中,而且一個虛擬站台只能有一份 global.asa。程式語法如下:

<script language="VBScript" runat="SERVER">
 SUB Session_onStart
     Application.Lock
     Application("online")=Application("online")+1
     Application.Unlock
 END SUB

 SUB Session_onEnd
     Application.Lock
     Application("online")=Application("online")-1
     Application.Unlock
 END SUB
 </script>

global.asa 程式存檔後就會立即生效,現在我們就可以找個適當的網頁,來顯示線上人數:

現在有<% =Application("online") %>人上線

補充說明:Application 物件也有提供 onStart 和 onEnd 事件處理器,前者在 IIS 啟動時自動執行,後者在 IIS 關閉時執行。




來源:
http://www.spps.tp.edu.tw/documents/memo/asp_develop.htm

2015年3月9日 星期一

執行 ASP 網頁導致回應緩衝區超出其設定限制



回應物件 錯誤 'ASP 0251 : 80004005'

超出回應緩衝區限制

執行 ASP 網頁導致回應緩衝區超出其設定限制。


解法:
調整metabase 。參考這篇
開啟 C:\WINDOWS\system32\inetsrv\metabase.xml
AspBufferingLimit="4194304"                     \\下載限制
AspMaxRequestEntityAllowed="204800"   \\上傳限制


解法:
在第一行加入這一句

<% Response.Buffer = False %>