关于记录更新问题vb.net

rmini 2011-08-09 04:14:36
假设数据库中有一个表tb1有40个字段,假设现在在窗体上用40个textbox绑定显示出来进行修改,其实我只是修改了其中一个或者两个字段的值,难道我的更新语句都得要这样写:update tb1 set ziduan1=textbox1,ziduan2=textbox2,ziduan3=textbox3,ziduan4=textbox4,......一直这样写40个吗?这种情况各位都是如何处理?用什么办法最好?
...全文
114 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
lhblxm 2011-08-31
  • 打赏
  • 举报
回复
[ ] 只是为了防止sql语句中 表的字段 使用 sqlserver的关键字而对字段加一括号,就好比
在SQLSERVER2008中 表的右键菜单 "选择前1000行"时,在查询分析器中显示的语句中所有的字段
都被[]括起来了

lhblxm 2011-08-31
  • 打赏
  • 举报
回复
如果你能做到以下几步,对ado.net就算入门了
1\要有一个数据库,而且能建立数据库连接
2\建立一个数据适配器,一个数据集(当然也可以是一个内存表),然后填充数据集或(内存表)
dim ds as new dataset 或dim tb as new datatable
Dim adapter As SqlDataAdapter = New SqlDataAdapter( _
"SELECT * FROM dbo.Customers", connection)

adapter.fill(ds,"Table1")或 adapter.fill (tb)

3\最简单的测试是在窗体上添加一个datagridview控件
4\让datagridview控件绑定数据表
datagridview1.datasource=ds.tables("Table1") 或datagridview1.datasource=tb
5\ 如果能看到数据库中表的内容,就成功了一小半
6\datagridview控件提供了一些数据编辑的功能,你可以增加或修改数据,其实只是改了数据集中的
7\你所做的修改并没有保存,要提交所做的更改,必须使用据修改语句,你可以一行一行的用循环提交你所
做的修改,当然也可以使用ADO.NET提供的批量修改方法,从ADO转过来的人可能会使用前者,而一个对数据操作
熟练的人会使用后者
8\使用commandBuilder类对数据适器生成增,删,改命令,当然也可以手动生成增,删,改命令,而且功能要比自动生成的要强大得多,如果你对ADO.NET的理解理深该的话
Dim builder As SqlCommandBuilder = New SqlCommandBuilder(adapter)
builder.QuotePrefix = "["
builder.QuoteSuffix = "]"

9\提交修改
adapter.update(ds) 也可以是 adapter.update(ds.tables("Table1")) 也可以是
adapter.update(tb)
10\如果是文本框,那只是修改表中的一行,原理一样,先进行数据绑定,
自己多试试,多看看MSDN上的关于ADO.NET的说明




rmini 2011-08-31
  • 打赏
  • 举报
回复
嗯,谢谢,第七步之前我都没问题,
builder.QuotePrefix = "["
builder.QuoteSuffix = "]"
这两句的那个[ 和 ]是什么意思?网上搜了一下如下:

'声明

Public Overrides Property QuotePrefix As String
'用法

Dim instance As SqlCeCommandBuilder
Dim value As String

value = instance.QuotePrefix

instance.QuotePrefix = value

没看到过实际例子,理解不透彻。
rmini 2011-08-30
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 lhblxm 的回复:]
VB.NET code

' Assumes that connection is a valid SqlConnection object
' inside of a Using block.
Dim adapter As SqlDataAdapter = New SqlDataAdapter( _
"SELECT * FROM dbo.Customers", connectio……
[/Quote]

还是没有找到使用方法,能不能给个具体例子??
rmini 2011-08-14
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 lhblxm 的回复:]

VB.NET code

' Assumes that connection is a valid SqlConnection object
' inside of a Using block.
Dim adapter As SqlDataAdapter = New SqlDataAdapter( _
"SELECT * FROM dbo.Customers", connection)
……
[/Quote]

谢谢lhblxm !这个我还没有用过,我试试看
lhblxm 2011-08-14
  • 打赏
  • 举报
回复

' Assumes that connection is a valid SqlConnection object
' inside of a Using block.
Dim adapter As SqlDataAdapter = New SqlDataAdapter( _
"SELECT * FROM dbo.Customers", connection)
Dim builder As SqlCommandBuilder = New SqlCommandBuilder(adapter)
builder.QuotePrefix = "["
builder.QuoteSuffix = "]"


然后调用adapter的update方法就可以实现对数据库的增删改操作
rmini 2011-08-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lhblxm 的回复:]

一直这样写是对的,这样最简单,只要写一次就行.
如果楼主觉得这样很麻烦,ADO.NET提供了commandBuilder类,可以自动生成修改语句。
[/Quote]

commandBuilder类,可以自动生成修改语句,我没用过,能不能给个具体例子???
rmini 2011-08-13
  • 打赏
  • 举报
回复
谢谢各位的热心回答,我试试!
wl58796351 2011-08-12
  • 打赏
  • 举报
回复
1、第一步将text1...text40.text 数据写到一个数组中 firstArray(39);
2、在要执行更新前将text1...text40.text 和数据中firstArray(39)中进行比较;
3、相同则过去,不同则执行ziduanX=textboxX.text ,ziduan(X+1)=textbox(X+1).text
4,最后执行update tb1 set ziduanx=textboxx.text,ziduanx+1=textboxx+1.text where id=x
以上执行速度快,并且是动态变化的。
lhblxm 2011-08-12
  • 打赏
  • 举报
回复
一直这样写是对的,这样最简单,只要写一次就行.
如果楼主觉得这样很麻烦,ADO.NET提供了commandBuilder类,可以自动生成修改语句。
rmini 2011-08-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ylly11111 的回复:]

for i....
if txtbox "&i&".text is changed then
update...
end if
next
[/Quote]

update什么?直接更新数据表???
ylly11111 2011-08-11
  • 打赏
  • 举报
回复
for i....
if txtbox "&i&".text is changed then
update...
end if
next
rmini 2011-08-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 babzbcbvbr 的回复:]

在取值绑定在每个textbox的时候
先将所有记录保存在一个对象里
做修改操作时
先进行对比,取得修改过数据的字段
动态生成一条update语句
[/Quote]

1.如何将所有记录保存在一个对象里?
2.如何进行对比,取得修改过数据的字段?
能说详细点吗?我真的不太熟悉
rmini 2011-08-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hzybc 的回复:]

不用,只要写修改的列就行

update tb1 set ziduan5=textbox5.text,ziduan10=textbox10.text where id=100

'二列
[/Quote]

关键是如何判断哪些字段值被修改了???
hzybc 2011-08-10
  • 打赏
  • 举报
回复
不用,只要写修改的列就行

update tb1 set ziduan5=textbox5.text,ziduan10=textbox10.text where id=100

'二列
babzbcbvbr 2011-08-09
  • 打赏
  • 举报
回复
在取值绑定在每个textbox的时候
先将所有记录保存在一个对象里
做修改操作时
先进行对比,取得修改过数据的字段
动态生成一条update语句

16,553

社区成员

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

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