我正在使用asp.net vb.net和SQL Server编写教育网站。我有4个堆栈持有者,如果有任何正文登录他的个人资料,他将会看到他的信息
如果他想要更新它们,只需更改文本框,然后单击“更新”
我的问题是如何更新。
我写了一个更新方法,但它总是在查询中显示语法错误。我确定没有问题。我正在更新两个表,我做了sql语句!
我的qustion是可以插入而不是更新吗?
如果没有:如何根据我的会话提升一条记录?
请帮帮我
这是我的代码
' Private Sub UpdateInfo(ByVal USER_ID As Integer)
'Dim User As Integer = USER_ID
'Dim sql1 As String = "UPDATE AdminCoordinatorInformation SET MobileNumber =" + tbmobile.Text + ", HomeNumber=" + tbhome.Text + ", AltRelation = " + DDLRelationShip.SelectedValue + ", AlTitle = " + DDLTitle.SelectedValue + ", AltName = " + tbemname.Text + ", AltMobile = " + tbemmobile.Text + " WHERE USER_ID = User)"
'Dim sql2 As String = "UPDATE DIP_USERS SET USER_Email=" + tbEmail.Text.Trim + " WHERE USER_ID = User)"
' Try
' Dim conn As New SqlConnection(ConfigurationManager.ConnectionStrings("mydbConnectionString").ConnectionString)
' Dim cmd1 As New SqlCommand(sql1, conn)
' Dim cmd2 As New SqlCommand(sql2, conn)
' cmd2.Parameters.AddWithValue("@FirstName", tbname.Text)
' cmd2.Parameters.AddWithValue("@USER_PASSWORD", tbnewpassword.Text)
' cmd2.Parameters.AddWithValue("@USER_Email", tbEmail.Text)
' cmd1.Parameters.AddWithValue("@MobileNumber", tbmobile.Text)
' cmd1.Parameters.AddWithValue("@HomeNumber", tbhome.Text)
' cmd1.Parameters.AddWithValue("@AltRelation", DDLRelationShip.SelectedValue)
' cmd1.Parameters.AddWithValue("@AlTitle", DDLTitle.SelectedValue)
' cmd1.Parameters.AddWithValue("@AltName", tbemname.Text)
' cmd1.Parameters.AddWithValue("@AltMobile", tbemmobile.Text)
' conn.Open()
'Dim ra As Integer = cmd1.ExecuteNonQuery()
'Dim ra1 As Integer = cmd2.ExecuteNonQuery()
'cmd1.Dispose()
'cmd2.Dispose()
' conn.Close()
' Catch ex As Exception
' MsgBox(ex.Message)
' End Try
'End Sub
答案 0 :(得分:4)
您没有在查询中指定参数,而是直接连接查询中的控件值。你还添加了参数。
首先,不要像这样连接你的sql查询,它倾向于SQL Injection
。
构建您的查询:
Dim sql1 As String = "UPDATE AdminCoordinatorInformation SET
MobileNumber =@MobileNumber,
HomeNumber=@HomeNumber,
AltRelation = @AltRelation,
AlTitle = @AlTitle,
AltName =@AltName,
AltMobile = @AltMobile
WHERE USER_ID = @User"
Dim sql2 As String = "UPDATE DIP_USERS SET
USER_Email=@USER_Email
WHERE USER_ID = @User"
并且还添加此参数
cmd1.Parameters.AddWithValue("@User", USER_ID)
cmd2.Parameters.AddWithValue("@User", USER_ID)
还有一个非常重要的事情。您需要为查询中的列分配正确的数据类型,即 记住这些事情。
txtBox.Text
返回String值,您可能需要使用Int32
将其转换为Convert.Int32
,或者您需要将其包装在单引号中,完全基于列的数据类型
答案 1 :(得分:1)
将您在SQL命令查询中声明的参数放入:
"UPDATE AdminCoordinatorInformation SET MobileNumber=@MobileNumber,HomeNumber=@homeNumber...
您会收到语法错误,因为sql查询中的字符串数据必须用“'”包装。
"UPDATE AdminCoordinatorInformation SET MobileNumber='0987654321',....
注意:由于SQL Injection
,通过将查询与用户输入("...SET MobileNumber='" + txtbox.Text + "',...")
联合来创建SQL查询不是好事/危险做法