【问题标题】:Adding New Row to DataSet DataTable向 DataSet DataTable 添加新行
【发布时间】:2014-12-26 23:29:05
【问题描述】:

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

    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 INTO `tUserDetails` (`fUserID`, `fPassword`, `fPin`, `fFirstName`, `fLastName`, `fEmailAddress`) VALUES (?, ?, ?, ?, ?, ?)

但我不确定如何编码?

有什么帮助吗?

------------------------------编辑----- ----------------------------------

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

        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 (?, ?, ?, ?, ?, ?)

但是,它仍然根本不起作用,我很困惑。数据库没有任何反应。

【问题讨论】:

    标签: database vb.net datatable dataset


    【解决方案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!

    【讨论】:

    • 不,不,不。你忽略了我之前说的。使用 DB Direct 方法或使用DataTable。不要同时使用两者。我已经向您展示了该做什么,那么仅仅做到这一点有多难?第五行使用 DB Direct 将记录直接插入数据库。这就是你所需要的。去掉第 1、3、4 和 6 行。然后你会得到我一开始告诉你要做的事情。
    【解决方案2】:

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

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

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

    如果您要使用键入的DataTable,请正确使用它,如下所示:

    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
    

    使用类型化 DataSet 的全部意义在于不必执行诸如通过字符串识别列之类的操作,因此请使用正确的方法和属性。最后,不是最后的Update 调用,它实际上将更改从DataTable 保存到数据库。否则,表适配器的意义何在?

    【讨论】:

    • 干杯。我之前试过第二个。问题是我没有做更新部分。就像我向表适配器添加了一个插入命令一样,ta.Insert(x,y,z) 做了但忘记了更新语句
    • 不,如果您调用Insert,那么您只需这样做,因为它直接影响数据库,因此它被称为 DB Direct 方法。只有当您对DataTable 进行更改时,您才需要调用Update,因为正是Update 方法将更改从DataTable 保存回数据库。
    猜你喜欢
    • 2012-10-03
    • 2013-07-02
    • 2013-11-02
    • 2014-09-11
    • 2014-03-19
    • 2010-12-08
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多