1

我正在使用 asp.net vb.net 和 SQL Server 编写一个教育网站。我有 4 个堆栈持有者,如果任何人登录他的个人资料,他会看到他的信息

如果他想更新它们,他只需更改文本框,然后单击更新

我的问题是如何更新。

我写了一个更新方法,但它总是在查询中显示语法错误。我确定没有问题。我正在更新两个表,并制作了 sql 语句!

我的问题是我可以插入而不是更新吗?

如果不是:如何根据我拥有的会话更新一条记录?

请帮我

这是我的代码

' 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
4

2 回答 2

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返回字符串值,您可能需要将其转换为Int32usingConvert.Int32或者您需要将其包装在单引号中,完全取决于您的列的数据类型

于 2013-04-17T08:26:26.373 回答
1

将您在 SQL 命令查询中声明的参数放入:

"UPDATE AdminCoordinatorInformation SET MobileNumber=@MobileNumber,HomeNumber=@homeNumber...

您会收到语法错误,因为您在 sql 查询中的字符串数据必须用“'”包裹。

"UPDATE AdminCoordinatorInformation SET MobileNumber='0987654321',....

注意:由于SQL 注入,通过将查询与用户输入连接来创建 sql 查询("...SET MobileNumber='" + txtbox.Text + "',...")不是好的/危险的做法

于 2013-04-17T08:31:17.847 回答