ADO.NET新增数据失败,帮忙找下原因

hwmys 2010-03-25 11:38:15
用VB ADO习惯了,想在ado.net上沿用,可是语句执行完毕后表内容没有增加!
'新增记录方法二(待测试)
'lshao_qs为主键,byhao+byid为聚合索引,MyCondat为SqlConnection
Dim strQS As String = "select * from hw_feiyongqs"
Dim QsData As SqlDataAdapter = New SqlDataAdapter(strQS, MyCondat)
Dim Qsds As DataSet = New DataSet
MyCondat.Open()
QsData.Fill(Qsds, "清算内容")
Dim limingTable As DataTable = Qsds.Tables("清算内容")

Dim newRow As DataRow
newRow = limingTable.NewRow()
newRow.Item("lshao_qs") = Lsh_Hao
newRow.Item("byhao") = Trim(Replace(Label10.Text, "住院号:", ""))
newRow.Item("byid") = Lab_byid.Text
limingTable.Rows.Add(newRow)
limingTable.AcceptChanges()
MyCondat.Close()
...全文
247 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
hwmys 2010-03-31
  • 打赏
  • 举报
回复
问题解决了,谢谢大家!
hwmys 2010-03-30
  • 打赏
  • 举报
回复
'新增记录方法一***********************ok***************
这个是更新表成功的
帖子需要解决的“方法二”
tjficcbw 2010-03-30
  • 打赏
  • 举报
回复
多了一行
Dim sql As String = "CREATE TABLE test(id int IDENTITY (1, 1), nid int, 数字 int NOT NULL, 文本 text,日期 datetime, 备注 ntext, 是否 bit, PRIMARY KEY (数字))"

sql = "INSERT INTO hw_feiyongqs ( lshao_qs, byhao, byid, bysfzh, ysjg, tuixf, tuihzj, qtbz, tjpb, tjsj, " & _
"tjren, pp_sfzz, pp_sfzf, pp_xxzz, pp_xxzf, xxybh, xxyxm, xxysfz, xxdd, zxxl, xxrq,ywhxjl, byxxgx) " & _
"VALUES('" & Lsh_Hao & "','" & by_hao & "','" & by_id & "','" & by_sfz & "','" & ys_jg & "'," & tui_xf & _
"," & tui_hzj & ",'" & qt_bz & "','1',getdate(),'" & User_I & "','" & tup1 & "','" & tup2 & "','" & tup3 & "','" & _
tup4 & "','" & xxy_bh & "','" & xxy_xm & "','" & xxy_sfz & "','" & xx_dd & "'," & zx_xl & ",'" & xx_rq & _
"','" & yw_hxjl & "','" & byxx_gx & "')"


改成
Dim sql As String = "INSERT INTO hw_feiyongqs ( lshao_qs, byhao, byid, bysfzh, ysjg, tuixf, tuihzj, qtbz, tjpb, tjsj, " & _
"tjren, pp_sfzz, pp_sfzf, pp_xxzz, pp_xxzf, xxybh, xxyxm, xxysfz, xxdd, zxxl, xxrq,ywhxjl, byxxgx) " & _
"VALUES('" & Lsh_Hao & "','" & by_hao & "','" & by_id & "','" & by_sfz & "','" & ys_jg & "'," & tui_xf & _
"," & tui_hzj & ",'" & qt_bz & "','1',getdate(),'" & User_I & "','" & tup1 & "','" & tup2 & "','" & tup3 & "','" & _
tup4 & "','" & xxy_bh & "','" & xxy_xm & "','" & xxy_sfz & "','" & xx_dd & "'," & zx_xl & ",'" & xx_rq & _
"','" & yw_hxjl & "','" & byxx_gx & "')"

tjficcbw 2010-03-30
  • 打赏
  • 举报
回复
首先你想做什么到现在也没说清楚,(已经占了六楼了)
我分析是不是你想更新数据库,用cmd执行SQL语句的方法,要是这样


