1

従来のASPのvbscriptでパラメータ化されたクエリを使用して、フォームデータをSQLデータベースに挿入しようとしています(ASPの経験はありません)。パラメータを宣言するためにいくつかのバリエーションを試しましたが、すべてエラーが発生します。

ADODB.Command error '800a0bb9'

Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another

私のデータベースのテーブルは、ApplicationId フィールドに null を許可せず、int 型です。TimeStamp 列は日時です。他のすべてのフィールドは varchar(MAX) です

これが私のコードの最近のバリエーションです。エラーなどを見つけることができればお知らせください

Set conn = Server.CreateObject("ADODB.Connection")
conn.Mode = 3
conn.open "Provider=SQLOLEDB;Data Source=xxx.xxx.xxx.xxx,xxxx;database=db_example;uid=user;pwd=password;"

Dim oCmd 
set oCmd = Server.CreateObject("ADODB.Command")

Dim sSQL 
sSQL = "INSERT INTO tbl_Application (ApplicationNumber, Expenses, Name, Why) VALUES (?, ?, ?, ?);"

oCmd.CommandText = sSQL
oCmd.ActiveConnection= conn

Dim param1
Set param1 = oCmd.CreateParameter("ApplicationNumber",adInteger,adParamInput)     
param1.value = session.sessionId
oCmd.Parameters.Append param1

Append の前後に値を代入しようとしました

Dim param2
Set param2 = oCmd.CreateParameter("Expenses",adChar,adParamInput,255) 
param2.value = session("Expenses")
oCmd.Parameters.Append param2

Dim param3
Set param3 = oCmd.CreateParameter("Name",adChar,adParamInput,255) 
param3.value = session("Name")
oCmd.Parameters.Append param3


Dim param4
Set param4 = oCmd.CreateParameter("Why",adChar,adParamInput,255) 
param4.value = session("Why")
oCmd.Parameters.Append param4

Dim oRS
Set oRS = oCmd.Execute()

また、サイトがハッキングされたため、パラメーター化されたクエリでコードを書き直しています。これは、レコードセットなどを使用する必要がある場合に備えて機能した(ただし、インジェクションは許可された)元のコードです

Set conn = Server.CreateObject("ADODB.Connection")
conn.Mode = 3
conn.open "Provider=SQLOLEDB;Data Source=xxx.xxx.xxx.xxx,xxxx;database=db_example;uid=user;pwd=password;"

set rsAddEvent = server.createobject("adodb.recordset")
rsAddEvent.open "tbl_Application", conn, 2, 3
rsAddEvent.addnew

rsAddEvent("ApplicationNumber") = session.sessionId
rsAddEvent("TimeStamp") = now()
rsAddEvent("Applicant") = session("Applicant")
rsAddEvent("Email") = session("Email")
rsAddEvent("Pet") = session("Pet")
rsAddEvent("Address") = session("Address")
rsAddEvent("Postal") = session("Postal")
rsAddEvent("HomePhone")  = session("HomePhone")
rsAddEvent("WorkPhone") = session("WorkPhone")
rsAddEvent("Employed") = session("Employed")
rsAddEvent("Employer") = session("Employer")
rsAddEvent("Unemployment") = session("Unemployment")
rsAddEvent("FormerEmployer") = session("FormerEmployer")
rsAddEvent("Dependants") = session("Dependants")
rsAddEvent("Income") = session("Income")
rsAddEvent("OtherIncome") = session("OtherIncome")
rsAddEvent("Funds") = session("Funds")
rsAddEvent("Circumstance") = session("Circumstance")
rsAddEvent("Afford")  = session("Afford")
rsAddEvent("Spent") = session("Spent")
rsAddEvent("Expenses") = session("Expenses") 
rsAddEvent("Name") = session("Name")
rsAddEvent("Email") = session("Email")
rsAddEvent("Why") = session("Why")

rsAddEvent.update
rsAddEvent.movelast

ここまで読んでくれてありがとう

4

1 に答える 1

3

を含めるのを忘れていたと思います。adovbs.incそのため、などの ADO 定数がadChar認識されません。

これを ASP ページの上部に配置してみてください。

<!--#include virtual="/adovbs.inc"-->

それでもうまくいかない場合は、inc ファイルの設定方法を説明しているこちらを参照してください。

http://www.4guysfromrolla.com/webtech/faq/Beginner/faq7.shtml

于 2013-07-11T18:15:27.673 に答える