WinForm 中根据条件删除DataSet里的记录问题。

303 2005-03-23 02:23:28
如何根据条件如:年龄>50 这种条件删除DataSet里的记录???
...全文
184 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
redline 2005-04-01
  • 打赏
  • 举报
回复

DataRow[] adr = table.select("age>50)

foreach ( DataRow dr in adr)
dr.delete;

Sun_Ukyo 2005-04-01
  • 打赏
  • 举报
回复
楼上的大哥们究竟在说什么啊!?!
错误信息已经这样明显了! Deletecommand.connection 没有设置啊 !!!
当然先查查你的程序里有没 xxxxDataadapter.deletecommand.connection = xxxx 这句啊!
除非你是自动生成的dataAdapter,否则selectcommand updatecommand insertcommand deletecommand
全都需要设置connection啊...
^^
hamadou 2005-04-01
  • 打赏
  • 举报
回复
没有生成有效的deletecommand或者没有主键。可以在保证表含有主键的情况下,添加一句:
dim cmd as new sqlcommand("select * from test",conn)
dim sqldpr as new sqldataadapter(cmd)
Dim sqlb As New SqlCommandBuilder(sqldpr) ‘就是这句。
然后再操作!
可以使用
DataRow[] adr = table.select("age>50)

foreach ( DataRow dr in adr)
dr.delete;
的方法,这样更简单!
303 2005-04-01
  • 打赏
  • 举报
回复
To:redline(ToDo)
您的写法只删除了这些行,但是怎么保存到数据库里啊???因为我这里出错啊。

Sqldpr.Update(p)'行出错

出现错误信息:
未处理的“System.InvalidOperationException”类型的异常出现在 system.data.dll 中。

其他信息: 更新要求 DeleteCommand 具有连接对象。该 DeleteCommand 的 Connection 属性尚未初始化。
303 2005-03-31
  • 打赏
  • 举报
回复
To: dirt_cat(dc)
用SQLCommand我已经能实现了,现在用DataSet时为什么会出错啊?请帮忙解释一下啊???
dirt_cat 2005-03-31
  • 打赏
  • 举报
回复
为什么这么死心眼?DataSet虽然非常灵活,但是大规模操作就力不从心了。
像你的情况,推荐使用SQLCommand,2句话搞定。
1、连接
2、执行
303 2005-03-31
  • 打赏
  • 举报
回复
Sqldpr.Update(p)'行出错

出现错误信息:
未处理的“System.InvalidOperationException”类型的异常出现在 system.data.dll 中。

其他信息: 更新要求 DeleteCommand 具有连接对象。该 DeleteCommand 的 Connection 属性尚未初始化。
hamadou 2005-03-26
  • 打赏
  • 举报
回复
当然不用都循环了。
Dim tbl As DataTable = CType(Me.NotCResizegrid1.DataSource, DataTable)
Dim view As New DataView(tbl, "id>7", "id", DataViewRowState.CurrentRows)
Dim i As Integer
Dim r As DataRowView
For Each r In view
Dim row As DataRow = r.Row
row.Delete()
Next
Dim p As DataTable = tbl.GetChanges
If Not p Is Nothing Then
Sqldpr.Update(p)
End If
303 2005-03-23
  • 打赏
  • 举报
回复
比如有1万条记录也用循环啊????那10条呢(还有就是比如要删除的只有1条也 这样做???)
303 2005-03-23
  • 打赏
  • 举报
回复
这样是只选择啊?没有删除啊???
还有啊,这个结果集是显示在DataGrid里的,我不想重新Bind一下这个能不能实现???
hamadou 2005-03-23
  • 打赏
  • 举报
回复
做一个循环好了,每次都取得年龄这个字段的值,如果大于50,就直接将该行从dataset删除就是了,删除完再用update更新一下就可以了!
机器人 2005-03-23
  • 打赏
  • 举报
回复
像你这种情况只要这样:(age为datatable中的列名。)
Dim foundRows As DataRow() = dataSet.DataTables(0).Select("age>5")
机器人 2005-03-23
  • 打赏
  • 举报
回复
使用DataTable.Select()
Private Sub GetRowsByFilter()

Dim customerTable As DataTable
customerTable = new DataTable( "Customers" )

' Add columns
customerTable.Columns.Add( "id", GetType(Integer) )
customerTable.Columns.Add( "name", GetType(String) )

' Set PrimaryKey
customerTable.Columns("id").Unique = true
customerTable.PrimaryKey = new DataColumn() { customerTable.Columns("id") }

' add ten rows
Dim id As Integer
For id = 1 To 10
customerTable.Rows.Add( _
new object() { id, string.Format("customer{0}", id) } )
Next id
customerTable.AcceptChanges()

' add another ten rows
For id = 11 To 20
customerTable.Rows.Add( _
new object() { id, string.Format("customer{0}", id) } )
Next id

Dim strExpr As String
Dim strSort As String

strExpr = "id > 5"
' Sort descending by CompanyName column.
strSort = "name DESC"
' Use the Select method to find all rows matching the filter.
Dim foundRows As DataRow() = _
customerTable.Select( strExpr, strSort, DataViewRowState.Added )

PrintRows( foundRows, "filtered rows")

foundRows = customerTable.Select()
PrintRows( foundRows, "all rows")
End Sub
303 2005-03-23
  • 打赏
  • 举报
回复
这样的我会,我只想在DataSet里删除(这时还没有保存到数据库里)
hamadou 2005-03-23
  • 打赏
  • 举报
回复
Dim cmd As New SqlCommand("delete from test where age>50", conn)
Dim returncount As Integer
Try
conn.open()
returncount = cmd.ExecuteNonQuery()
Catch ex As Exception
MessageBox.Show(ex.Message)
Return
Finally
conn.close()
End Try
If returncount > 0 Then
MessageBox.Show("ok!")
End If
303 2005-03-23
  • 打赏
  • 举报
回复
同时还有一个小问题:
在DataGrid里单击某行(有多个字段)时,只有某一个列是可以编辑的而其它都是只读的(单击的位置不一定是那个可编辑的列,但是要求无论单击哪个列那个可编辑的字段都要获得焦点并且在编辑状态)
最好是能变个别的颜色,单击别的行时还要恢复成原来的颜色。

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