'新增记录方法一***********************ok***************
Dim by_hao As String = Trim(Replace(Label10.Text, "住院号:", ""))
Dim by_id As String = Lab_byid.Text
Dim by_sfz As String = Trim(Replace(Label4.Text, "身份证号:", ""))
Dim ys_jg As String = Trim(Texty0.Text)
Dim tui_xf As Single = Val(Texty8.Text)
Dim tui_hzj As Single = Val(Texty7.Text)
Dim qt_bz As String = Trim(Texty9.Text)
Dim tup1 As String = Replace(Label22_p.Text, Application.StartupPath & "\temppic\", "")
Dim tup2 As String = Replace(Label23_p.Text, Application.StartupPath & "\temppic\", "")
Dim tup3 As String = Replace(Label24_p.Text, Application.StartupPath & "\temppic\", "")
Dim tup4 As String = Replace(Label25_p.Text, Application.StartupPath & "\temppic\", "")
Dim xxy_bh As String = Trim(Texty3.Text)
Dim xxy_xm As String = Trim(Texty1.Text)
Dim xxy_sfz As String = Trim(Texty2.Text)
Dim xx_dd As String = Trim(Texty4.Text)
Dim zx_xl As Integer = Val(Texty5.Text)
Dim xx_rq As Date = DateTimePicker1.Value
Dim yw_hxjl As String = Trim(Texty6.Text)
Dim byxx_gx As String = Trim(ComboBox1.Text)


Dim cstring As String = "这个连接字符串用你的"
Dim con As New SqlConnection(cstring)
Dim sql As String = "CREATE TABLE test(id int IDENTITY (1, 1), nid int, 数字 int NOT NULL, 文本 text,日期 datetime, 备注 ntext, 是否 bit, PRIMARY KEY (数字))"

sql = "INSERT INTO hw_feiyongqs ( lshao_qs, byhao, byid, bysfzh, ysjg, tuixf, tuihzj, qtbz, tjpb, tjsj, " & _
"tjren, pp_sfzz, pp_sfzf, pp_xxzz, pp_xxzf, xxybh, xxyxm, xxysfz, xxdd, zxxl, xxrq,ywhxjl, byxxgx) " & _
"VALUES('" & Lsh_Hao & "','" & by_hao & "','" & by_id & "','" & by_sfz & "','" & ys_jg & "'," & tui_xf & _
"," & tui_hzj & ",'" & qt_bz & "','1',getdate(),'" & User_I & "','" & tup1 & "','" & tup2 & "','" & tup3 & "','" & _
tup4 & "','" & xxy_bh & "','" & xxy_xm & "','" & xxy_sfz & "','" & xx_dd & "'," & zx_xl & ",'" & xx_rq & _
"','" & yw_hxjl & "','" & byxx_gx & "')"


Dim myCmd As New SqlCommand(sql, con)
con.Open()
Try
myCmd.ExecuteNonQuery()
MsgBox("保存提交已完成!")
Catch ex As Exception
MsgBox(ex.Message)
End Try
con.Close()


'

'上传图片,并删除"\temppic\"中的文件

'hw_alarm中插入提醒内容
sql = "INSERT INTO hw_alarm (about_id,almtype,pop_pat) VALUES(" & Lsh_Hao & ",'退费','财务科')"

Dim myCmd As New SqlCommand(sql, con)
con.Open()
Try
myCmd.ExecuteNonQuery()
MsgBox("保存提交已完成!")
Catch ex As Exception
MsgBox(ex.Message)
End Try
con.Close()


这样如果不能插入会告诉你为什么
hwmys 2010-03-30
  • 打赏
  • 举报
回复
总算解决了!VB6转VB.NET2005不轻松啊。加到100分!!!!!晚上结贴,大家都有

Dim newRow As DataRow
newRow = limingTable.NewRow()
newRow.Item("lshao_qs") = Lsh_Hao
newRow.Item("byhao") = Trim(Replace(Label10.Text, "住院号:", ""))
newRow.Item("byid") = Lab_byid.Text

limingTable.Rows.Add(newRow) 'Qsds.Tables("清算内容").Rows.Add(newRow)

Dim cb As SqlClient.SqlCommandBuilder
cb = New SqlClient.SqlCommandBuilder(QsData)
QsData.Update(Qsds, "清算内容")
BrightFire 2010-03-30
  • 打赏
  • 举报
回复
还有,两点
1.QsData.Fill(Qsds, "清算内容")这行改为QsData.Fill(Qsds)试试
2.limingTable.AcceptChanges()这句不要加
其他的楼上几位都说过了
如果还不行就看看QsData的UpdateCommand和InsertCommand 里面的东西对不对
BrightFire 2010-03-30
  • 打赏
  • 举报
回复
更新失败时应该会有exception被抛出,lz把Exception贴上来看看
hwmys 2010-03-30
  • 打赏
  • 举报
回复
还是无效啊!
lhblxm 2010-03-30
  • 打赏
  • 举报
回复
limingTable.AcceptChanges()
用了这一名后,rowstate已更改

如果要提交数,不要用这句
直接用DATAADAPATER.UPDATE方法
sh_shj 2010-03-30
  • 打赏
  • 举报
回复

Dim dvTable = New DataView(Qsds.Tables("清算内容"))
Dim newRow As DataRowView = dvTable.AddNew
newRow("lshao_qs") = Lsh_Hao
newRow("byhao") = Trim(Replace(Label10.Text, "住院号:", ""))
newRow("byid") = Lab_byid.Text
newRow.EndEdit()
Dim builder As SqlCommandBuilder = New SqlCommandBuilder(QsData)
QsData.Update(dvTable.Table)

以上代码是测试通过的,不可能无效!
与你最后的代码不同点在于:一个用DataView,一个用DataTable。
tjficcbw 2010-03-30
  • 打赏
  • 举报
回复
这样就是新增记录呀



Dim cstring As String = "这个连接字符串用你的"
Dim con As New SqlConnection(cstring)
Dim sql As String = "INSERT INTO hw_feiyongqs ( lshao_qs, byhao, byid, bysfzh, ysjg, tuixf, tuihzj, qtbz, tjpb, tjsj, " & _
"tjren, pp_sfzz, pp_sfzf, pp_xxzz, pp_xxzf, xxybh, xxyxm, xxysfz, xxdd, zxxl, xxrq,ywhxjl, byxxgx) " & _
"VALUES('" & Lsh_Hao & "','" & by_hao & "','" & by_id & "','" & by_sfz & "','" & ys_jg & "'," & tui_xf & _
"," & tui_hzj & ",'" & qt_bz & "','1',getdate(),'" & User_I & "','" & tup1 & "','" & tup2 & "','" & tup3 & "','" & _
tup4 & "','" & xxy_bh & "','" & xxy_xm & "','" & xxy_sfz & "','" & xx_dd & "'," & zx_xl & ",'" & xx_rq & _
"','" & yw_hxjl & "','" & byxx_gx & "')"


Dim myCmd As New SqlCommand(sql, con)
con.Open()
Try
myCmd.ExecuteNonQuery()
MsgBox("保存提交已完成!")
Catch ex As Exception
MsgBox(ex.Message)
End Try
con.Close()




你连看也没看一眼就是这是更新记录的,
这就是增加记录的,
谁见过
INSERT INTO hw_feiyongqs (字段列表序列) values(字段值列表序列)
这样的语句是更新用的,
hwmys 2010-03-29
  • 打赏
  • 举报
回复
谢谢大家,谢谢14、15楼的代码,明天测试一下看看!
sh_shj 2010-03-27
  • 打赏
  • 举报
回复

Dim dvTable = New DataView(Qsds.Tables("清算内容"))
Dim newRow As DataRowView = dvTable.AddNew
newRow("lshao_qs") = Lsh_Hao
newRow("byhao") = Trim(Replace(Label10.Text, "住院号:", ""))
newRow("byid") = Lab_byid.Text
newRow.EndEdit()
Dim builder As SqlCommandBuilder = New SqlCommandBuilder(QsData)
QsData.Update(dvTable.Table)
lsh2216024 2010-03-26
  • 打赏
  • 举报
回复
简单的说,
单步调试
1,sql语句语法是否正确,变量的传送是否正确
2,数据库的连接是否正确
yingyuebingya 2010-03-26
  • 打赏
  • 举报
回复

'新增记录方法二(待测试)
'lshao_qs为主键,byhao+byid为聚合索引,MyCondat为SqlConnection
Dim strQS As String = "select * from hw_feiyongqs"
Dim QsData As SqlDataAdapter = New SqlDataAdapter(strQS, MyCondat)
Dim Qsds As DataSet = New DataSet
MyCondat.Open()
QsData.Fill(Qsds, "清算内容")
Dim newRow As DataRow
newRow = Qsds.Tables("清算内容").NewRow()
newRow.Item("lshao_qs") = Lsh_Hao
newRow.Item("byhao") = Trim(Replace(Label10.Text, "住院号:", ""))
newRow.Item("byid") = Lab_byid.Text
Qsds.Tables("清算内容").Rows.Add(newRow)
QsData.Update(Qsds)
//QsData.Update()
MyCondat.Close()

水猿兵团五哥 2010-03-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 yingyuebingya 的回复:]


QsData..Update(Qsds)
[/Quote]

yingyuebingya 2010-03-25
  • 打赏
  • 举报
回复

QsData..Update(Qsds)
tjficcbw 2010-03-25
  • 打赏
  • 举报
回复
这里你的limingTable是改了,但你的表在什么地了,
hwmys 2010-03-25
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 tjficcbw 的回复:]
我的意思是问你limingTable改了,你显示的表在什么地呀,你不是想让你的显示改,还是数据库改,
要是显示改,则重新fill
要是数据库改,则执行SQL语句,
以上不知你在做什么
[/Quote]
想用第二种方法达到6楼第一种方法的目的,不知我是否说明白了?
flyerwing 2010-03-25
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 upc_xiaowei 的回复:]
update()之前要用commandBuilder,我c#,写上这句
sqlcommandBuilder=new SqlCommandBuilder(QsData);
QsData.Update(Qsds,"清算内容")

并在数据库中定义主键。
newRow.Item("lshao_qs") = Lsh_Hao
你这句的Lsh_Hao是啥啊,
[/Quote]
要用COMMANDBUILDER表还是得有主键地,要不会失败地!
加载更多回复(7)

16,554

社区成员

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

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