DataAdapter ve DataSet nesnelerine form içindeki prosedürlerden erişmek istediğimiz için modül seviyesinde tanımlıyoruz. Dim dap1 As SqlDataAdapter Dim das1 As DataSet
Sub Populate() Northwind veritabanı bağlantısı Dim cnn1 As SqlClient.SqlConnection = _ New SqlConnection("Data Source=(local);" & _ "Integrated Security=SSPI;" & _ "Initial Catalog=northwind")
Yeni bir DataAdapter nesnesi oluşturuyor ve SelectCommand belirtiyoruz dap1 = New SqlDataAdapter _ ("SELECT ShipperID, CompanyName, Phone " & _ "FROM Shippers", _ cnn1)
Oluşturduğumuz DataAdapter nesnesi için UpdateCommand özelliğini belirtiyoruz dap1.UpdateCommand = _ New SqlCommand _ ("UPDATE Shippers " & _ "SET CompanyName = @CompanyName, " & _ "Phone = @Phone " & _ "WHERE ShipperID = @ShipperID", _ cnn1)
UpdateCommand özelliğinin kullanacağı iki parametreyi oluşturuyoruz dap1.UpdateCommand.Parameters.Add _ ("@CompanyName", SqlDbType.NVarChar, 40, _ "CompanyName") dap1.UpdateCommand.Parameters.Add _ ("@Phone", SqlDbType.NVarChar, 24, _ "Phone")
Hangi satırın güncelleneceğini ShipperID alanına göre belirleyeceğiz. Shippers tablosundaki orijinal ShipperID değerini kullanıyoruz Dim prm1 As SqlParameter = _ dap1.UpdateCommand.Parameters.Add _ ("@ShipperID", SqlDbType.Int) prm1.SourceColumn = "ShipperID" prm1.SourceVersion = DataRowVersion.Original
DataAdapter nesnesinin InsertCommand özelliğinde bir SQL ifadesi değil, oluşturduğumuz Stored Procedureu kullanacağız. Bu nedenle DataAdapter nesnesinin InsertCommand özelliğinin CommandType değerinin CommandType.StoredProcedure olarak değiştiriyor ve kullanacağımız SPnin adını belirtiyoruz dap1.InsertCommand = New SqlCommand("udpInsertANewShipper", cnn1) dap1.InsertCommand.CommandType = CommandType.StoredProcedure
Kullanacağımız SP için parametreleri belirtiyoruz dap1.InsertCommand.Parameters.Add _ ("@CompanyName", SqlDbType.NVarChar, 40, _ "CompanyName") dap1.InsertCommand.Parameters.Add _ ("@Phone", SqlDbType.NVarChar, 24, _ "Phone")
Hangi satırın güncelleneceğini yine ShipperID alanına göre belirliyoruz Dim prm2 As SqlParameter = _ dap1.InsertCommand.Parameters.Add _ ("@Identity", SqlDbType.Int, 0, "ShipperID") prm2.Direction = ParameterDirection.Output
DataAdapter nesnemizin DeleteCommand özelliğine değer veriyoruz dap1.DeleteCommand = _ New SqlCommand("DELETE " & _ "FROM Shippers " & _ "WHERE ShipperID = @ShipperID", cnn1)
Hangi satırın silineceğini yine Shippers tablosundaki ShipperID alanına göre belirleyeceğiz DeleteCommand özelliği için kullanacağımız tek parametre olan ShipperIDyi tanımlıyoruz Dim prm3 As SqlParameter = _ dap1.DeleteCommand.Parameters.Add _ ("@ShipperID", SqlDbType.Int) prm3.SourceColumn = "ShipperID" prm3.SourceVersion = DataRowVersion.Original
Bağlantıyı açıyoruz cnn1.Open()
DataAdapter nesnesini kullanarak Oluşturduğumuz DataSet içinde Shippers adlı DataTablea verileri aktarıyoruz. das1 = New DataSet dap1.Fill(das1, "Shippers")
DataSet nesnesi ile çalışmak için açık bir bağlantıya ihtiyacımız yok cnn1.Close() End Sub
### FORM YÜKLENİYOR ### Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Form yüklenirken verileri DataSete aktarıyoruz Populate()
Form üzerindeki metin kutularını ilgili alanlara bağlıyoruz TextBox1.DataBindings.Add _ (New Binding("Text", das1, "Shippers.ShipperID")) TextBox2.DataBindings.Add _ (New Binding("Text", das1, "Shippers.CompanyName")) TextBox3.DataBindings.Add _ (New Binding("Text", das1, "Shippers.Phone"))
textbox1i read-only hale getiriyoruz TextBox1.ReadOnly = True End Sub
### NAVİGASYON BUTONLARI ### Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click İlk kayıda gidiyoruz Me.BindingContext(das1, "Shippers").Position _ = Me.BindingContext(das1, "Shippers").Position.MinValue End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Bir önceki kayıda gidiyoruz Me.BindingContext(das1, "Shippers").Position -= 1 End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click Bir sonraki kayıda gidiyoruz Me.BindingContext(das1, "Shippers").Position += 1 End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click Son kayıda gidiyoruz Me.BindingContext(das1, "Shippers").Position _ = Me.BindingContext(das1, "Shippers").Position.MaxValue End Sub
### GÜNCELLE ### Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click DataTable içinde farklı bir satıra giderek yapılan değişikliği geçerli hale getiriyoruz If Me.BindingContext(das1, "Shippers").Position = 0 Then Me.BindingContext(das1, "Shippers").Position -= 1 Else Me.BindingContext(das1, "Shippers").Position -= 1 Me.BindingContext(das1, "Shippers").Position += 1 End If
DataAdapter nesnesinin Update metodunu kullanarak local verileri veri kaynağı ile güncelliyoruz dap1.Update(das1, "Shippers") End Sub
### TEMİZLE VE YENİ KAYIT EKLE ###
Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click Eklenen satırı daha sonradan güncelleyebilmek için İlk satıra gidiyoruz Me.BindingContext(das1, "Shippers").Position _ = Me.BindingContext(das1, "Shippers").Position.MinValue
Metin kutuları için gerçekleştirdiğimiz veri bağlantılarını kaldırıyoruz TextBox1.DataBindings.Clear() TextBox2.DataBindings.Clear() TextBox3.DataBindings.Clear()
Metin kutularını temizliyoruz TextBox1.Text = "" TextBox2.Text = "" TextBox3.Text = "" Artık uygulamamız yeni veri girişi için hazır durumda End Sub
Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click Shippers DataTableında yeni bir DataRow oluşturuyoruz ve değerlerini form üzerindeki metin kutularından alıyoruz Dim newRow As DataRow = das1.Tables("Shippers").NewRow() newRow("CompanyName") = TextBox2.Text newRow("Phone") = TextBox3.Text das1.Tables("Shippers").Rows.Add(newRow)
Eklenen satırı veri kaynağında geçerli hale getirmek için DataAdapter nesnesinin Update metodunu kullanıyoruz dap1.Update(das1, "Shippers")
Metin kutularından kaldırdığımız veri bağlantılarını yeniden oluşturuyoruz TextBox1.DataBindings.Add _ (New Binding("Text", das1, "Shippers.ShipperID")) TextBox2.DataBindings.Add _ (New Binding("Text", das1, "Shippers.CompanyName")) TextBox3.DataBindings.Add _ (New Binding("Text", das1, "Shippers.Phone"))
Eklenen son satırı görüntülemek için DataSet içindeki Shippers DataTableının son satırına gidiyoruz Me.BindingContext(das1, "Shippers").Position _ = Me.BindingContext(das1, "Shippers").Position.MaxValue End Sub
### SİL ### Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click DataSet içindeki Shippers tablosuna dayanan bir DataView oluşturuyoruz ve şu anda bulunulan ShipperID ile eşleşen row indexini buluyoruz Dim dav1 As DataView = _ New DataView(das1.Tables("Shippers")) dav1.Sort = "ShipperID" Dim rowIndex As Integer = _ dav1.Find(TextBox1.Text)
Bulunan satırı silinmek üzere işaretliyoruz das1.Tables("Shippers").Rows(rowIndex).Delete()
DataAdapter nesnesinin Update metodunu kullanarak yaptığımız işlemi SQL Server üzerinde ve DataSet üzerindeki Shippers tablosunda geçerli hale getiriyoruz dap1.Update(das1, "Shippers") End Sub |