将新行添加到DataSet DataTable

时间:2014-12-26 23:29:06

标签: database vb.net datatable dataset

所以我有一个问题。我有一个MS Access .mdb数据库文件作为我项目中的DataSet。我正在尝试向数据集中添加一个新行(记录)以保存到数据库中。请在下面找到我正在使用的代码:

    Function CreateUser(userId As String, pwd As String, pin As String, fnam As String, lnam As String, email As String) As Boolean
    Using ta As New dbUsersDataSetTableAdapters.tUserDetailsTableAdapter
        Using dt As New dbUsersDataSet.tUserDetailsDataTable
            Dim newRow As DataRow = dt.NewRow
            newRow("fUserID") = userId
            newRow("fPassword") = pwd
            newRow("fPin") = pin
            newRow("fFirstName") = fnam
            newRow("fLastName") = lnam
            newRow("fEmailAddress") = email
            dt.Rows.Add(newRow)
            Return True
        End Using
    End Using
End Function

我也尝试过使用表适配器的Insert查询:

INSERT INTO `tUserDetails` (`fUserID`, `fPassword`, `fPin`, `fFirstName`, `fLastName`, `fEmailAddress`) VALUES (?, ?, ?, ?, ?, ?)

但我不确定如何编码?

任何帮助?

----------------------------------------- EDIT ----- ----------------------------------

好的,这就是我现在正在尝试的内容:

        Using ds As New dbUsersDataSet
    Using ta As New dbUsersDataSetTableAdapters.tUserDetailsTableAdapter
            ta.InsertQuery(userId, pwd, pin, fnam, lnam, email)
            ta.Update(ds)
            Return True
        End Using
    End Using

我也试过这个:

        Using ta As New dbUsersDataSetTableAdapters.tUserDetailsTableAdapter
            ta.InsertQuery(userId, pwd, pin, fnam, lnam, email)
            Return True
        End Using

这里是TableAdapter的INSERT查询:

INSERT INTO `tUserDetails` (`fUserID`, `fPassword`, `fPin`, `fFirstName`, `fLastName`, `fEmailAddress`) VALUES (?, ?, ?, ?, ?, ?)

然而,它仍然根本不起作用,我很困惑。数据库没有任何事情发生。

2 个答案:

答案 0 :(得分:1)

好的,所以我解决了我的问题:

        Using ds As New dbUsersDataSet
        Using ta As New dbUsersDataSetTableAdapters.tUserDetailsTableAdapter
            Using dt As New dbUsersDataSet.tUserDetailsDataTable
                ta.Fill(dt)
                ta.InsertQuery(userId, pwd, pin, fnam, lnam, email)
                ta.Update(dt)
                Return True
            End Using
        End Using
    End Using

我很确定这是因为我忽视了Fill方法。

无论如何,欢呼jmcilhinney为你提供帮助!

答案 1 :(得分:0)

您拥有的代码是向DataTable添加一行,虽然它的行为不正确,但它并没有将DataTable的内容保存回数据库。

首先,如果您希望能够添加单行,那么您应该在表适配器上启用DB Direct命令(如果尚未添加)。您可以在DataSet设计器中配置它。这样做是为表适配器添加InsertUpdateDelete方法,允许您直接在数据库中直接插入,更新或删除记录,而无需使用{ {1}}。代码看起来像这样:

DataTable

如果您要使用键入的Using ta As New dbUsersDataSetTableAdapters.tUserDetailsTableAdapter ta.Insert(userId, pwd, pin, fnam, lnam, email) End Using ,请正确使用它,这将是这样的:

DataTable

使用类型化DataSet的全部意义在于不必按字符串标识列,因此请使用正确的方法和属性。最后,不是最后的Using ta As New dbUsersDataSetTableAdapters.tUserDetailsTableAdapter Using dt As New dbUsersDataSet.tUserDetailsDataTable Dim newRow = dt.NewUserDetailsRow() newRow.fUserID = userId newRow.fPassword = pwd newRow.fPin = pin newRow.fFirstName = fnam newRow.fLastName = lnam newRow.fEmailAddress = email dt.AddUserDetailsRow(newRow) ta.Update(dt) End Using End Using 调用,这实际上是将Update中的更改保存到数据库中。否则,表适配器有什么意义呢?