2008-08-25 27 views
7

私はVBScriptとASPクラシックに関する質問のカップルを持っている:のVBScript/ASPクラシック

  1. のVBScript/ASPでMS SQL Serverデータベースにアクセスするための好ましい方法は何ですか?

  2. コントローラーからモデルをビューから切り離す際のベストプラクティスは何ですか?

  3. VBScriptまたはASPのいずれかについて知っておくべきことは何ですか?

気づいていないと、私はVBScriptコーディングが新しくなりました。私は数字2を実現する& 3は、過度に一般的な巨大な "ブラックホール"のようなものなので、ここからの2つの質問について知っていることをすべて知っているとは思っていません。

+1

あなたは私の心からの同情を持っています。 –

答えて

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フィールドを返している場合は、あなただけ一度に一つのMEMOフィールドを選択して、それが最後であることを確認してくださいということです列に移動します。それ以外の場合は、問題に遭遇します。 (参考:http://lists.evolt.org/archive/Week-of-Mon-20040329/157305.html)数2で

2

が、私はあなたがいくつかのオプションを持っていると思う...

1)あなたはVB6で開発されたCOMコンポーネントを使用することができますなどから、ビジネス・ロジックの一部を分離するために、あなたのUI。

2)VBScriptでクラスを作成できます。継承の概念はありません。実装では他の高度な機能が欠けていますが、クラスをロジックでカプセル化することで、アプリのスパゲッティを減らすことができます。 http://www.4guysfromrolla.com/webtech/092399-1.shtml

3

いくつかのアイデアをエコーし​​、私自身のいくつかの追加:データベースにアクセスするための

1)最良の方法は離れますが、VBScriptのからのアクセスある種のCOMコンポーネントへの抽象をするためだろう、これをチェックしてください。

2)実際にはコントローラをVBScriptに書き込んでから、そのページにアクセスすることができます。これは、ページコントローラのパターンに似ていて、ASP.NET MVCやMonoRailで表示されるフロントコントローラではありません。

3)これはなぜあなた自身にやっていますか?この種の作業を行うために必要な工具のほとんどは、もはや使用できません。帰りの日のVBScript/ASPで

+1

Re:確かにそうですが、ヘルプを提供するリソースがたくさんあります(SOなど)。あなたは何年も使っていないかもしれませんが、そうする知恵にかかわらず、他の人がそれをまだ使っていないわけではありません。 (いくつかの契約業務の利点:迅速かつ迅速に。いくつかの契約業務の挑戦:既存のフレームワーク内にソリューションを提供する必要がある) –

1

方法私は非常に混合DBのenvrionmentと電力会社で働いていた まだ大丈夫だった、私はこのウェブサイトによって誓うために使用:http://www.connectionstrings.com/

@michealpryorは右

それを得ました
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)おそらく、より多くの機能が組み込まれている言語を使用している可能性があります。まず、欠落しているように見えるかもしれませんが、多くの場合、慣れている。

+0

@Fionnuala broken link? wayay it:http://web.archive.org/web/20071221011242/http://www.nomadpete.com/2007/03/23/classic-asp-which-is-still-alive-and-parametised-queries/ – frumbert

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など)を含み、すべてのページに含まれます。

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

モジュール/ ModuleName/Display/INC-DIS-Page.asp - .vb.asp。また

1

データベースアクセスのために、私は関数の集合を持っている - GetSingleRecord、GetRecordsetとUpdateDatabaseマイケルは

16

上に言及しているものに類似した機能を持っている私は、私が最初に答えを見たときに離れて私のPCから歩いていた、としていますまだ多くの人々によって承認されていることには悩まされています。それはあなたのサイトがSQLインジェクション可能であることを保証する種類の非常に最悪のASPコードです。このコードをサイト全体で使い続けると、1インチ以内でハッキングできます。

これは、ASPコーディングに新しい人に与えるべきコードのようなものではなく、プロのコーディング方法だと思うからです!

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

  2. Web環境での操作にインラインSQLを使用する場合、もはや良い言い訳はありません。ストアドプロシージャを使用する - セキュリティ上の利点を十分に強調することはできません。あなたが本当にそれを行うことができない場合は、インラインパラメータを2番目に優れたオプションとして見てください...インラインSQLは、SQLインジェクション、マルウェアインジェクション、その他のためにサイトを広く開いたままにします。

  3. 遅延宣言は、コードが荒いことがあります。"option explicit"を使用し、関数の先頭に変数を宣言します。これは実際のWTFではなく、ベストプラクティスですが、それを続けることを意味するように開始することをお勧めします。

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

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

ASPは、.NETへの移行を示唆している多くの人々にもかかわらず、まだ強い言語である - 良いコーディングプラクティスにASPサイトを書き込むことができるが、保守が容易でスケーラブルかつ高速ですが、あなたは確認する必要がありますコードを効率的にするために利用できるあらゆる方法を使用しています。良いコーディング方法と少しの予備知識を維持しなければなりません。良いエディタも助けになります。私の好みはPrimalScriptです。これは.NETコーデックのような最新のMS製品よりもASPコーダーに役立ちます。

また、「メモ」フィールドはどこですか?このアクセス命名法ですか、それともMySQLですか?このようなフィールドは、MS-SQLのTEXTフィールドまたはNTEXTフィールドとも呼ばれています。

+0

1.スクリプト内で接続をパットすることは、接続文字列がビジターに公開されていることを意味するものではありません。 2.ストア手順を使用すると、柔軟性が失われます。インラインSQLを使用すると、SQLインジェクションを防ぐことができます。 –

+2

1. Webサーバーがハッキングされているか、または任意の方法でアクセスされている場合、コードにユーザー名とパスワードがあるため、データベースもオープンターゲットになりました。 –

+0

2.私はASPを何年も前から使用し始めたとき、それも信じていましたが、これは非常に素朴な見解であり、コードとサーバーの効率を高めます(クエリのキャッシュ=高速化)正しいデータ型など)を提供し、柔軟性を追加します(フロントエンドの変更やデータへの複数のアクセス方法があります)。 3. SQLインラインでのSQLインジェクションを防ぐことはできますが、MS-SQLを使用している開発者が効率的かつ安全にデータを取得して返すための時間のかかる方法がある場合は、 –

2

私が@Cirienoに同意するのは、彼が言及するすべての理由から、選択された回答がプロダクションコードで使用するのが賢明ではないということです。それはちょっとした経験があれば、この答えは基本についての良い出発点です。

私のASPの経験では、VBを使用してデータベースアクセスレイヤーを書き、DLLをコンパイルしてVBScriptでDLLを参照することをお勧めしました。 ASPから直接デバッグするのは難しいですが、すべてのデータアクセスコードをASPコードからカプセル化するのは良い方法でした。 aspUnitは良いですが、もはや維持: -

3

AXのAspエクストリーム進化ASPのためのテストフレームワークを作るのが、いくつかの試みがあり、古典的な

ASPのためのMVCフレームワークです。

私はあなた自身のものを数ヶ月前に作る方法に関するサンプルを見ました。 この例では、自動テストのためにnUnitを使用してWebサイトに対して関数を呼び出しました。 私はそれを得たと思うhere(私のラインはボクシングされているのでチェックできません)

+0

私はまだその仕事で働いていたら、私は幸せになるでしょう。 :-) –