2011-12-08 20 views
5
Set rsPlanID = Server.CreateObject("ADODB.Recordset") 
rsPlanID.CursorLocation = adUseClient 

strSQL = "SELECT PlanID FROM ATTJournals WHERE ATTUserDataID = " & ATTUserDataID 
rsPlanID.Open strSQL, m_objConn, adOpenStatic, adLockOptimistic 

If Not rsPlanID.EOF Then 
    response.Write "New PlanID:" & rsPlanID("PlanID") 
End If 

上記のコードは古典的なaspです。ADODB.Recordsetエラー '800a0bb9':引数のタイプが間違っています

ADODB.Recordset error '800a0bb9'
Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.

Dows誰もが原因にこのエラーを知っているとどのようにそれを修正する:

私は次のエラーを取得していますか?

答えて

14

原因などのほとんどは、あなたが「ADOVBS.INC」またはequavalent METAを含めていないということです: -

<!--METADATA 
TYPE="TypeLib" 
NAME="Microsoft ActiveX Data Objects 2.6 Library" 
UUID="{00000206-0000-0010-8000-00AA006D2EA4}" 
VERSION="2.6" 
--> 

したがってadxxxx定数は存在しません。しかし、あなたの主な間違いは、スクリプトの先頭にOption Explicitを含めないことです。これは、時間のバケツの負荷を愚かな間違いやタイプミスを救うでしょう。

BTW ATTUserDataIDに「0; DELETE ATTJournals;」が含まれているとどうなりますか? ?
ペストのような連結を使用してSQLを作成しないでください。 「ASP SQLインジェクション」を検索して、パラメータ化されたコマンドオブジェクトの使用例を探します。

+0

これをglobal.asaに入れることはできますか(つまり、数百の.aspファイルではなく1か所)。 – NealWalters

+1

@NealWaltersはい、実際には強くお勧めします。 – Lankymart

0

最初に、私がvbscriptでアプリケーションをデボルゴにしたとき、私は常にレコードセットを開くために数字を使用しました。

rsPlanID.Open strSQL, m_objConn, 3, 3 

まず、ファイルadovbs.incを必ずインクルードするようにしてください。数値は、さまざまな種類のレコードセットプロパティに関連付けられます。そして、最初にdatabse接続を開くようにしないでください。

第二に、私は、あなたがライン

rsPlanID.CursorLocation = adUseClient 

Thrirdを必要としないと思うもthis threadを参照してください。たぶんそれはあなたのための良いテンプレートです。

0

あなただけのデフォルト設定を使用して、レコードセットで前後に移動する必要がない限り:

strSQL = "SELECT PlanID FROM ATTJournals WHERE ATTUserDataID = " & ATTUserDataID 
Set rsPlanID = m_objConn.Execute(strSQL) 

また、あなたのコードは、SQLインジェクション攻撃のために大きく開いている - あなたは、より良い、それについて学び、あなたのコードを変更します代わりにパラメータを使用します。

-1
Function SQL_getRecordset(strQuery) 

'On Error Resume Next 
'Create Database connection object 
    Set objConnection = CreateObject("ADODB.Connection") 

    'Create Recordset object 
    Set objrecordset = CreateObject("ADODB.Recordset") 

    'Specify the connection string 
    strConnectionstring = "Provider=SQLOLEDB.1;Data Source=*<Server name>*;Initial Catalog=*<database>*;Integrated Security=SSPI" 
    objConnection.Open strConnectionstring 

    'Execute the Query 
    Set objrecordset = objConnection.Execute(strQuery) 

    'Return Recordset 
    Set SQL_getRecordset = objrecordset 

    'Release objects from the memory 
    Set objConnection = Nothing 
    Set objrecordset = Nothing 

End Function 
0

私は全体のインターネットを検索し、この問題の解決策を見つけることができませんでした、と私はあきらめるとしていたのと同様のように感じるが、私は「もし」の中に私の接続変数を宣言していたことに気づきましたあなたの質問に記載されているようにエラーを出すデータベースに私のコマンドを実行しなかったためです。

関連する問題