2013-01-31 2 views
1

새 레코드를 삽입 한 후 일부 레코드를 업데이트하려고하는데 업데이트되지 않고 오류가 발생하지 않습니다.SQL Server의 업데이트 성명

If txtSearch.Text <> txtUserID.Text Then 
     Try 
      Dim connectionString As String = "Data Source=.\SqlExpress;Initial Catalog=Subscription;Integrated Security=True" 
      Using cn As New SqlConnection(connectionString) 
       cn.Open() 
       cmd.CommandText = "INSERT INTO Customers (UserID, RegisteredDate, ExpiryDate, FirstName, LastName, Address, State, City, Phone, Mobile, Email) VALUES(@UserID, @RegisteredDate, @ExpiryDate, @FirstName, @LastName, @Address, @State, @City, @Phone, @Mobile, @Email)" 

       Dim param1 As New SqlParameter() 
       param1.ParameterName = "@UserID" 
       param1.Value = txtUserID.Text.Trim() 
       cmd.Parameters.Add(param1) 

       Dim param2 As New SqlParameter() 
       param2.ParameterName = "@RegisteredDate" 
       param2.Value = RegisteredDate.Value 
       cmd.Parameters.Add(param2) 

       Dim param3 As New SqlParameter() 
       param3.ParameterName = "@ExpiryDate" 
       param3.Value = ExpiryDate.Value 
       cmd.Parameters.Add(param3) 

       Dim param4 As New SqlParameter() 
       param4.ParameterName = "@FirstName" 
       param4.Value = txtFirstName.Text.Trim() 
       cmd.Parameters.Add(param4) 

       Dim param5 As New SqlParameter() 
       param5.ParameterName = "@LastName" 
       param5.Value = txtLastName.Text.Trim() 
       cmd.Parameters.Add(param5) 


       Dim param6 As New SqlParameter() 
       param6.ParameterName = "@Address" 
       param6.Value = txtAddress.Text.Trim() 
       cmd.Parameters.Add(param6) 

       Dim param7 As New SqlParameter() 
       param7.ParameterName = "@State" 
       param7.Value = cboState.SelectedItem.ToString 
       cmd.Parameters.Add(param7) 

       Dim param8 As New SqlParameter() 
       param8.ParameterName = "@City" 
       param8.Value = cboCity.SelectedItem.ToString 
       cmd.Parameters.Add(param8) 

       Dim param9 As New SqlParameter() 
       param9.ParameterName = "@Phone" 
       param9.Value = txtPhone.Text.Trim() 
       cmd.Parameters.Add(param9) 

       Dim param10 As New SqlParameter() 
       param10.ParameterName = "@Mobile" 
       param10.Value = txtMobile.Text.Trim() 
       cmd.Parameters.Add(param10) 

       Dim param11 As New SqlParameter() 
       param11.ParameterName = "@Email" 
       param11.Value = txtEmail.Text.Trim() 
       cmd.Parameters.Add(param11) 

       cmd.Connection = cn 
       cmd.ExecuteNonQuery() 
       cn.Close() 
      End Using 
      Successlbl.Show() 
      Successlbl.ForeColor = Color.DarkBlue 
      Successlbl.Text = "Record Saved Successfully!." 

     Catch 
      Successlbl.Show() 
      Successlbl.ForeColor = Color.Red 
      Successlbl.Text = "Error in creating record!" 
     End Try 
    Else 
     Try 
      Dim connectionString As String = "Data Source=.\SqlExpress;Initial Catalog=Subscription;Integrated Security=True" 
      Using cn As New SqlConnection(connectionString) 
       cn.Open() 
       cmd.CommandText = "UPDATE Customers SET (UserID, RegisteredDate, ExpiryDate, FirstName, LastName, Address, State, City, Phone, Mobile, Email) VALUES(@UserID, @RegisteredDate, @ExpiryDate, @FirstName, @LastName, @Address, @State, @City, @Phone, @Mobile, @Email) WHERE UserID=" & txtUserID.Text & "" 

       Dim param1 As New SqlParameter() 
       param1.ParameterName = "@UserID" 
       param1.Value = txtUserID.Text.Trim() 
       cmd.Parameters.Add(param1) 

       Dim param2 As New SqlParameter() 
       param2.ParameterName = "@RegisteredDate" 
       param2.Value = RegisteredDate.Value 
       cmd.Parameters.Add(param2) 

       Dim param3 As New SqlParameter() 
       param3.ParameterName = "@ExpiryDate" 
       param3.Value = ExpiryDate.Value 
       cmd.Parameters.Add(param3) 

       Dim param4 As New SqlParameter() 
       param4.ParameterName = "@FirstName" 
       param4.Value = txtFirstName.Text.Trim() 
       cmd.Parameters.Add(param4) 

       Dim param5 As New SqlParameter() 
       param5.ParameterName = "@LastName" 
       param5.Value = txtLastName.Text.Trim() 
       cmd.Parameters.Add(param5) 


       Dim param6 As New SqlParameter() 
       param6.ParameterName = "@Address" 
       param6.Value = txtAddress.Text.Trim() 
       cmd.Parameters.Add(param6) 

       Dim param7 As New SqlParameter() 
       param7.ParameterName = "@State" 
       param7.Value = cboState.SelectedItem.ToString 
       cmd.Parameters.Add(param7) 

       Dim param8 As New SqlParameter() 
       param8.ParameterName = "@City" 
       param8.Value = cboCity.SelectedItem.ToString 
       cmd.Parameters.Add(param8) 

       Dim param9 As New SqlParameter() 
       param9.ParameterName = "@Phone" 
       param9.Value = txtPhone.Text.Trim() 
       cmd.Parameters.Add(param9) 

       Dim param10 As New SqlParameter() 
       param10.ParameterName = "@Mobile" 
       param10.Value = txtMobile.Text.Trim() 
       cmd.Parameters.Add(param10) 

       Dim param11 As New SqlParameter() 
       param11.ParameterName = "@Email" 
       param11.Value = txtEmail.Text.Trim() 
       cmd.Parameters.Add(param11) 

       cmd.Connection = cn 
       cmd.ExecuteNonQuery() 
      End Using 
      Successlbl.Show() 
      Successlbl.ForeColor = Color.DarkBlue 
      Successlbl.Text = "Record updated Successfully!." 

     Catch 
      Successlbl.Show() 
      Successlbl.ForeColor = Color.Red 
      Successlbl.Text = "Error in updating record!" 
     End Try 
    End If 

