2015-10-20 103 views
0

嘿,這是一項家庭作業,我只是無法弄清楚。任何幫助將是偉大的!VB.net數據綁定

創建一個名爲「people」的SQL Server數據庫,該數據庫具有下表。請使用Visual Studio 2012,並創建一個本地服務基於數據庫

people_id INT PK身份 姓VARCHAR(30) 姓氏VARCHAR(40)

創建一個Windows窗體程序,其中列出了ID,名字和姓氏的datagridview

在數據庫表中添加,更新和刪除功能(在使用命令對象和參數的代碼中,無嚮導)並反映datagridview中的更改。

這是我已經擁有的代碼。我可以運行我的程序,數據將顯示在datagridview中,但每當我添加更新或刪除數據時都不會發生任何事情。我不會拋出錯誤或任何東西。我不知道如何解決這個問題,請幫助!

Imports System.Data 
Imports System.Data.SqlClient 

Public Class Form1 

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    DataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect 
    Me.PeopleTableAdapter.Fill(Me.PeopleDataSet.people) 
End Sub 

Private Function getConnString() As String 
    Return My.Settings.PeopleConnectionString.ToString() 
End Function 

Private Sub ExitToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ExitToolStripMenuItem.Click 
    Me.Close() 
End Sub 

Private Function getConnection() As String 
    Return My.Settings.PeopleConnectionString.ToString() 
End Function 

Private Function getPeople(lName As String) As DataTable 
    Dim sql As String 
    Dim conn As SqlConnection 
    Dim cmd As SqlCommand 
    Dim da As SqlDataAdapter 
    Dim dt As New DataTable 
    Dim plName As New SqlParameter 
    plName.ParameterName = "@lName" 
    plName.Value = lName 
    sql = "select * from people where lName = @lName" 
    conn = New SqlConnection(getConnection()) 
    conn.Open() 
    cmd = New SqlCommand(sql, conn) 
    cmd.Parameters.Add(plName) 
    da = New SqlDataAdapter(cmd) 
    da.Fill(dt) 
    conn.Close() 
    Return dt 
End Function 

Private Sub AddPerson(fname As String, lname As String, person_ID As Integer) 
    Dim sql As String 
    Dim conn As SqlConnection 
    Dim cmd As SqlCommand 
    sql = "insert into people(fName, lName, person_ID) values(" 
    sql += "@fName, @lName, @person_ID)" 
    conn = New SqlConnection(getConnection()) 
    conn.Open() 
    cmd = New SqlCommand(sql, conn) 
    cmd.Parameters.AddWithValue("@fName", fname) 
    cmd.Parameters.AddWithValue("@lName", lname) 
    cmd.Parameters.AddWithValue("@person_ID", person_ID) 
    cmd.ExecuteNonQuery() 
    conn.Close() 
End Sub 

Private Sub btnADD_Click(sender As Object, e As EventArgs) Handles btnAdd.Click 
    Try 
     AddPerson(txtfName.Text, txtlName.Text, txtpID.Text) 
     MessageBox.Show("Added") 
    Catch ex As Exception 
     MessageBox.Show("Error" & ex.Message) 
    End Try 
End Sub 

Private Sub DataGridView1_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick 
    If DataGridView1.SelectedRows.Count > 0 Then 
     Dim dr As DataGridViewRow = DataGridView1.SelectedRows(0) 
     txtfName.Text = dr.Cells(1).Value.ToString() 
     txtlName.Text = dr.Cells(2).Value.ToString() 
     txtpID.Text = dr.Cells(0).Value.ToString() 
    End If 
End Sub 

Private Sub btnUpdate_Click(sender As Object, e As EventArgs) Handles btnUpdate.Click 
    Dim sql As String 
    Dim conn As SqlConnection 
    Dim cmd As SqlCommand 
    sql = "update people set [email protected], [email protected]" 
    sql += " where [email protected]_ID" 
    conn = New SqlConnection(getConnection()) 
    conn.Open() 
    cmd = New SqlCommand(sql, conn) 
    cmd.Parameters.AddWithValue("@fName", txtfName.Text) 
    cmd.Parameters.AddWithValue("@lName", txtlName.Text) 
    cmd.Parameters.AddWithValue("@person_ID", txtpID.Text) 
    cmd.ExecuteNonQuery() 
    conn.Close() 
End Sub 

Private Sub btnView_Click(sender As Object, e As EventArgs) Handles btnView.Click 
    Dim sql As String 
    Dim conn As SqlConnection 
    Dim cmd As SqlCommand 
    sql = "delete from people where [email protected]_ID" 
    conn = New SqlConnection(getConnection()) 
    conn.Open() 
    cmd = New SqlCommand(sql, conn) 
    cmd.Parameters.AddWithValue("@person_ID", txtpID.Text) 
    cmd.ExecuteNonQuery() 
    conn.Close() 

End Sub 
End Class 
+0

你怎麼確定「什麼都沒有發生」? – Plutonix

+0

不知道,在btnAdd動作中,我有一個if語句,假如有錯誤,我們會捕捉它。它正在通過這個很好的,但如果我檢查我的數據庫沒有實際添加。 –

+0

在你調用'ExecuteNonQuery'的'AddPerson'方法中。這會返回什麼價值。如果它不爲零,那麼數據將被保存,並且您在錯誤的時間查看錯誤的數據庫或正確的數據庫。我猜你已經添加了一個數據庫到你的項目中,並且它的「複製到輸出目錄」屬性沒有從默認值改變。是對的嗎?如果是這樣,那麼每次構建時都會用乾淨的工作數據庫覆蓋您的工作數據庫。 – jmcilhinney

回答

1

對不起,我沒有50的聲望。

對於任何連接,u無法預測數據庫是否正在運行,因此您必須鍵入try catch並將消息返回給用戶/支持,以讓他們知道在此問題中發生了什麼,對於vb中的Exception類型,請如下檢查: Introduction to Exception Handling in Visual Basic .NET

請使用

try{ 
    ' your action, connection or sql exe 
    ' example using your update event 
    Dim sql As String 
    Dim conn As SqlConnection 
    Dim cmd As SqlCommand 
    sql = "update people set [email protected], [email protected]" 
    sql += " where [email protected]_ID" 
    conn = New SqlConnection(getConnection()) 
    conn.Open() 
    cmd = New SqlCommand(sql, conn) 
    cmd.Parameters.AddWithValue("@fName", txtfName.Text) 
    cmd.Parameters.AddWithValue("@lName", txtlName.Text) 
    cmd.Parameters.AddWithValue("@person_ID", txtpID.Text) 
    cmd.ExecuteNonQuery() 
    conn.Close() 
}catch(Exception e){ 
    ' print the error message from here to let u know the function/ event error or not 
    ' check the exception message 
    ' MsgBox(e.ToString()) 
    conn.Close() 
} finally { 
    conn.Close() 
} 

檢查是按鈕事件是錯誤或不。

而且我一直使用

MsgBox("Alert") 

幫我檢查函數或事件已運行與否。

希望有所幫助。

還有一件事... 請輸入連接類,所以你不必在很多次輸入它。