从DataSet更新数据库

时间:2010-04-27 02:11:15

标签: .net sql-server

我无法使用DataSet从我的代码更新数据库。我正在使用SQL Server 2008和Visual Studio 2008.这是我到目前为止所做的。

我在SQL Server中创建了一个名为MyTable的表,它有两列:id nchar(10)和name nchar(50)。

然后我在我的VB.net项目中创建了一个数据源,该数据源由该表组成,使用数据集向导并调用此数据集MyDataSet。

我在点击按钮上运行以下代码:

    Try
        Dim myDataSet As New MyDataSet
        Dim newRow As MyDataSet.MyTableRow = myDataSet.MyTable.NewMyTableRow
        newRow.BeginEdit()
        newRow.id = "1"
        newRow.name = "Alpha"
        newRow.EndEdit()
        myDataSet.MyTable.AddMyTableRow(newRow)
        myDataSet.AcceptChanges()
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try

当我运行它并检查SQL Server中的行时,它返回0行

我错过了什么?如何将数据集中的这些行/保存更改添加到数据库?我见过其他使用TableAdapter的例子,但我认为我不想这样做,我想我应该能够使用DataSet来实现这一点。我错了吗?

非常感谢帮助!

2 个答案:

答案 0 :(得分:3)

您必须在DataAdapter()

上调用Update方法
MyDataAdapter.Update(MyDataSet)

当然,您必须使用必要的命令创建DataAdapter或TableAdapter,以将更改写入数据库。

DataSet是内存/断开连接的“数据库”。

DataAdapter是与DataBase通信的小部件。对于不同的数据库有不同的DataAdapter,对于SQL Server,使用SqlDataAdapter。

调用AcceptChanges会将所有更改标记为已更改,因此当您使用dataadapter更新数据库时,更改将不会写入数据库。

如果要将数据保存到数据库(ADO.NET方式),必须使用DataAdapter或TableAdapter。

答案 1 :(得分:2)

请勿致电AcceptChanges,这只会重置DataTable上的所有更改跟踪信息,以表明这些行是最新的。

DataSet本身不进行任何数据库交互。您需要使用正确的DataAdapter(在这种情况下是您说不想使用的TableAdapter)并通过调用Update来保存表格。