2016-04-03 41 views
0

Bir sorunum var ve onun ekleme sorgu deyimi veya kendi veritabanı olup olmadığını bilmiyorum.vb.net kullanarak veritabanına eklenemiyor

Bu, insert ifadesidir.

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 

bu başarıyla messagebox alır ve bana mesaj gösterir ama db kontrol ederken onun aslında orada kaydedilmiş eğer göstermez, görmeye çünkü iş gibi görünüyor çalıştırdığınızda

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

Veritabanındaki tablo budur. Bunun bir otomatik numara sütunu

+2

Ben sql enjeksiyon saldırılarına kadar açılır çünkü böyle dizeleri adresinin insert deyimi oluştururken değil tavsiye ederim deneyin SQLException MessageBox.Show (ex.ToString) sonu itibariyle Yakalama ex. Ayrıca "Paddy O'Ryan" gibi isimler için başarısız olur –

+1

Bir hata mesajı var mı? Bu ne? '' mesaj kutusuna ulaşır '' ancak 2. PLS bize [Ask] 'i okuyarak yardım eder ve [Tour]' u da alır. Ayrıca, SQL uyumu yapmayın, parametreleri kullanın ve asla parolaları düz metin olarak saklamayın. Satır sayısından benzersiz bir kimlik atama sonunda korkunç bir şekilde başarısız olur - DB'nin sağladığı AI PK'yi kullanın. – Plutonix

+0

Bunu dikkate aldığınızdan emin olun, ancak geri atılan bir hata yok. Hiçbir şey. sadece – Qwaiks

cevap

0

'oluşturma ExecuteScalar fonksiyon

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 

' oluşturma ExecuteNonQuery fonksiyonu

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 

nasıl olduğunu düşündüğü için Kimliğine id set '

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 
deyin
0

Ayrıca, catch bloğundaki SQLException istisnasının değiştirilmesine yardımcı olur. Örneğin.