1

久しぶりに新しいマシンでローカルにホストされた Web サイトをセットアップしていますが、正直なところ、現在構成されているすべての手動設定にあまり慣れていません。私の最後のセットアップは Windows XP ボックス上で行われ、IIS を有効にすると「正常に動作した」ように見えました。今回はそうではありません。

私の最新の問題は、MSAccess DB への接続に関するものです。1 つの入力を含むフォームを含む VERY BASIC ページがあります。DB をチェックして値がまだ含まれていないことを確認し、含まれていない場合は値を DB に書き込みます。次のエラーが表示されます。

Provider error '80004005'
Unspecified error
/trips/admin_add_hotel.asp, line 22

私はオンラインで調査しましたが、すべてが許可の問題であることを示しているようです。ただし、コードの 2 番目の部分 (書き込み) を削除すると、ページは問題なく返されます。ページを再度実行または更新しようとすると、エラーが発生します。これは、ユーザーが読み取りアクセス権を持っていることを示しています。ここで、少し待ってコードの最初の部分を削除し、DB に書き込むだけで問題なく動作します。繰り返しますが、ユーザーが書き込みアクセス権を持っていることを示しています。ただし、もう一度実行しようとすると...同じエラーが発生します。

ASPコードは次のとおりです。

<!--#include file="includefile.asp"-->
<%
if Request("action") = "submit" then
    'make sure hotel name is filled in
    if Request("fhotel") <> "" then
        fhotel = Request("fhotel")

        'make sure hotel doesn't already exist in DB
        sql = "SELECT hotel_id FROM hotels WHERE hotel_name = '" & Replace(fhotel, "'", "''") & "'"
        RS.Open sql, ConnectString
            if NOT RS.EOF then
                Session("msg") = "Hotel already exists"
            End if
        RS.Close

        'add hotel to DB
        if Session("msg") = "" then
            sql = "INSERT INTO hotels (hotel_name) VALUES ('" & Replace(fhotel, "'", "''") & "')"

            Conn.Open ConnectString
            Conn.Execute sql
            Conn.Close

            Session("msg") = "Hotel added successfully"
            fhotel = ""
        End if
    Else
        Session("msg") = "Hotel left blank"
    End if

    Set RS = Nothing
    Set Conn = Nothing

End if
%>

私のインクルードファイルは次のとおりです。

<%  
ConnectString = "DSN=ConnectionDSN; Uid=username; Pwd=password"

Set RS = Server.CreateObject("ADODB.Recordset")
Set Conn = Server.CreateObject("ADODB.Connection")
%>

私のDBには、2つの列を持つ1つのテーブルがあります:

  • hotel_id [自動番号]
  • ホテル名 [TEXT (255)]

ここに私のシステムの詳細があります:

  • Windows 7 Pro 64 ビット (ただし、オンラインで見つけた情報に基づいて、接続は 32 ビット用にセットアップされています)
  • IIS7.5

アクセス許可の問題ではないことを確認するために、「Everyone」ユーザーにそのフォルダーへのフル アクセスを一時的に許可しました。

どんな助けでも大歓迎です。これが、物事を完全に稼働させるための最後のハードルだと思います。

前もって感謝します。

4

1 に答える 1

0

いくつかのこと:

  • 32 ビット vs 64 ビット: アプリケーションが明示的に AnyCPU ではなく x86 に設定されていることを確認してください。また、新しいものを使用している.accdb場合は、Access データベース エンジン ドライバーがインストールされていることを確認してください。

  • アクセス許可: Dan Matheus が言ったように、IIS を実行するプロセスにフォルダーへの書き込みアクセス許可があることを確認してください。Everyoneに設定するだけでは不十分な場合があります。Web アプリが実際にそのフォルダーにファイルを作成できることを確認してください (コードでこの仮定をテストしてください)。

  • Access ファイルの接続文字列で、排他的アクセスではなく、共有アクセスが明示的に言及されていることを確認してください。

  • ロックファイルの迅速な作成/削除に関する問題を回避するために、データベースへの接続を常に開いたままにしてください。
    Jet/ACE データベース ドライバは、ファイルにアクセスするたびにロック ファイルを作成する必要があります (共有モードの場合)。アプリがデータベース ファイルにすばやくアクセス/解放し、ロック ファイルが頻繁に作成/削除されると、問題が発生します。
    まず、パフォーマンスが大幅に低下し、次に奇妙なエラーが発生します。
    データベースへの接続を開いたままにし、アプリのシャットダウン時に接続を閉じるだけです。

上記のポイントについて詳しくは、次を参照してください。

于 2013-04-15T01:44:38.623 に答える