如何在asp.net中向数据库添加记录

时间:2012-01-31 12:19:58

标签: asp.net .net database vb.net ms-access

我目前有一个Microsoft Access数据库,可通过ASP .NET前端访问。我正在尝试向表中添加一行,但这似乎不起作用,我正在使用的代码如下所示。

    Sub prcChoose()
        Dim sql As String
        Dim da As New OleDbDataAdapter
        Dim conn As New OleDbConnection
        Dim comm As New OleDbCommand
        Dim cb As New OleDbCommandBuilder(da)
        ds = New DataSet

        conn = New OleDbConnection(ConfigurationManager.ConnectionStrings("dbConnection").ConnectionString)
        sql = "SELECT * FROM ParentPreference"

        conn.Open()
        da = New OleDbDataAdapter(sql, conn)
        da.Fill(ds, "Choice")
        Dim NewRow As Data.DataRow = ds.Tables("Choice").NewRow()
        NewRow.Item(0) = txtUser.Text
        NewRow.Item(1) = dropdown.SelectedValue
        ds.Tables("Choice").Rows.Add(NewRow)
        ***da.UpdateCommand = cb.GetUpdateCommand()***
        da.Update(ds, "Choice")

    End Sub

我会收到不同的错误消息,具体取决于是否包含3个星号所包含的行。没有它,我收到“更新需要一个有效的InsertCommand,当传递带有新行的DataRow集合。”时,我收到“ DataAdapter.SelectCommand属性需要初始化。”我花了好几个小时试图弄清楚我哪里出错了,但我没有取得任何成功。

提前致谢!

编辑:根据Casey的建议,我添加了以下代码行:

    da.InsertCommand = cb.GetInsertCommand
    da.DeleteCommand = cb.GetDeleteCommand

我在上面用星号括起的代码下方添加了这些行。但我仍然收到相同的错误消息。 需要初始化DataAdapter.SelectCommand属性。以下行发生此错误

da.InsertCommand = cb.GetInsertCommand

1 个答案:

答案 0 :(得分:4)

从内存中拍摄,因为我目前无法访问Visual Studio来检查您的代码,但是..

数据适配器需要多个命令才能更新/删除/插入Access表。您似乎使用了Command Builder来构建Update命令,Data Adapter将用于需要更新的行。此外,还需要使用Command Builder来构建Insert和Delete命令:

da.InsertCommand = cb.GetInsertCommand
da.DeleteCommand = cb.GetDeleteCommand

“更新需要有效的InsertCommand”错误告诉您数据适配器不知道如何将您在数据表中创建的新行插入Access数据库,因为您还没有告诉它使用什么插入命令。插入上面的两行应该可以解决这个问题。

数据适配器上的InsertCommand,DeleteCommand和UpdateCommand只是数据适配器用于更新基础数据源的SQL语句,在本例中为Access。您可以手动提供这些命令,也可以将CommandBuilder用于此类简单案例。

当您告诉DataAdapter更新时,它会遍历数据表,并且每行确定是否已添加,删除或更新该行。然后,它会查找执行SQL语句的相应命令以进行插入,删除或更新。如果您没有提供命令,则会收到您看到的错误。

编辑:这是您的代码已更新,以修复“SelectCommand not initialized”错误以及其他一些问题:

Sub prcChoose()

    'Always create disposable objects with a Using statement.
    'This ensures that the objects will be disposed properly.
    Using conn As New OleDbConnection(ConfigurationManager.ConnectionStrings("dbConnection").ConnectionString), _
        da As New OleDbDataAdapter("SELECT * FROM ParentPreference", conn), _
        cb As New OleDbCommandBuilder(da)

        'Open connection.
        conn.Open()

        'Create new dataset.
        Dim ds As New DataSet

        'Fill dataset.
        da.Fill(ds, "Choice")

        'Create new row and populate it.
        Dim NewRow As Data.DataRow = ds.Tables("Choice").NewRow()
        NewRow.Item(0) = txtUser.Text
        NewRow.Item(1) = dropdown.SelectedValue

        'Add row to Choice table.
        ds.Tables("Choice").Rows.Add(NewRow)

        'Use command builder to generate Update, Insert, Delete commands for DataAdapter.
        da.UpdateCommand = cb.GetUpdateCommand
        da.InsertCommand = cb.GetInsertCommand
        da.DeleteCommand = cb.GetDeleteCommand

        'Use dataadapter to update datasource.
        da.Update(ds, "Choice")


    End Using

End Sub