我得到以下错误:运算符'&'未为类型"String"one_answers"System.Windows.Forms.TextBox"定义。:
在以下代码行中:
cmd.CommandText = "INSERT INTO users(userid, passWord, firstName, lastName, jobTitle, SSN) VALUES (" & Me.adduseridtxtbox & ",'" & Me.addpasswordtxt & ",'" & Me.addfirstnametxt & ",'" & Me.addlastnametxt & ",'" & Me.jobcbox & ",'" & Me.addssntxt & "')"
这是代码:
Private Sub addbtn_Click(sender As Object, e As EventArgs) Handles addbtn.Click
Dim cmd As New OleDbCommand
If Not connection.State = ConnectionState.Open Then
connection.Open()
End If
cmd.Connection = connection
' add data to table
cmd.CommandText = "INSERT INTO users(userid, passWord, firstName, lastName, jobTitle, SSN) VALUES (" & Me.adduseridtxtbox & ",'" & Me.addpasswordtxt & ",'" & Me.addfirstnametxt & ",'" & Me.addlastnametxt & ",'" & Me.jobcbox & ",'" & Me.addssntxt & "')"
cmd.ExecuteNonQuery()
'refresh data in list
'close connection
connection.Close()
End Sub
您必须使用Me.adduseridtxtbox.Text
(它获取TextBox
的值),而不是直接使用TextBox
。
此外,请,请,请阅读有关OleDbParameter
的信息,以及如何将这些参数与OleDbCommand
一起使用以防止注射。微软甚至提供了一些例子。
目前,如果你让用户自己填写这个表单,你的代码是非常危险的,因为他们可以完全控制你的数据库。无论如何,使用OleDbParameter
是一个很好的实践。你似乎在这里处理社会安全号码——你的用户应该得到某种形式的安全保障。
您应该尝试在查询中使用/声明参数。例如:
cmd.CommandText = ("INSERT INTO users(userid, passWord, firstName, lastName, jobTitle, SSN) " & _
"VALUES (@uid, @pw, @fn, @ln, @job, @ssn)")
With cmd.Parameters
.Clear()
.AddWithValue("uid", adduseridtxtbox.Text)
.AddWithValue("uid", adduseridtxtbox.Text)
.AddWithValue("pw", addpasswordtxt.Text
.AddWithValue("fn", addfirstnametxt.Text)
.AddWithValue("ln", addlastnametxt.Text)
.AddWithValue("job",jobcbox.SelectedValue)
.AddWithValue("ssn", addssntxt.Text)
End With
cmd.ExecuteNonQuery()
您的SQL语句不正确。如何将对象用作字符串?应该是cmd.CommandText = "INSERT INTO users(userid, passWord, firstName, lastName, jobTitle, SSN) VALUES ('" & Me.adduseridtxtbox.Text & ",'" & Me.addpasswordtxt.Text & ",'" & Me.addfirstnametxt.Text & ",'" & Me.addlastnametxt.Text & ",'" & Me.jobcbox.Text & ",'" & Me.addssntxt.Text & "')"
使用参数化查询可以防止SQL注入,并确保数据库系统免受恶意用户的攻击。