-1

所以我试图用“保存”按钮更新一个数据库和一个datagridview,我在我的程序的前面部分使用了这个代码的另一个函数,但是这里它给了我一个语法错误。谁能告诉我在哪里?我不明白它在哪里。

这部分代码在我添加员工时有效。

Private Sub AddEmployee_Click(sender As Object, e As EventArgs) Handles AddEmployee.Click
    Dim Msg, Style, Title, Response, mystring
    Msg = "Do you want to add employee ?"
    Style = vbYesNo + vbCritical + vbDefaultButton2
    Title = "MsgBox Demonstration"
    ' Display message.
    Response = MsgBox(Msg, Style, Title)
    If Response = vbYes Then
        TableAdapterManager.UpdateAll(Database13DataSet)
        con.Open()
        cmd.CommandType = System.Data.CommandType.Text
        cmd.CommandText = "Insert INTO dbo.employees (EmpID, LastName, FirstName, AddressHalf, SSN, VehNumb, Certification)  values ('" + EmpID.Text + "' , '" + LastName1.Text + "', '" + FirstName1.Text + "', '" + AddyHalf1.Text + "', '" + SocialNum.Text + "', '" + VehNumb.Text + "', '" + Certification1.Text + "')"
        cmd.Connection = con
        cmd.ExecuteNonQuery()
        MessageBox.Show("Employee Added")
    Else
        mystring = True
        MessageBox.Show("Cancelled")
    End If
    con.Close()

这部分代码是不起作用的部分。我认为这与我尝试更新表格的编码有关,但我无法弄清楚。

    Private Sub SaveBtn_Click(sender As Object, e As EventArgs) Handles SaveBtn.Click
        Dim Msg, Style, Title, Response, mystring
        Msg = "Do you want to update employee ?"
        Style = vbYesNo + vbCritical + vbDefaultButton2
        Title = "MsgBox Demonstration"
        ' Display message.
        Response = MsgBox(Msg, Style, Title)
        If Response = vbYes Then
            TableAdapterManager.UpdateAll(Database13DataSet)
            con.Open()
            cmd.CommandType = System.Data.CommandType.Text
            cmd.CommandText = "Update employees SET (EmpID, LastName, FirstName, AddressHalf, SSN, VehNumb, Certification)  Where ( ModEmpID.Text , ModLastName.Text , ModFirstName.Text,  ModAddy.Text ,  ModSSN.Text , ModVehNum.Text , ModCerts.Text )"
            cmd.Connection = con
            cmd.ExecuteNonQuery()
            MessageBox.Show("Employee Added")
            con.Close()
        Else
            mystring = True
            MessageBox.Show("Cancelled")
        End If
        con.Close()
    End Sub

    Public Sub Updating()
        Me.EmployeesTableAdapter.Fill(Me.Database13DataSet.Employees)
    End Sub
End Class
4

2 回答 2

1
If Response = vbYes Then
    TableAdapterManager.UpdateAll(Database13DataSet)
    con.Open()
    cmd.CommandType = System.Data.CommandType.Text
    cmd.CommandText = "Insert INTO dbo.employees (EmpID, LastName, FirstName, AddressHalf, SSN, VehNumb, Certification)  values ('" + EmpID.Text + "' , '" + LastName1.Text + "', '" + FirstName1.Text + "','" + AddyHalf1.Text + "', '" + SocialNum.Text + "', '" + VehNumb.Text + "', '" + Certification1.Text + "')"
    cmd.Connection = con
    cmd.ExecuteNonQuery()
    MessageBox.Show("Employee Added")
Else

不。

它不是那样工作的;它专门用于那样工作


你有桌面适配器;在你的任何代码中根本不应该有or 、 select 、 delete 或任何其他类型的 SQL"INSERT INTO.."UPDATE ..

让我们快速回归基础

在某些时候,您已经遵循了一些教程,这些教程可能让您做了一些导致 XyzDataSet.xsd 文件出现在您的项目中的操作。里面有数据表和表格适配器,整个东西看起来有点像数据库。

它是数据库的本地表示;表适配器将数据从数据库下载到数据集的数据表中;您操作数据/显示用户/更改它/添加到它/从中删除.. ..当您完成后,您调用 tableadapter 将其推回数据库。

