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 查询中使用了一个简单的 ' 由 double 包围:'"&stringEntrada&"'

要插入数字,我只使用双精度:“&tlf&”

如果我在尝试插入字母数字时尝试使用简单的 ',例如:'"mail"' 我不会收到任何错误,但数据库会记录一个空白值。

如果我尝试使用双“,例如:“邮件”,我会收到错误消息。

如何插入字母数字变量而不会遇到麻烦?

感谢您的宝贵时间,并为我糟糕的英语感到抱歉。

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 回答