我用dataSet.Tables("表名").Rows.Clear无法清空所有数据,再次写入数据是发生主键值重复的错误,难道这个表达式不对?
请高手指点一下,谢谢!

解决方案 »

  1.   

    ds.Tables["表名"].Clear();      //清除行和列
    ds.Tables["表名"].Rows.Clear(); //清除所有行
      

  2.   

    ds.Tables[0].Clear();
    这样就好了
      

  3.   

    如果是空表,下面代码完全正常。只是无法清除全部旧数据With myAdapter
                .SelectCommand.CommandText = "SELECT * FROM  "极限汇总"
                Try
                    .Fill(myDataSet, "极限汇总")
                Catch ex As Exception
                    MessageBox.Show(ex.Message, "系统提示", MessageBoxButtons.OK)
                End Try
            End With
            With myDataSet.Tables("极限汇总") '删除原有的所有数据失败            .Rows.Clear()
                .AcceptChanges()'此代码好像没用,应该是可有可无?
            End With        ’此处为重新填入数据的代码(略)         strInsert = "INSERT INTO " & N & "码定期极限汇总 VALUES (@ID,"
            For i As Integer = 3 To 55 
                strInsert &= "@A" & i & ","
            Next
            strInsert = strInsert.Substring(0, Len(strInsert) - 1) & ")"
            '..................Insert CMD.............................
            With myAdapter
                .InsertCommand = New OleDbCommand(strInsert, myConnection)
                With .InsertCommand.Parameters
                    .Add("@ID", OleDbType.Char, 20, "项目")
                    For i As Integer = 3 To 55
                        .Add("A@" & i, OleDbType.SmallInt, 6, "P" & i & "期")
                    Next
                End With
            End With
            '''''''''''''''''''Update 字符串''''''''''''''''''''''''
            strUpdate = "UPDATE 极限汇总 SET 项目=@ID,"
            For i As Integer = 3 To 55
                strUpdate &= "P" & i & "期=@A" & i & ","
            Next
            strUpdate = strUpdate.Substring(0, Len(strUpdate) - 1)
            '................Update CMD..................................
            With myAdapter
                .UpdateCommand = New OleDbCommand(strUpdate, myConnection)
                With .UpdateCommand.Parameters
                    .Add("@ID", OleDbType.Char, 20, "项目")
                    For i As Integer = 3 To 55
                        .Add("@" & i, OleDbType.SmallInt, 5, "P" & i & "期")
                    Next
                End With
            End With
            ''''''''''''''Delete 字符串'''''''''''''''''''''''''''''''
            strDelete = "DELETE FROM 极限汇总 WHRER 项目=@ID"
            myAdapter.DeleteCommand = New OleDbCommand(strDelete, myConnection)
            '............Delete CMD...................................
            Dim IdParm As OleDbParameter = myAdapter.DeleteCommand.Parameters.Add("@ID", OleDbType.Char, 20, "项目")
            IdParm.SourceVersion = DataRowVersion.Original
            ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
            Try
                myAdapter.Update(myDataSet, "极限汇总")
            Catch ex As Exception
                MessageBox.Show(ex.Message, "系统提示", MessageBoxButtons.OK)
            End Try
      

  4.   

    With myAdapter
                .SelectCommand.CommandText = "SELECT * FROM  "极限汇总"
                Try
                    .Fill(myDataSet, "极限汇总")
                Catch ex As Exception
                    MessageBox.Show(ex.Message, "系统提示", MessageBoxButtons.OK)
                End Try
            End With
            With myDataSet.Tables("极限汇总") '删除原有的所有数据失败
                .Rows.Clear()
                .AcceptChanges()'此代码好像没用,应该是可有可无?
            End With        ’此处为重新填入数据的代码(略)         strInsert = "INSERT INTO " & N & "码定期极限汇总 VALUES (@ID,"
            For i As Integer = 3 To 55 
                strInsert &= "@A" & i & ","
            Next
            strInsert = strInsert.Substring(0, Len(strInsert) - 1) & ")"
            '..................Insert CMD.............................
            With myAdapter
                .InsertCommand = New OleDbCommand(strInsert, myConnection)
                With .InsertCommand.Parameters
                    .Add("@ID", OleDbType.Char, 20, "项目")
                    For i As Integer = 3 To 55
                        .Add("A@" & i, OleDbType.SmallInt, 6, "P" & i & "期")
                    Next
                End With
            End With
            '''''''''''''''''''Update 字符串''''''''''''''''''''''''
            strUpdate = "UPDATE 极限汇总 SET 项目=@ID,"
            For i As Integer = 3 To 55
                strUpdate &= "P" & i & "期=@A" & i & ","
            Next
            strUpdate = strUpdate.Substring(0, Len(strUpdate) - 1)
            '................Update CMD..................................
            With myAdapter
                .UpdateCommand = New OleDbCommand(strUpdate, myConnection)
                With .UpdateCommand.Parameters
                    .Add("@ID", OleDbType.Char, 20, "项目")
                    For i As Integer = 3 To 55
                        .Add("@" & i, OleDbType.SmallInt, 5, "P" & i & "期")
                    Next
                End With
            End With
            ''''''''''''''Delete 字符串'''''''''''''''''''''''''''''''
            strDelete = "DELETE FROM 极限汇总 WHRER 项目=@ID"
            myAdapter.DeleteCommand = New OleDbCommand(strDelete, myConnection)
            '............Delete CMD...................................
            Dim IdParm As OleDbParameter = myAdapter.DeleteCommand.Parameters.Add("@ID", OleDbType.Char, 20, "项目")
            IdParm.SourceVersion = DataRowVersion.Original
            ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
            Try
                myAdapter.Update(myDataSet, "极限汇总")
            Catch ex As Exception
                MessageBox.Show(ex.Message, "系统提示", MessageBoxButtons.OK)
            End Try
      

  5.   

    只能无视了,我的代码本来就是dataSet.Tables("表名").Rows.Clear,可是并没有删除所有数据行
      

  6.   

    VB.NET 发到 C#.NET ,语法不一样。
      

  7.   

    dt.clear();
    dataSet.Tables("表名").Clear();
      

  8.   

    1.关于"dataSet.Tables("表名").Rows.Clear"
    没有问题,楼主可以测试一下代码.
            Dim ds As DataSet = New DataSet()
            Dim dt As DataTable = New DataTable()
            Dim row As DataRow = dt.NewRow
            dt.TableName = "TEST"
            dt.Columns.Add("A")
            For i As Integer = 0 To 10
                row = dt.NewRow
                row("A") = i
                dt.Rows.Add(row)
            Next
            ds.Tables.Add(dt)
            ds.Tables("TEST").Rows.Clear()        Debug.Print(ds.Tables("TEST").Rows.Count)  //0,被清空了.        For i As Integer = 0 To 10
                row = dt.NewRow
                row("A") = i
                dt.Rows.Add(row)
            Next        Debug.Print(ds.Tables("TEST").Rows.Count) //11,重新填充了.
    2.关于"  .AcceptChanges()'此代码好像没用,应该是可有可无?"当对 DataSet 调用 AcceptChanges 时,任何仍处于编辑模式的 DataRow 对象都将成功结束其编辑。每个 DataRow 的 RowState 属性也会更改;Added 和 Modified 行变为 Unchanged,而 Deleted 行则被移除。