TableAdapters 知道如何完成您在代码中添加的所有内容;您可以打开 XyzDataSet.Designer.vb 文件并查看它;它有数千行代码用于拉取和推送数据库

如果您认为“我实际上没有工具来下载所有名为 smith 的员工”,那么您将转到您的数据集,找到员工表适配器,右键单击它并添加查询.. SELECT * FROM employees WHERE name like @name,你把它叫做 FillByName,你完成了向导,突然你employeeTableAdapter有了一个叫做 FillByName 的新方法,它接受一个数据表和一个字符串名称。你称之为eta.FillByName(myXyzDataset.Employees, "Smith")- 它为你做了所有的数据库位,命令,参数,连接..

您想添加新员工;再一次,这很容易,tableadapter 会保存它,你只需要将新的 emp 放入本地数据表中:

Dim emp = myXyzDataSet.Employees.NewEmployeeRow()

emp.Name = "John Smith"
emp.Age = 23
...

myXyzDataSet.Employees.AddEmployeeRow(emp)

如果您知道所有值,则有一条捷径:

myXyzDataSet.Employees.AddEmployeeRow("John Smith", 23, ...)

无论哪种方式,您的本地数据缓存数据表现在都包含需要保存的新记录。这是通过以下方式完成的:

employeeTableAdapter.Update(myXyzDataSet.Employees)

TA 将查看该行并查看它是最近添加的。它将运行它内置的 INSERT 命令 - 你不需要这样做

如果您编辑了一行:

Dim r = myXyzDataSet.Employees(0) 'first one.. or maybe you'll loop and find John Smith, or use the Find method..

r.Name = "Joe Smith"

然后该行知道它已被更改。tableadapter 也会知道它,并且当您调用 Update 时(将其想象为 Save,它不仅仅是用于 SQL UPDATE),它将触发内置的 UPDATE 命令并将名称更改保存回 DB。

DELETE 的情况类似。

TableAdapter 是拉取和推送数据的设备。如果您想将自定义 SQL 添加到您的应用程序,请将它们添加到 TA 并调用方法。不要直接使用 db 命令填充代码

于 2021-08-01T21:09:41.113 回答
0

我终于在一个小时后弄明白了...

Private Sub SaveBtn_Click(sender As Object, e As EventArgs) Handles SaveBtn.Click
    Dim Msg, Style, Title, Response, mystring
    Msg = "Do you want to update employee ?"
    Style = vbYesNo + vbCritical + vbDefaultButton2
    Title = "MsgBox Demonstration"
    ' Display message.
    Response = MsgBox(Msg, Style, Title)
    If Response = vbYes Then
        DataGridView1.CurrentRow.Cells(0).Value = Me.ModEmpID.Text
        DataGridView1.CurrentRow.Cells(1).Value = Me.ModLastName.Text
        DataGridView1.CurrentRow.Cells(2).Value = Me.ModFirstName.Text
        DataGridView1.CurrentRow.Cells(3).Value = Me.ModAddy.Text
        DataGridView1.CurrentRow.Cells(4).Value = Me.ModSSN.Text
        DataGridView1.CurrentRow.Cells(5).Value = Me.ModVehNum.Text
        DataGridView1.CurrentRow.Cells(6).Value = Me.ModCerts.Text

        For i As Integer = 0 To DataGridView1.Rows.Count - 1
            Dim cmd4 As New SqlCommand("", con)
            cmd4.CommandText = "update Employees set LastName ='" & DataGridView1.Rows(i).Cells(1).Value & "' , FirstName= '" & DataGridView1.Rows(i).Cells(2).Value & "' , AddressHalf = '" & DataGridView1.Rows(i).Cells(3).Value & "' , SSN = '" & DataGridView1.Rows(i).Cells(4).Value & "' , VehNumb = '" & DataGridView1.Rows(i).Cells(5).Value & "' , Certification = '" & DataGridView1.Rows(i).Cells(6).Value & "'Where EmpID = '" & DataGridView1.Rows(i).Cells(0).Value & "'  "
            con.Open()
            cmd4.ExecuteNonQuery()
            con.Close()
        Next
        MessageBox.Show("Employee Updated")

    Else
        mystring = True
    MessageBox.Show("Cancelled")
    End If
    con.Close()
End Sub
于 2021-08-03T14:27:15.420 回答