VB.net

2016-03-19 26 views
3

erişim kayıt var kontrol etmek için gereken yardım Bir program üzerinde çalışıyorum ve bir müşteri kimliği girdiğinizde kayıt silecek bir bölüm yapıyorum. Mesele şu ki, eğer 30 no'lu numaraya girerseniz ve 30'luk bir sayı varsa, o id ile hiçbir kayıt olmasa bile hala devam edecek ve silinecektir. Kayıt olmadığını belirten bir mesaj göstermesini istiyorum, ancak aşağıdaki kod işe yaramayacak. Kafam çok karıştı!VB.net

Burada kodu buldum ve bunu tasarımıma uygulamaya çalışıyorum, ancak çalışmıyor. Gördüğünüz gibi orijinal kodumu etiketledim, ancak bu yeni kodu kullanmaya çalıştım. Yardım lütfen! çalıştırırken i almak

Benim hatadır: Kelime desteklenmez: 'sağlayıcı'

Kodu:

Private Sub Client(ByVal ans As String) 

    Dim con1 As SqlConnection = New SqlConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=.\Database.accdb") 
    If con1.State = ConnectionState.Closed Then con1.Open() 
    Dim theQuery As String = "SELECT * FROM tbl WHERE ID = ?" 
    Dim cmd1 As SqlCommand = New SqlCommand(theQuery, con1) 
    cmd1.Parameters.AddWithValue("?", OleDbType.VarChar).Value = ans 

    Using reader As SqlDataReader = cmd1.ExecuteReader() 
     If reader.HasRows Then 
      ' User exists delete 
      Dim cmd As SqlCommand = New SqlCommand("DELETE FROM tbl where ID = ?", con1) 
      cmd.ExecuteNonQuery() 
     Else 
      ' User does not exist throw message 

      MsgBox("Records dont exist", MsgBoxStyle.Information, "Add New Customer!") 

     End If 
    End Using 

    con1.Close() 
End Sub 
+2

Ben senin düşünce takdir: o satır olmaması durumunda dont silme sorgusu yürütün. Ancak, sonuç * başka bir * sorguyu çalıştırmanızdır, bu yüzden var olmadığı zaman sorgu sayımına girer, ancak var olduğunda * 2 * işlemiş olursunuz. A) 'cmd.ExecuteNonQuery()', etkilenen satır sayısını döndüren bir işlevdir, böylece bir tane olup olmadığını bilebilirsiniz. b) Eğer bir DataTable'dan çalışıyor olsaydınız, eğer mevcutsa (ama yine de gerekmez) bundan haberdar olabilirdiniz. – Plutonix

+3

SQL Server için oluşturulmuş sınıfları kullanarak bir MS-Access veritabanını güncelleştirmeye çalışıyorsunuz. Hayır, hiç işe yaramıyor. OleDb ad alanından sınıfları kullanın. (OleDbConnection, OleDbCommand vb ...) Elbette, @Plutonix'in dediği gibi, silmeyi planlıyorsanız kaydın var olup olmadığını kontrol etmeniz gerekmez. Sadece silmek ve sonuç geri ExecuteNonQuery – Steve

+0

dan Tamam, tüm bunları sildim, ama ben daha önce gibi OleDb için geri tüm değiştirirseniz, ama ben bunu yapmak nasıl bu yüzden satır var olup olmadığını kontrol eder? –

cevap

1

ı o kadar düzgün çalışmıyor bir ERİŞİM veritabanına bağlanmak için SQL ifadelerini kullanıyordu yana köklerime geri dönüp doğru OleDb ifadelerini kullanmam gerekiyordu. benim durumumda çalışılabilir kod aşağıdaki gibi olacaktır:

Private Sub DeleteClient(ByVal ans As String) 
    If con.State = ConnectionState.Closed Then con.Open() 

    cmd = New OleDbCommand 
    cmd.Connection = con 
    cmd.CommandText = "DELETE FROM tbl WHERE ID = ?" 
    cmd.Parameters.Add("?", OleDbType.VarChar).Value = ans 
    If cmd.ExecuteNonQuery() = 0 Then 
     MsgBox("ID Does not exist!", MsgBoxStyle.Critical, "Enter new customer ID!") 
    Else 
     MessageBox.Show("The entered ID has now been deleted.", "Deletion Complete!", MessageBoxButtons.OK, MessageBoxIcon.Information) 
    End If 
    cmd.ExecuteNonQuery() 
    con.Close() 
End Sub 
+2

Altta bir extra'cmd.ExecuteNonQuery() 'var ve cmd nesnesinin [OleDbException işlenmemiş ...] olduğunu göreceksiniz (http://stackoverflow.com/a/29187199/1070452). – Plutonix

+1

Yardımı Olursa Olumsuz Olun Her seferinde yeni bir bağlantıyı güvenli bir şekilde yaratabilirsiniz (bir kullanma bildirimi içine alın). Bağlantılar sizin için otomatik olarak havuzlanacaktır. Bu nedenle, bu her seferinde bir fiziksel bağlantı oluşturmaz. –