ラベル Classic ASP の投稿を表示しています。 すべての投稿を表示
ラベル Classic ASP の投稿を表示しています。 すべての投稿を表示

2017年7月27日木曜日

IIS, Classic ASP でサイトが重い

メール送信時にサイトが重いなぁと思っていたら、どうやらデバッグの設定に問題があったようです。

ASP のサーバー側のデバッグを有効にすると、ASP はシングルスレッド モードで実行されます。パフォーマンス上の理由から、製品環境での ASP のサーバー側またはクライアント側のデバッグはお勧めできません。

Microsoft TechNet オンライン:IIS 6.0 F1: [アプリケーションの構成] - [デバッグ] タブ
https://technet.microsoft.com/ja-jp/library/cc732003

また、初歩的なところでつまづいてしまった。
以上メモまで。

2016年3月28日月曜日

【Classic ASP】Identityの値を取得【SQL Server】

レコードをINSERTして自動採番されたIdentityを取得することはよくあります。

"INSERT INTO TABLE (NAME) VALUES ('test');  SELECT SCOPE_IDENTITY() AS ID;"

では上手くいきません。

ADODB.Recordset エラー '800a0cc1'

となってしまいます。

頭に"SET NOCOUNT ON;"をつけて

"SET NOCOUNT ON;INSERT INTO TABLE (NAME) VALUES ('test');  SELECT SCOPE_IDENTITY() AS ID;"

としましょう。
(久々にやったので忘れてました)

以上メモまで。

2012年8月24日金曜日

バイナリデータのチェック

VBSでバイナリデータのヘッダをチェックするコードを書いてます。
バイナリデータのヘッダ情報については以下のページを参考にしました。
http://www.garykessler.net/library/file_sigs.html

方法はADODB.Streamオブジェクトで引っ張って、ダンプ形式に変換するというものです。
参考コード
Function GetBinaryDumpDisplay(filename,length)
 Dim Stream
 Set Stream = CreateObject("ADODB.Stream")
 Dim LineBuffer,DispBuffer,CWork,i,j
 Stream.Open
 Stream.Type = 1  ' StreamTypeEnum の adTypeBinary
 Stream.LoadFromFile filename
 DispBuffer = ""
 j = 1
 Do while not Stream.EOS
  LineBuffer = Stream.Read(1)
  Cwork = AscB(LineBuffer)
  Cwork = Hex(Cwork)
  Cwork = Ucase(Cwork)
  Cwork = Right( "0" & Cwork, 2 )
  DispBuffer = DispBuffer & Cwork & " "
  If (j Mod 16) = 0 Then
   DispBuffer = DispBuffer & "
" & vbCrLf End If If j = length Then Exit Do End If j = j + 1 Loop Stream.Close GetBinaryDumpDisplay = DispBuffer End Function

2011年6月8日水曜日

VBScript Subプロシージャの()とCall

VBScript(asp上)でSubプロシージャの呼び出し方を調べました。

Dim a:a="a":
Dim b:b="b":

Sub sub0()
 Response.Write "z":
End Sub
Sub sub1(x)
 Response.Write x:
End Sub
Sub sub2(x,y)
 Response.Write x & y:
End Sub

sub0()
sub0
Call sub0()
Call sub0

sub1(a)
sub1 a
Call sub1(a)
Call sub1 a '←×

sub2(a,b) '←×
sub2 a,b
Call sub2(a,b)
Call sub2 a,b '←×


引数がそれぞれ0,1,2個のSubプロシージャを用意し、
括弧()の有り無し、Callの有り無しで呼び出してみました。
結果は上手くいくものとそうでないものが有り、
上記の通りコメントで「×」としたものがエラーとなりました。

Callと括弧()はワンセットで使う、もしくはどちらも使わない
と覚えておくのが良いでしょう。

2011年2月28日月曜日

AccessmdbのSQLインジェクション対策

1つ前の書き込み「VBScript IsNullとかIsEmptyとかIsNumericとか」で、
「実際にはポストされていないデータをRequestで取得してしまった場合、その値はEmptyとなる」
また、「IsNumeric(Empty)はTrueになる」ということを確認しました。

Access MDB では、数値型を「'(シングルクォート)」で囲むことができないため、
クエリに数値型のパラメータを埋めこまなくてはならない場合、埋め込む値が
数値型であるかどうかを厳密にチェックする必要があります。
VBScriptのIsNumericだけでは意図したチェックにならない可能性があるので、
注意しなくてはなりません。

Webのようなインジェクションの恐れがある環境で、
データベースにmdbを用いないのが本来だとは思うのですが・・・。

VBScript IsNullとかIsEmptyとかIsNumericとか

