下午我在学习使用用 DataAdapter 和 DataSet 对象使用更新一个SQL数据库的表的时候,系统总是提示 “当传递具有新行的 DataRow 集合时,更新要求有效的 InsertCommand。”后来才知道,原来:

DataAdapter 对象在数据发生变化的时候,并不能自动产生数据库系统所需要的 Transact-SQL 语句,如果不使用 CommandBuilder 而使用 Update 方法,这是不会成功的。而 CommandBuilder 对象能为单个表的数据改变自动产生 Transact-SQL 语句。


        Try

            ' 连接字串和SQL语句;
            Dim strConnectionString As String = "database=tempdb;user id=sa;pwd=sa;server=localhost"
            Dim strSQLCommand As String = "select * from myTempTable"

            ' 创建数据连接;
            Dim conDataConnection As New SqlConnection
            conDataConnection.ConnectionString = strConnectionString
            conDataConnection.Open()

            ' 创建 SQLCommand;
            Dim cmdSQLCommand As New SqlCommand(strSQLCommand, conDataConnection)

            ' 创建 DataAdapter;
            Dim daDataAdapter As New SqlDataAdapter(strSQLCommand, conDataConnection)

            ' 创建 CommandBuilder;
            Dim cb As New SqlCommandBuilder(daDataAdapter)

            ' 创建 DataSet;
            Dim dsDataSet As New DataSet

            daDataAdapter.Fill(dsDataSet, "myTempTable")

            ' 创建新行;
            Dim drDataRow As DataRow
            drDataRow = dsDataSet.Tables("myTempTable").NewRow()
            drDataRow.Item("Field1") = 987
            drDataRow.Item("Field2") = "789"

            ' 插入;
            dsDataSet.Tables("myTempTable").Rows.Add(drDataRow)

            ' 更新;
            daDataAdapter.Update(dsDataSet, "myTempTable")

            ' 绑定, 显示;
            DataGrid1.DataSource = dsDataSet.Tables("myTempTable").DefaultView
            DataGrid1.DataBind()

        Catch ex As Exception
            Response.Write(Err.Description)

        End Try

 posted on 2004-10-20 20:47  一切由.NET开始  阅读(1535)  评论(1)    收藏  举报