ASPユーザーにとっては、データベースの操作がシンプルであればあるほど、ロジックやアプリケーションのコードを検討する時間が増え、効率が高くなります。
今日、私はデータベース操作のアイデアを提供するためにここにいます。これらのコードは、私の長期的な ASP アプリケーションで常に完成し、修正されてきました。直接使用する場合に問題があります。もちろん私の能力には限界がありますので、ぜひ皆さんと一緒に議論していただければと思います。
注: この投稿のコードはすべて VBScript バージョンです。また、手書き ASP に関するある程度の基礎をすでに身につけていることが最善です。
まず、私のクラスの特徴をいくつか簡単に紹介します。
種類の異なる複数のデータベースを同時に操作できます。
データ型の違いを考慮する必要はまったくなく、文字フィールドにシングルクォーテーションを追加するかどうかを考える必要もありません。
呼び出しは非常に簡単で、データベースに対する主な操作に必要なコードは通常 1 行だけです。
mssql トランザクションのロールバックをサポートします。
SQL ステートメントを自動的に生成して出力できるため、デバッグが容易になります。
使用方法:
1. clsDbctrl.asp ファイルの最初の行を独自のデータベースの場所に変更します (変更方法については、以下の CreatConn 関数の説明を参照してください)。複数のデータベースに接続する必要がある場合は、同じ形式で自分でデータベースを追加できます。
2. この ASP ファイルを新しい ASP ファイルに含めます。のように:
<!--#include file="Inc/clsDbctrl.asp" --> または:
<!--#include virtual="/Inc/clsDbctrl.asp"-->
3. 次のコードを使用して、このクラスを適用します。
データベース接続:
<%
OpenConn() 'データベース接続を開く
Dim db: Set db = New DbCtrl 'オブジェクトの作成
「コードはここにあります...」
Co(db) : CloseConn() 'オブジェクトを解放し、データベース接続を閉じます
%>
または (1 つ以上のデータベース接続):
<%
Dim db1 : db1 = New DbCtrl を設定: db1.dbConn = Oc(a)
Dim db2: db2 = New DbCtrl を設定: db2.dbConn = Oc(b)
「コードはここにあります...」
Co(db1) : Co(db2)
%>
4. 具体的な動作例については、各機能説明内のコード例を参照してください。
メソッドとプロパティの概要 (詳細な使用法と例は以下にあります):
引用:
CreateConn はデータベース接続文字列を生成します
OC がデータベース接続を確立します
同時リリースオブジェクト
OpenConn はデフォルトのデータベース接続を開きます
CloseConn はデフォルトのデータベース接続を閉じます
dbCtrl.dbConn プロパティ。操作するデータベース接続を取得します。デフォルト値は Conn です。
dbCtrl.dbErr プロパティ (読み取り専用) は、キャプチャされたエラー メッセージを出力します。
dbCtrl.Version プロパティ、読み取り専用、プログラムのバージョン情報
dbCtrl.AutoId メソッド、一意のシリアル番号を自動的に取得します
条件を満たすレコードセットを取得するための dbCtrl.GetRecord メソッド
dbCtrl.GetRecordBySql メソッド。SQL ステートメントに基づいてレコード セットを取得します。
dbCtrl.GetRecordDetail メソッド、指定されたレコードの詳細データに基づく
dbCtrl.AddRecord メソッド、新しいレコードを追加します
dbCtrl.UpdateRecord メソッド、指定された条件に従ってレコードを更新します
dbCtrl.DeleteRecord メソッド、条件を満たすレコードを削除します
dbCtrl.ReadTable メソッドは、指定された条件に基づいてレコード内の他のフィールドの内容を取得します。
dbCtrl.C メソッド、レコード セット オブジェクトを閉じる
dbCtrl.wGetRecord、
dbCtrl.wAddRecord、
dbCtrl.wUpdateRecord、
dbCtrl.wDeleteRecord これらの 4 つのメソッドは、対応する操作 (先頭に w が付く) を取得する SQL ステートメントです。
パラメータの規則:
ASP には Arguments オブジェクトがなく、動的パラメーターを使用できないため、このクラスのコードでは、この効果を実現するために Array が使用されます。このクラスの一部のパラメーターでは (パラメーターの説明に記載されているように) 配列を使用できますが、配列を使用する場合は次の形式に従う必要があります。
Array("フィールド 1:値 1", "フィールド 2:True", "フィールド 3:100")
はい、変数が関係する場合は、次のようになります。
Array("フィールド 1:" & 値 1, "フィールド 2:" & 値 2, "フィールド 3:" & 値 3)
このクラスのデータベースフィールドに関連するほとんどすべてのコンテンツは、上記の配列形式を使用して条件を設定したり、コンテンツを取得したりすることができます。ここでの最大の特徴は、フィールドの後にコロンと対応する値を続けるだけで、フィールドのタイプを考慮する必要がないことです。 ASP プログラムを手動で作成することが多い場合は、データ型に加えて、いつでも条件を追加および削除できるため、この方法を使用することの魅力をすぐに実感できるでしょう。使用方法をまだ理解していなくても問題ありません。この問題を説明するために、以下に多くの例を示します。
ASP のデータベース操作をカプセル化するのは実際には難しくありません。以前に同様のコードを作成したり、他の人のカプセル化されたコードを借用したりしたことがあると思います。しかし、誰もが知っているように、カプセル化されたコードで一度エラーが発生すると、デバッグは面倒なものになります。一般に、カプセル化された操作が単純であればあるほど、デバッグはより複雑になります。これらのコードを作成する際には、ユーザーがデータベースを操作できるようにコードをできるだけ簡素化しつつ、いつでも SQL ステートメントを出力してエラーをトラブルシューティングできるように、何か問題が発生した場合のエラーのトラブルシューティング方法を考慮して作成しました。
最後に、この記事で説明する ASP データベースの操作は大規模なデータには適していないことに注意してください。将来的には、ストアド プロシージャを使用して大規模なデータを操作することをお勧めします。カプセル化もされています。効率性の問題もありますが、ASP を利用する場合はやはり COM+ などを検討する必要があります。このカテゴリは中小規模の ASP プロジェクトに適しています。
さて、詳しい使用手順は次のとおりです。
1つ。データベース接続
ほとんどの人の使用習慣を考慮すると、データベース接続にはパブリック プロセスが使用されるため、既にデータベース接続を確立している場合は、これらの行をコメント アウトするだけでコード内で変更する必要があります。コードには、MSSql、Access、MySQL、Oracle の 4 つのデータベース接続メソッドが組み込まれています。もちろん、ソース コード内でこれらを追加または削除することもできます。変更例:
Dim a : a = CreatConn(0, "TestData", "localhost", "ユーザー名", "ユーザーパスワード")
Dim b : b = CreatConn(1, "Data/%TestDb%.mdb", "", "", "")
説明すると、最初のパラメータは文字列にすることができます。 Access を使用している場合は、2 番目のパラメータに相対パスと絶対パスの両方を入力できます。パスワードがある場合は、次のように 5 番目のパラメータにも入力できます。
Dim c : c = CreatConn("ACCESS", "E:/MyWeb/Data/%TestDB%.mdb", "", "", "mdbpassword")
関連機能:
プロトタイプ: CreateConn(dbType、strDB、strServer、strUid、strPwd)
機能: データベース接続文字列を確立します。
戻り値: 文字列
パラメータ:
dbType: 整数または文字列の接続データベース タイプ
(0 または "MSSQL") - Microsoft SQL Server
(1 または "ACCESS") - Microsoft Office Access
(2 または "MYSQL") - MySQL サーバー
(3 または "ORACLE") - oracle サーバー
strDB: 文字列データベース名またはデータベースアドレス (アクセスには絶対パスまたは相対パスを使用できます)
strServer: 文字列データベース サーバー アドレス。Access の場合は空白のままにしてください。
strUid: 文字列データベース ユーザー名。Access の場合は空白のままにしてください。
strPwd: 文字列データベースのパスワード
プロトタイプ: Oc(connStr)
機能: データベース接続を開く
戻り値: オブジェクトデータベース接続オブジェクト
パラメータ:
connStr: CreateConn 関数によって生成された String データベース接続文字列
原型:Co(obj)
機能: オブジェクトを閉じる
パラメータ:
obj: Object 閉じるオブジェクトの名前
プロトタイプ: OpenConn
機能: デフォルトのデータベース接続を開き、Conn という名前の接続オブジェクトを自動的に作成します。
パラメータ: なし
プロトタイプ: CloseConn
機能: Conn という名前のデフォルトのデータベース接続オブジェクトを閉じます。
パラメータ: なし
2. データベースの操作
以下はこのデータベース操作クラスの機能説明です。応用例をご覧ください。
プロトタイプ: dbCtrl.dbConn(objConn)
機能: データベース接続オブジェクトを取得します。
パラメータ:
objConn: Object 確立されたデータベース接続オブジェクト
例:
Dim db : db = New DbCtrl を設定します。
db.dbConn = Oc(CreatConn(1,"E:/WebSite/MySite/Data/%TestDb%.mdb","","",""))
Co(db)
説明: この属性はオプションです。この属性が指定されていない場合、デフォルトのデータ接続は、ページ上の Conn という名前のデータベース接続オブジェクトです。
プロトタイプ: dbCtrl.AutoID(TableName)
機能:固有のシリアル番号を自動取得(自動採番)
戻り値: 整数
パラメータ:
TableName: String 一意のシリアル番号を取得する必要があるデータ テーブルの名前
例:
薄暗い新しいID
newId = db.AutoId("テストテーブル")
Response.Write(newId)
プロトタイプ: dbCtrl.GetRecord(TableName,FieldsList,Condition,OrderField,ShowN)
機能: 条件を満たすレコードセットを取得する
戻り値: オブジェクト レコード セット オブジェクト
パラメータ:
TableName : 文字列テーブル名
FieldsList: カンマで区切られた文字列フィールド名。すべてのフィールドを表示するには空白のままにします。
条件: 文字列または配列のクエリ条件。配列の場合は、前のパラメータ規則に従う必要があります。
orderField: 文字列のソート方法
ShowN: 整数はレコード数を取得します。SQL の上位 N の選択に相当します。
例:
ディムル
Set rs = db.GetRecord("TestTable","fId,fName,fAge","fSex=' Male' And IsActive = 1","fName Asc", 0)
rs.eof ではない間
Response.Write ("名前は:" & rs(1) & " 年齢は:" & rs(2) & "<br />")
rs.movenext()
ウェン
db.C(rs)
上記の例では、次の配列形式で条件を指定することは同等です。
Set rs = db.wGetRecord("TestTable","fId,fName,fAge", Array("fSex: Male","IsActive:1"), "fName Asc", 0)
さらに、次のステートメントを使用して、この関数によって生成された SQL ステートメントを表示できます。
Response.Write(db.wGetRecord("TestTable","fId,fName,fAge", Array("fSex: Male","IsActive:1"), "fName Asc", 0))
ご覧のとおり、元の関数の前に w を追加するだけです。
プロトタイプ: dbCtrl.GetRecordBySQL(strSelect)
機能: SQL文に基づいてレコードセットを取得
戻り値: オブジェクト レコード セット オブジェクト
パラメータ:
strSelect: レコードセットの生成に使用される文字列 SQL ステートメント
例:
ディムル
Set rs = db.GetRecordBySQL("ユーザー a InnerJoin Depart b から a.Id、a.LastName、b.Group を選択します。a.GroupId = b.GroupId")
「コードはここにあります...」
db.C(rs)
プロトタイプ: dbCtrl.GetRecordDetail(テーブル名, 条件)
機能:指定したレコードの詳細データをもとに
戻り値: オブジェクト レコード セット オブジェクト
パラメータ:
TableName : 文字列テーブル名
条件: 文字列または配列のクエリ条件。配列の場合は、前のパラメータ規則に従う必要があります。
例:
薄暗いrs、ID
ID = Request.QueryString("id")
rs = db.GetRecordDetail("TestTable","Id=" & id) を設定します。
「あなたのコードはここにあります...
db.C(rs)
説明: すでにご覧のとおり、これは詳細ページ (ニュース コンテンツ ページなど) を開くために最も一般的に使用されます。
プロトタイプ: dbCtrl.AddRecord(TableName, ValueList)
機能: 新しいレコードを追加します。
戻り値:新規レコードのID番号(成功)または0(失敗)
パラメータ:
TableName : 文字列テーブル名
ValueList: テーブルに挿入される配列フィールドと値は配列のみであり、前のパラメーター規則に従う必要があります。
例:
ディム fName、fSex、fWorkyear、fBirth
fName = "王爾丹"
fSex = "男性"
f勤務年 = 12
fBirth = Cdate("1981-10-23")
暗い結果
result = db.AddRecord("TestTable",Array("名前:"&fName, "性別:"&fSex, "勤務年:"&f勤務年, "誕生日:"&fBirth, "IsActive:True"))
結果<>0の場合
Response.Write("レコードが正常に追加されました。このレコードの自動採番 ID は "& result)
終了の場合
ご存知のとおり、実際にはフィールドのタイプを考慮する必要はありません。
コード内のフィールドと値をより明確に表示したい場合は、次のように記述することもできますが、それは好みによって異なります。
result = db.AddRecord("TestTable",Array("Name:" & fName,_)
"性別:" & fSex,_
"勤務年:" & f勤務年,_
"誕生日:" & fBirth,_
"IsActive:True"))
さらに、次のステートメントを使用して、この関数によって生成された SQL ステートメントを表示できます。
Response.Write(db.wAddRecord("TestTable",Array("名前:"&fName, "性別:"&fSex, "勤務年:"&fWorkyear, "誕生日:"&fBirth, "IsActive:True")))
注: 返される ID 値は比較的愚かな方法を使用しているため、同時データの量が多い場合には精度が保証されません。注意して使用してください。
プロトタイプ: dbCtrl.UpdateRecord(テーブル名、条件、値リスト)
機能: 指定した条件に基づいてレコードを更新します
戻り値: 1 (成功) または 0 (失敗)
パラメータ:
TableName : 文字列テーブル名
条件: 文字列または配列の更新条件。配列の場合は、前のパラメータ規則に従う必要があります。
ValueList: 文字列または配列の更新されたフィールドと値。配列の場合は、以前のパラメーター規則に従う必要があります。
例:
Dim fName、fWork Year
fName = "ワン・サン・タン"
f勤務年 = 10
暗い結果
result = db.UpdateRecord("TestTable", "UId = 1308", Array("Name:"&fName, "Work Year:"&fWork Year))
結果<>0の場合
Response.Write("データが正常に更新されました!")
終了の場合
さらに、次のステートメントを使用して、この関数によって生成された SQL ステートメントを表示できます。
Response.Write(db.wUpdateRecord("TestTable", "UId = 1308", Array("Name:"&fName, "Work Year:"&fWork Year)))
プロトタイプ: dbCtrl.DeleteRecord(TableName,IDFieldName,IDValues)
機能: 条件に一致するレコードを削除します。
戻り値: 1 (成功) または 0 (失敗)
パラメータ:
TableName : 文字列テーブル名
IDFieldName: String テーブルの ID フィールドの名前
IDValues: 文字列または配列の削除条件。カンマで区切られた複数の ID 番号を指定できます。配列の場合は、前のパラメーター規則に従う必要があります。
例:
Dim ID、結果
ids = Request.Form("selectid") 'ここで取得した値は 12, 34, 256, 314 と仮定してください(チェックボックスで入力した値はこんな感じです)
result = db.DeleteRecord("TestTable", "UId", ids)
結果<>0の場合
Response.Write("データが正常に削除されました!")
終了の場合
もちろん、次のような文字列または配列を使用して他の条件を指定することもできます。
result = db.DeleteRecord("TestTable", "UId", "IsActive = 0 And FirstName = 'Tom'")
さらに、次のステートメントを使用して、この関数によって生成された SQL ステートメントを表示できます。
Response.Write(db.wDeleteRecord("TestTable", "UId", ids))
プロトタイプ: dbCtrl.ReadTable(TableName, Condition, GetFieldNames)
機能: 指定された条件に基づいてレコード内の他のフィールドの内容を取得します
戻り値: 文字列 (GetFieldNames は単一フィールド) または配列 (GetFieldNames は複数フィールド)
パラメータ:
TableName : 文字列テーブル名
条件: 文字列または配列のクエリ条件。配列の場合は、前のパラメータ規則に従う必要があります。
GetFieldNames: String 単一のフィールド名、またはカンマで区切られた複数のフィールド名
例:
薄暗い液体、結果
uid = rs("postid") 'これがページ上のレコードセットのユーザーID値であると仮定します
result = db.ReadTable("UserTable","UId=" & uid, "UserName")
Response.Write("発行者:" & 結果)
実際のアプリケーションでは、この関数がおそらく最もよく使用されると言わざるを得ません。上記の例は、ある値から、その値と等しい別のテーブルの別のフィールドを取得する例です。ちょっと発音しにくいですが、まさにそういう意味です。)次の例は、この値に基づいて複数の対応する値を取得する方法を示します。
薄暗い液体、結果
uid = rs("postid") 'これがページ上のレコードセットのユーザーID値であると仮定します
result = db.ReadTable("UserTable","UId=" & uid, "UserName,UserSex,UserAge")
Response.Write("発行者:" & result(0) & "<br /> 性別: " & result(1) & "<br /> 年齢: " &result(2))
ご覧のとおり、複数のフィールド名を入力すると配列が作成されます。
プロトタイプ: dbCtrl.C(objRs)
機能: レコードセットオブジェクトを閉じる
パラメータ:
objRs: オブジェクト ページ上のレコードセット オブジェクト
例:
ディムル
Set rs = db.GetRecordDetail("TestTable","Id=123" )
「あなたのコードはここにあります...
db.C(rs)
この関数は上記の多くの例で使用されているため、あまり説明しません。rs.close: set rs = nothing と同じです。
clsDbctrl.rar