使用文本框更新SQL Server表

时间:2013-04-17 08:14:36

标签: asp.net sql sql-server vb.net

我正在使用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

2 个答案:

答案 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查询不是好事/危险做法