9

VBScript と ASP Classic についていくつか質問があります。

  1. VBScript/ASP で MS SQL Server データベースにアクセスするための推奨される方法は何ですか?

  2. ビューからモデルをコントローラーから分離することに関するベスト プラクティスは何ですか?

  3. VBScript または ASP について他に知っておくべきことはありますか?

気づいていないかもしれませんが、私は VBScript コーディングの初心者です。番号 2 と 3 は、一般的すぎる巨大な「ブラック ホール」の質問であることを認識しているので、ここからこれら 2 つの質問について知っておくべきことをすべて学べるとは思わないでください。

4

10 に答える 10

20

ADO は、VBScript/Classic ASP でデータベースにアクセスする優れた方法です。

Dim db: Set db = Server.CreateObject("ADODB.Connection")
db.Open "yourconnectionstring -> see connectionstrings.com"
Dim rs: Set rs = db.Execute("SELECT firstName from Employees")
While Not rs.EOF
    Response.Write rs("firstName")
    rs.MoveNext
Wend
rs.Close

詳細はこちら: http://www.technowledgebase.com/2007/06/12/vbscript-how-to-create-an-ado-connection-and-run-a-query/

注意点の 1 つは、レコードセットで MEMO フィールドを返す場合は、一度に 1 つの MEMO フィールドのみを選択し、それがクエリの最後の列であることを確認することです。そうしないと、問題が発生します。(参考: http: //lists.evolt.org/archive/Week-of-Mon-20040329/157305.html

于 2008-08-25T15:04:33.867 に答える
17

最初の回答を見たときは PC から離れなければなりませんでしたが、これほど多くの人に承認されたことに今でも心を痛めています。これは最悪の種類の ASP コードの恐ろしい例であり、サイトが SQL インジェクト可能であり、サイト全体でこのコードを使用し続けると、その寿命の 1 インチ以内にハッキング可能になるようなものです。

これは、ASP コーディングの初心者に与えるべき種類のコードではありません。ASP コーディングの専門的な方法であると考えるからです。

  1. データベースへのユーザー名とパスワードが含まれているため、コード内の接続文字列を絶対に公開しないでください。代わりに UDL ファイルを使用するか、少なくとも他の場所で宣言してサイト全体で使用できる定数を使用してください。

  2. Web 環境での操作にインライン SQL を使用する正当な理由はなくなりました。ストアド プロシージャを使用します。セキュリティ上の利点はいくら強調してもしすぎることはありません。本当にそれができない場合は、次善の策としてインライン パラメータを検討してください。インライン SQL を使用すると、サイトが SQL インジェクション、マルウェア インジェクションなどに対して無防備になります。

  3. 変数の宣言が遅いと、ずさんなコーディングになる可能性があります。"option explicit" を使用して、関数の先頭で変数を宣言します。これは実際の WTF ではなくベスト プラクティスですが、続行するつもりで開始することをお勧めします。

  4. これがどのタイプの接続であるかに関するデータベースへのヒントはありません。読み取り専用ですか、それともユーザーがレコードを更新するのでしょうか? 接続は最適化でき、データベースは、何を期待するかを効果的に伝えれば、ロックを非常に効率的に処理できます。

  5. 使用後にデータベース接続が閉じられず、レコードセット オブジェクトが完全に破棄されません。

多くの人々が .NET への移行を提案しているにもかかわらず、ASP は依然として強力な言語です。優れたコーディング プラクティスを使用すれば、保守が容易で、スケーラブルで高速な ASP サイトを作成できます。コードを効率的にするには、適切なコーディング プラクティスと少しの事前の考慮を維持する必要があります。優れたエディターも役に立ちます。私の好みは、ASP コーダーにとって、非常に .NET 中心の最新の MS 製品よりも役立つと思う PrimalScript です。

また、「MEMO」フィールドはどこから来たのですか?これは Access の命名法ですか、それとも MySQL ですか? このようなフィールドは、MS-SQL で 10 年間 TEXT または NTEXT フィールドと呼ばれてきました。

于 2008-09-18T12:37:21.400 に答える
8

その言語でプログラムするのではなく、その言語でプログラムすることを忘れないでください。限られたツール セットを使用しているからといって、1999 年のようにプログラミングする必要があるわけではありません。

クラスについてはJasonSに同意します。確かに継承とかできないけど簡単に偽装できる

Class Dog
    Private Parent

    Private Sub Class_Initialize()
        Set Parent = New Animal
    End Sub

    Public Function Walk()
        Walk = Parent.Walk
    End Function

    Public Function Bark()
        Response.Write("Woof! Woof!")
    End Function
End Class

私のプロジェクトでは、ASP ページに次のものが含まれます: INC-APP-CommonIncludes.asp - これには、一般的なライブラリ (データベース アクセス、ファイル関数など) が含まれ、セキュリティが設定され、構成ファイル (接続文字列、ディレクトリなど) が含まれます。場所など) と共通クラス (User、Permission など) が含まれており、すべてのページに含まれています。