사람이 어디 내가 잘못 가고 저를 말할 수 : 여기

내 코드?

+0

'UserID'는 (는)'CUSTOMERS'의 기본 키입니까? –

+0

아니요 기본 키가 아닙니다. – coder

+1

WHERE UserID = "& txtUserID.Text &"는 SQL 인젝션 취약점입니다! 당신이 이미 매개 변수들을 많이 사용하고있는 것 같습니다 :) –

답변

4

UPDATE 문은 SQL Server/T-SQL에서 모두 잘못되었습니다. INSERT 문과 동일한 구문을 사용할 수 없습니다. UPDATE의 구문에 대한 자세한 내용은 MSDN SQL Server Books Online을 참조하십시오. (! 그 +1 일) : 또한

UPDATE dbo.Customers 
SET 
    RegisteredDate = @RegisteredDate, 
    ExpiryDate = @ExpiryDate, 
    FirstName = @FirstName, 
    LastName = @LastName, ...... -- and so on for all relevant columns 
WHERE UserID = @UserID 

:

당신은 지정해야합니다 당신이 모든 곳에서 매개 변수를 사용하고 있지만, WHERE 절에 대한 하지 .... 그 변경!

+1

올바른 방향으로 나를 가리켜 주셔서 감사합니다. 마크 (Marc)에게 감사의 인사를 전합니다. :) 나는 그것이 SQL 인젝션이고 여전히 테스트 모드라는 것을 알고있었습니다. 그리고 분명히 나는 ​​그들을 업데이트 할 것이다. – coder

0
Try 
     If con.State = ConnectionState.Open Then con.Close() 
     con.Open() 
     global_command = New SqlCommand("UPDATE products_tbl set running_no = '" & txt_running.Text & "' where template_code = 'n'and prod_no = '" & txt_product.Text & "'", con) 
     global_command.ExecuteNonQuery() 
     global_command.Dispose() 

     MsgBox("Successfully updated!", MsgBoxStyle.Information, "Message") 
     where = vbNullString 

    Catch ex As Exception 
     MsgBox("Trace No 4: System Error or Data Error!" + Chr(13) + ex.Message + Chr(13) + "Please Contact Your System Administrator!", vbInformation, "Message") 
    End Try 

End Sub