用Datatable和DataRow来插入数据,请帮忙看一下,那里错了!

njhyh 2005-08-24 11:45:03
Dim DS As New DataSet
Dim Dt As New DataTable("用户表")
Dim anyRow As DataRow
Call Cn.ConnDB("njh", "server", "sa", "") '调用连结类中的连结功能
DS = Cn.ExecuteSQL("select * from 用户表") '载模块中定义好的,这里获得用户表集合
'MsgBox(DS.Tables(0).ToString)
anyRow = DS.Tables(0).NewRow '定义数据行

anyRow("人员ID") = "12312312312312" '往数据行中的每个列中添加纪录
anyRow("姓名") = "nnnd"
'anyRow("cc") = TextBox3.Text
'anyRow("dd") = TextBox4.Text
DS.Tables(0).Rows.Add(anyRow) ''将数据行添加到数据集中
adapter.Update(DS) '更新释配器
MsgBox("成功!") '完成,
Call Cn.ConnDBClose() '调用连结类中的关闭功能

都能执行下去,没有提示错误,但是数据就是添加不进去,请问那里出问题了!在线等待
...全文
361 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
加入下面两句,这样系统会自动构造命令参数,供调用使用
Dim mCommandBuild As New SqlClient.SqlCommandBuilder
mCommandBuild.DataAdapter = Adapter
njhyh 2005-08-24
  • 打赏
  • 举报
回复
你在定义了一个存储过程,在VB.net中直接调用存储过程就可以了,但是在存储过程中用的还是Insert语句呀,我主要就是不想用Inser语句,如果你那有关于数据集添加数据的代码,可否告知!
例如:
VB中的Adodb就可以直接添加记录呀!
在.net中我也想那么去做!
EricBai 2005-08-24
  • 打赏
  • 举报
回复
你的这种写法,怎么看怎么别扭,呵呵。
我用的方法是定义一个Command然后添加,参数变量,然后设置CommandText内容(SQL文)然后给Command参数赋值,然后使用ExecuteSQL运行Command中的SQL文。
过程说得比较简单,不知道能否看懂?
njhyh 2005-08-24
  • 打赏
  • 举报
回复
Public Class Conndb
Public Sub ConnDB(ByVal ComputName As String, ByVal DataBaseName As String, ByVal Uid As String, ByVal Pwd As String)
'连接子程序
Try
Conn.ConnectionString = "Server=" + ComputName + ";" + "Database='" & DataBaseName & "';" + "uid='" & Uid & "';" + "pwd='" & Pwd & "'"
If Conn.State <> 0 Then
Exit Sub
Else
Conn.Open()
Exit Sub
End If
Catch ex As Exception
Call ConnDBClose()
MsgBox(ex.ToString)
End Try
End Sub

Public Sub ConnDBClose() '关闭连接子程序
Try
If Conn.State <> 0 Then
Conn.Dispose()
Conn.Close()
Exit Sub
End If
Catch ex As Exception
Conn.Dispose()
Conn.Close()
MsgBox(ex.ToString) '如果有错误,需要提示并显示.
End Try
End Sub

Public Function ExecuteSQL(ByVal sqlstr As String) As DataSet '返回数据集合类

Dim ds As DataSet
'myCommand.CommandType = CommandType.Text
myCommand.CommandText = sqlstr
myCommand.Connection = Conn
adapter.SelectCommand = myCommand
adapter.InsertCommand = myCommand
adapter.DeleteCommand = myCommand
adapter.UpdateCommand = myCommand
ds = New DataSet
Try
myCommand.ExecuteNonQuery()
adapter.Fill(ds)
Catch ex As Exception
MsgBox(ex.Message)
End Try
Return ds

End Function

End Class
这是我的连结类
请看一下!谢谢您了!
EricBai 2005-08-24
  • 打赏
  • 举报
回复
1. Cnn.ExecuteSQL 之前需要Open 数据连接
2. adapter中的UpdateCommand 是否正确配置,看看是不是有什么参数设置得不正确。
njhyh 2005-08-24
  • 打赏
  • 举报
回复
我以前用的都是INsert语句,我载数据量少的时候可以用,但是数据量多的情况下是非常麻烦的事情,因此想改用DataTabel来添加,各位高手请帮忙看看!谢谢了!
Alisa 2005-08-24
  • 打赏
  • 举报
回复
好像少了一句:

MyAdp.insertCommand = mycmd
lovefootball 2005-08-24
  • 打赏
  • 举报
回复
加一个datable.acceptchange看看
exing 2005-08-24
  • 打赏
  • 举报
回复
缺少自动化的SQL命令的构造器SqlCommandBuilder,所以系统是不会对数据库做更新的
EricBai 2005-08-24
  • 打赏
  • 举报
回复
哦,我好像明白你的意思了,你是想定义一个DataTable暂时存储数据,如果需要的话就将它保存到数据库,如果不需要的话就只让他存在于内存当中是吗?
EricBai 2005-08-24
  • 打赏
  • 举报
回复
如果想通过ADO.net进行数据操作就要用到Command(如果用adapter的话就会对应多个Command分别是SelectCommand、InsertCommand、UpdateCommand、DeleteCommand),用到Command就要有CommandText,要进行添加操作就要有"INSERT INTO",即使你用adapter减少你的一些劳动,但是它还是会在InsertCommand中写进去例如"INSERT INTO MyTable(Name1,Name2) VALUES(?,?)"之类的SQL文,所以,好像没有你想要得那种不使用"INSERT"进行插入操作的办法。

16,554

社区成员

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

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