2015-10-20 98 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") 

帮我检查函数或事件已运行与否。

希望有所帮助。

还有一件事... 请输入连接类,所以你不必在很多次输入它。