2016-03-08 3 views
-1

У меня есть следующий фрагмент кода всякий раз, когда я пытаюсь зарегистрировать часть имени пользователя, похоже, выполняется даже для имени пользователя, которого нет в базе данных. Не знаю, где это неправильно, любая помощь будет оценена.Вставить в базу данных в vb не работает

'Connecting to SQL Database and executing Query------------------------------------------ 
Dim Strconn As String = "Data Source=.\SQLEXPRESS; Database=QuizDB; Integrated Security = true" 
Dim Strcmd As String = "INSERT INTO reg_info(uname,pass,fname,lname,dob,course,college) VALUES ('" & user_name.Text & "','" & con_pass.Text & "', '" & first_name.Text & "', '" & last_name.Text & "', '" & dob.Text & "', '" & course.Text & "', '" & college.Text & "');" 
Dim da As New SqlDataAdapter 
Dim ds As New DataSet 
Dim sqlcmd As SqlCommand 
sqlconn = New SqlConnection(Strconn) 
Try 
    sqlconn.Open() 
Catch ex As Exception 
    MsgBox("Could not connect to DataBase. Application will close now!", vbCritical, "Database Error") 
    End 
End Try 
sqlcmd = New SqlCommand(Strcmd, sqlconn) 
da.SelectCommand = sqlcmd 
sqlcmd.Dispose() 
sqlconn.Close() 

'Exception Handling----------------------- 

Dim exc As Exception = Nothing 
Try 
    da.Fill(ds) 
Catch ex As Exception 
    exc = ex 
Finally 
    If Not (exc) Is Nothing Then 
     MsgBox("User Name Already Exist. Please select a different User Name!", vbExclamation, "Already Exist") 
     user_name.Focus() 
    Else 
     MsgBox("Registration Successful.", vbInformation, "Successful") 
     Me.Close() 
     Login.Show() 
    End If 
End Try 
+3

Почему вы используете * в 'Exception' объекта * для вашей условной? Почему вы игнорируете исключение *? Когда вы отлаживаете это, как * конкретно * он терпит неудачу? Если 'exc' имеет значение, что это за значение? Какое исключение? (Подсказка: игнорирование ошибок не является особенно эффективным способом разрешения этих ошибок.) – David

+5

Это неправильный способ создания SQL. Используйте параметры SQL вместо конкатенации строк. Вместо этих ужасных сообщений Catch выдает реальное сообщение об исключении, и вы, по крайней мере, знаете, что такое ошибка. Исключения не предназначены для управления потоком кода. И пароли никогда не должны храниться как plaintext, hash them – Plutonix

+0

Спасибо, много парней. Фактически, новичок в vb, и я использую его объект исключения, потому что я думал, что это правильный способ сделать это. Я также знаю, что SQL-инъекция тоже. Мне просто нужно конкретное руководство о том, как это сделать. Спасибо –

ответ

0

Вот рефакторинг вашего кода с некоторым полезным руководством. I думаю это скомпилируется, но если это не так, вы можете сделать небольшую домашнюю работу, чтобы выяснить, чего не хватает.

Try 
    ' the USING block guarantees that the object's Close() and Dispose() methods are fired automatically when you exit the block 
    Using sqlconn As New SqlConnection("Data Source=.\SQLEXPRESS; Database=QuizDB; Integrated Security = true") 
     Using sqlcmd As SqlCommand = sqlconn.CreateCommand 
      With sqlcmd 
       .CommandType = CommandType.Text 

       ' parameterized query to protect against SQL injection 
       .CommandText = "INSERT INTO reg_info(uname,pass,fname,lname,dob,course,college) VALUES (@username, @password, @firstname, @lastname, @dob, @course, @college)" 
       With .Parameters 
        .Clear() 
        .AddWithValue("@username", user_name.Text) 
        .AddWithValue("@password", con_pass.Text) 
        .AddWithValue("@firstname", first_name.Text) 
        .AddWithValue("@lastname", last_name.Text) 
        .AddWithValue("@dob", dob.Text) 
        .AddWithValue("@course", course.Text) 
        .AddWithValue("@college", college.Text) 
       End With 
       .ExecuteScalar() ' Actually executes the SQL command 
      End With 
     End Using 
    End Using 
    MsgBox("Registration successful") 


Catch ex As Exception 
    ' Any error in the TRY block will automatically jump to herem and the "ex" object will be an Exception object with populated properties 
    MsgBox("User name already exists. Error from database is " & ex.Message) 

End Try 
Смежные вопросы