定義 構文 結果
num = "" Response.Write num
TypeName(num) String
IsNull(num) False
IsEmpty(num) False
IsNumeric(num) False
IsObject(num) False
(num=0) スクリプトエラー
(num="0") False
num = Empty Response.Write num
TypeName(num) Empty
IsNull(num) False
IsEmpty(num) True
IsNumeric(num) True
IsObject(num) False
(num=0) True
(num="0") False
num = null Response.Write num
TypeName(num) Null
IsNull(num) True
IsEmpty(num) False
IsNumeric(num) False
IsObject(num) False
IsNull(num=0) True
IsNull(num="0") True
num = 0 Response.Write num 0
TypeName(num) Integer
IsNull(num) False
IsEmpty(num) False
IsNumeric(num) True
IsObject(num) False
(num=0) True
(num="0") True
num = "0" Response.Write num 0
TypeName(num) String
IsNull(num) False
IsEmpty(num) False
IsNumeric(num) True
IsObject(num) False
(num=0) True
(num="0") True
num = "0"(全角) Response.Write num 0
TypeName(num) String
IsNull(num) False
IsEmpty(num) False
IsNumeric(num) True
IsObject(num) False
(num=0) True
(num="0") False
num = "〇"(漢数字) Response.Write num 〇
TypeName(num) String
IsNull(num) False
IsEmpty(num) False
IsNumeric(num) False
IsObject(num) False
(num=0) スクリプトエラー
(num="0") False
num = "3D2" Response.Write num 3D2
TypeName(num) String
IsNull(num) False
IsEmpty(num) False
IsNumeric(num) True
IsObject(num) False
(num=300) True
(num="300") False


上記は各データをチェックした一覧です。
想像していたのと、違う結果になっていないでしょうか。

特に↓のような時
Dim num
num = Request("numnum") '←実際はnumnumというnameのデータはポストされていない
numはEmptyとなるので、IsNumericで数値チェックをするとTrueとなってしまいます。

2010年9月30日木曜日

IIS7 ファイルアップロード制限

Classic ASP を 2008 Server に移行して、
Webフォームからファイルのアップロードを行なったらエラーになった。
ASPがリクエストのエンティティボディとして受け取れる最大サイズが
デフォルトで200KBに制限されているためで、以下の手順でアップロード可能な最大サイズを変更した

IISマネージャ
→サイトを選択
→ASP
→制限プロパティ
→最大要求エンティティ ボディ制限

2010年4月12日月曜日

VBScript では同じ関数名でも許される

Sub hoge()
 response.write "hoge"
End Sub
Sub hoge()
 response.write "hogehoge"
End Sub
Call hoge()
'実行結果 hogehoge



後に宣言した方が有効らしい・・・。
おいおい

2010年3月16日火曜日

ISAPI のハンドラマッピング WOW64

以前、mdbを利用したClassic ASP のシステムを64bit OS で動かす場合には
WOW64(Windows-On-Windows 64)を利用する設定が必要と書きました。


Microsoft.Jet.OLEDB.4.0 と 64bit環境




ハンドラマッピングで「*.html」へのアクセスをISAPIで「asp.dll」にマッピングしていた場合
64bit OS に移行し、さらにWOW64で動かすには次のような変更が必要です。




「サーバマネージャ」→「サイト選択」→「ハンドラマッピング」→「スクリプトマップの追加」
で上記のウィンドウが出ますので、「実行可能ファイル」のところを


C:\Windows\System32\inetsrv\asp.dll
(もしくは%windir%\system32\inetsrv\asp.dll)

から

C:\Windows\SysWOW64\inetsrv\asp.dll

へと変更すればマッピングが可能になります。
また必要に応じて「ASPClassic」のマッピングも上記のように設定し直します。

2010年3月9日火曜日

Microsoft.Jet.OLEDB.4.0 と 64bit環境

仕事の都合上ClassicASP + MDB という構成でWebアプリを構築することが多いのですが、
64bit環境へ移行しようとした際にDB接続できなくなるトラブルにみまわれました。
調べたところ64bit版のMicrosoft.Jet.OLEDB.4.0が無いそうなので、
上記のようなWebアプリを64bit環境で動かせるようにするには以下のような設定が必要です。


「IISマネージャ」
→「アプリケーションプール」
→右クリック「詳細設定」
→「32ビットアプリケーションの有効化」フラグをTrueに




これでDB接続ができるようになります。


よくLAMP(Linux + Apach + MySQL + PHP) とか WISA(Windows + IIS + SQL Server + ASP.NET) とか
言いますが、上記のような構成は何て言うんでしょうか。
WIMA(Windows + IIS + MDB + ASP)??