Modules/ModuleName/page.vb.asp - コード ビハインド ページのようなもの。ページ固有の BO、BLL、および DAL クラスを含み、ページに必要なデータを設定する/送信されたフォーム データなどを受け取る

Modules/ModuleName/Display/INC-DIS-Page.asp - page.vb.asp で設定されたデータを表示します。

于 2008-09-18T10:34:46.593 に答える
3

いくつかのアイデアをエコーし​​、私自身のアイデアをいくつか追加します。

1)データベースにアクセスする最良の方法は、VBScriptからアクセスするある種のCOMコンポーネントにデータベースを抽象化することです。

2)本当に必要な場合は、VBScriptでコントローラーを記述し、ページでそれにアクセスできます。これは、ASP.NET MVCまたはMonoRailで見られるフロントコントローラーではなく、ページコントローラーのパターンに似ています。

3)なぜあなたは自分自身にこれをしているのですか?この種の作業を行うために必要なツールのほとんどは、もう利用できません。

于 2008-08-25T16:19:15.810 に答える
3

AX-Asp Xtreme Evolutionは、ASPクラシック用のMVCフレームワークです

aspのテストフレームワークを作成する試みがいくつかあります。aspUnitは優れていますが、もはや維持されていません。

数ヶ月前に自分で作る方法のサンプルを見ました。この例では、nUnitを使用して、自動テストのためにWebサイトに対して関数を呼び出しました。ここで降りたと思います(回線が途切れているので確認できません)

于 2009-07-09T12:25:32.273 に答える
2

2番については、いくつかのオプションがあると思います...

1) VB6 などで開発された COM コンポーネントを使用して、ビジネス ロジックの一部を UI から分離できます。

2) VBScript でクラスを作成できます。継承の概念はなく、その他のより高度な機能は実装から欠落していますが、ロジックをクラスにカプセル化して、アプリのスパゲティネスを減らすことができます。これをチェックしてください:http://www.4guysfromrolla.com/webtech/092399-1.shtml

于 2008-08-25T16:02:54.867 に答える
2

彼が言及しているすべての理由から、選択した回答を本番コードで使用するのは賢明ではないという@Cirienoに同意します。とはいえ、少しの経験しかない場合、この回答は基本的な出発点として適しています。

私の ASP 経験では、VB を使用してデータベース アクセス レイヤーを記述し、DLL にコンパイルして、VBScript を介して DLL を参照することを好みました。ASP を介して直接デバッグするのは困難ですが、ASP コードから離れたすべてのデータ アクセス コードをカプセル化する良い方法でした。

于 2008-10-08T22:42:54.940 に答える
1

VBScript / ASPがまだ大丈夫だった頃、私は非常に混合されたDB環境を持つ公益事業会社で働いていました。私は、このWebサイトで誓っていました:http://www.connectionstrings.com/

@michealpryorはそれを正しく理解しました

于 2008-08-25T19:37:08.753 に答える
1

私は ASP での構築に行き詰まっており、あなたの痛みを感じています。

1) SQL Server に対してクエリを実行する最良の方法は、パラメーター化されたクエリを使用することです。これにより、SQL インジェクション攻撃を防ぐことができます。

チュートリアル (私のブログではありません):
http://www.nomadpete.com/2007/03/23/classic-asp-which-is-still-alive-and-parametised-queries/

2) ASP に特化した MVC については何も見たことがありませんが、頭を悩ませているので、間違いなく興味があります。私は通常、少なくともビューのようなものとコントローラーのようなものを別々の関数に含めようとします。コードを別々のファイルに記述してから、サーバー側のインクルードを使用してそれらをすべて結合することができると思います。

3) おそらく、より多くの機能が組み込まれている言語から来ているでしょう。最初は、いくつかのものが欠けているように見えるかもしれませんが、多くの場合、慣れているよりも多くのコード行を書くだけの問題です。

于 2008-09-13T04:50:57.413 に答える
1

また、データベースアクセスのために、マイケルが上で言及したものと同様の機能を持つGetSingleRecord、GetRecordset、およびUpdateDatabaseという一連の機能があります

于 2008-09-18T10:36:52.767 に答える