2016-04-03 4 views
0

У меня проблема, и я не знаю, является ли ее запрос запроса вставки или база данных.Невозможно вставить в базу данных с помощью vb.net

Это инструкция вставки.

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    Dim value As Integer 
    If txtPassword.Text = txtPassCon.Text Then 
     Try 
      constring = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\tmsDB.mdf;Integrated Security=True" 
      con = New SqlConnection(constring) 
      con.Open() 
      cmd.Connection = con 
      cmd.CommandText = "Insert into Login (Username,Password) values ('" & txtUsername.Text & "' , '" & txtPassword.Text & "')" 
      cmd.ExecuteNonQuery() 
      cmd.CommandText = "select max(id) from login" 
      value = cmd.ExecuteScalar() 
      cmd.CommandText = "Insert into Scouts (Name,Club,Email, LoginID) values ('" & txtName.Text & "' , '" & txtClub.Text & "' , '" & txtEmail.Text & "', '" & value & "')" 
      cmd.ExecuteNonQuery() 
      con.Close() 
      MessageBox.Show("Registeration Sucessful") 
     Catch ex As Exception 
      MessageBox.Show(ex.ToString) 
     End Try 
    End If 
End Sub 

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

CREATE TABLE [dbo].[Login] (
    [Id]  INT   NOT NULL IDENTITY , 
    [Username] NVARCHAR (15) NOT NULL, 
    [Password] NVARCHAR (20) NOT NULL, 
    PRIMARY KEY CLUSTERED ([Id] ASC) 
); 

Это таблица в базе данных. установить идентификатор идентичности, потому что я думал, что это как сделать столбец авто номер

+2

Я рекомендовал бы не строить свои операторы вставки из строк, как это потому, что он открывает вас к SQL-инъекций. Он также терпит неудачу для таких имен, как «Paddy O'Ryan» –

+1

Есть ли сообщение об ошибке? Что это? 'он попадает в окно сообщений ', но у вас есть 2. PLS помогите нам, прочитав [Ask], а также возьмите [Tour]. Также не выполняйте SQL, используйте параметры и никогда не храните пароли как обычный текст - хешируйте их. Присвоение уникального идентификатора из числа строк в конечном итоге не удастся - используйте AI PK, который предоставляет DB. – Plutonix

+0

ОК, конечно, обратите внимание на это, но нет ошибки, отброшенной назад. Ничего. просто не вставляет в базу данных – Qwaiks

ответ

0

'Создать ExecuteScalar функцию

Public Function ExecuteScalar(query As String, ByVal ParamArray param() As Object) As int 

     Try 

      _commanda = New SqlCommand(query, _connection) 
      _commanda.CommandTimeout = 200 

      _sqlda = New SqlDataAdapter(_commanda) 
      _commanda.Transaction = _transaction 


      For i = 0 To param.Count - 1 

       _commanda.Parameters.AddWithValue("@" & i, param(i)) 

      Next 

     dim value = _commanda.ExecuteScalar() 

      _sqlda.Dispose() 
      _commanda.Dispose() 

      Return value 

     Catch ex As Exception 

      MessageBox.Show(ex.StackTrace) 

      Return nothing 
     End Try 


    End Function 

' Создать функцию ExecuteNonQuery

Public Function ExecuteNonQuery(query As String, ByVal ParamArray param() As Object) As Boolean 

     Try 

      _commanda = New SqlCommand(query, _connection) 
      _commanda.CommandTimeout = 200 

      _sqlda = New SqlDataAdapter(_commanda) 
      _commanda.Transaction = _transaction 


      For i = 0 To param.Count - 1 

       _commanda.Parameters.AddWithValue("@" & i, param(i)) 

      Next 

      _commanda.ExecuteNonQuery() 


      _sqlda.Dispose() 
      _commanda.Dispose() 

      Return True 

     Catch ex As Exception 

      MessageBox.Show(ex.StackTrace) 

      Return False 
     End Try 


    End Function 

«Назовите это

try 
if _connection.State = ConnectionState.Closed then 
    _connection.open() 
end if 

    if ExecuteNonQuery("Insert into Login values (@0,@1)",txtUsername.Text, txtPassword.Text) then 

    dim value = ExecuteScalar("select max(id) from login") 

    if ExecuteNonQuery("Insert into Scouts (Name,Club,Email, LoginID) values (@0,@1,@2,@3)", txtName.Text , txtClub.Text , txtEmail.Text, value) then 

     _connection.Close() 
     MessageBox.Show("Registeration Sucessful") 

    else 

     MessageBox.Show("Registeration Not Sucessful") 
    end if 

    else 

     MessageBox.Show("Registeration Not Sucessful") 
    end if 

    Catch ex As Exception 

     MessageBox.Show(ex.StackTrace) 

    End try 
0

Это также поможет сменить исключение на SQLException в блоке catch например Поймайте экс Как SQLException MessageBox.Show (ex.ToString) End Попробуйте

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