1

ms-access データベースに英数字を導入しようとすると問題が発生します。数字や日付はできるのですが、英数字だと問題ありそうで、

私が使用するコードは次のとおりです。

Dim adoCon         
Dim strSQL        

Set adoCon=Server.CreateObject("ADODB.Connection")


adoCon.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("basededades.mdb")


'Here I am getting all the values previously passed by a form.

stringEntrada=Request.Form("stringEntrada")
stringSortida=Request.Form("stringSortida")
valoridHabitaciolliure=Request.Form("valoridHabitaciolliure")
numeropersones=Request.Form("numeroPersones")
nom=Request.Form("nom")
dni=Request.Form("dni")
tlf=Request.Form("tlf")
mail=Request.Form("mail")
ciutat=Request.Form("ciutat")
tipusH=Request.Form("tipusH")
diaReserva=Request.Form("diaReserva")

mail、nom、ciutat、tipusH、dni、valoridHabitaciolliure は、テキスト入力フォームの英数字です。diaReserva、stringSortida、stringEntrada は、テキスト入力フォームからの日付です。tlf は整数変数です。

strSQL="INSERT INTO Reserva (dni,tlf,diaReserva,inici,fi,tipusHabitacio) VALUES ("&dni&","&tlf&",'"&diaReserva&"','"&stringEntrada&"','"&stringSortida&"'," "&tipusH&")" 
adoCon.Execute(strSQL)

データベースに挿入された値を見ると、「diaReserva」や「stringSortida」などの日付変数と「tlf」などの数値変数が正しく挿入されていることがわかります。

日付変数を挿入するには、単純な ' を二重で囲んだ " を SQL クエリで使用します: '"&stringEntrada&"'

数値を挿入するには、「&tlf&」という double のみを使用します。

'"mail"' のような英数字を挿入しようとして単純な ' を使用しようとすると、エラーは発生しませんが、データベースは空白の値を記録します。

"mail" のように double を使用しようとすると、エラーが発生します。

問題なく英数字変数を挿入するにはどうすればよいですか?

お時間をいただきありがとうございます。下手な英語で申し訳ありません。

4

1 に答える 1

0

次のようなパラメータ化されたクエリを使用することで、「引用の問題」を回避し、 SQL インジェクションの脆弱性も回避できます。

Dim con  '' As ADODB.Connection
Dim cmd  '' As ADODB.Command
Dim stringName, longSponsorID, datetimeDateJoined

Const adCmdText = 1
Const adVarWChar = 202, adInteger = 3, adDate = 7
Const adParamInput = 1

'' test data
stringName = "Gord"
longSponsorID = 5
datetimeDateJoined = Now

Set con = CreateObject("ADODB.Connection")
con.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Public\mdbTest.mdb;"
Set cmd = CreateObject("ADODB.Command")
cmd.CommandType = adCmdText
cmd.ActiveConnection = con
cmd.CommandText = _
        "INSERT INTO Members " & _
            "(memberName, sponsorID, dateJoined) " & _
        "VALUES " & _
            "(?, ?, ?)"
'' parameter for [memberName]
cmd.Parameters.Append cmd.CreateParameter("?", adVarWChar, adParamInput, 255, stringName)
'' parameter for [sponsorID]
cmd.Parameters.Append cmd.CreateParameter("?", adInteger, adParamInput, , longSponsorID)
'' parameter for [dateJoined]
cmd.Parameters.Append cmd.CreateParameter("?", adDate, adParamInput, , datetimeDateJoined)
cmd.Execute
Set cmd = Nothing
con.Close
Set con = Nothing
于 2013-05-21T09:34:42.663 に答える