如何同时向数据库插入多条数据,结构相同的

cici_sun 2002-06-27 02:56:22
点击提交按钮后怎么能够实现同时插入多条结构相同内容不同的数据?有没有相关的例子?
...全文
508 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
cici_sun 2002-07-02
  • 打赏
  • 举报
回复
问题解决了,谢谢大家!
测试程序如下:

Dim strcomm As String = "select account,custtype from custtype"

MySda.SelectCommand = New SqlClient.SqlCommand(strcomm, MyConn)

Dim oDS As New DataSet()
MySda.MissingSchemaAction = MissingSchemaAction.AddWithKey
MySda.Fill(oDS, "cust")
Response.Write("oetu")
Response.End()

Dim oParam As SqlClient.SqlParameter

MySda.InsertCommand = New SqlClient.SqlCommand("insert into custtype (account,custtype) values (@account,@custtype)", MyConn)
oParam = MySda.InsertCommand.Parameters.Add(New SqlClient.SqlParameter("@account", SqlDbType.Char, 16))
oParam.SourceVersion = DataRowVersion.Current
oParam.SourceColumn = "account"

oParam = MySda.InsertCommand.Parameters.Add(New SqlClient.SqlParameter("@custtype", SqlDbType.Int, 4))
oParam.SourceVersion = DataRowVersion.Current
oParam.SourceColumn = "custtype"

Dim index As Integer
Dim oRow As DataRow
For index = 0 To 1
oRow = oDS.Tables("cust").NewRow
oRow.Item("account") = TextBox1.Text
oRow.Item("custtype") = TextBox2.Text
oDS.Tables("cust").Rows.Add(oRow)
Next
MyConn.Open()

Try

MySda.Update(oDS, "cust")
Response.Write("<script language=javascript>alert('插入记录成功!!!')</SCRIPT>")
Catch Exp As SqlClient.SqlException
If Exp.Number = 2627 Then
Response.Write("<script language=javascript>alert('您插入的记录已经存在!!!')</SCRIPT>")
Else
Response.Write("<script language=javascript>alert('没有插入记录!!!')</SCRIPT>")
End If
End Try

MyConn.Close()
mbm 2002-06-28
  • 打赏
  • 举报
回复
前提是你装了.net中文版
cici_sun 2002-06-28
  • 打赏
  • 举报
回复
TO:mbm(-- (@ \/ @) --)
你说的那两个网址都找不到服务器。
dreammaster 2002-06-28
  • 打赏
  • 举报
回复
修改的确存在问题,插入的话应该不存在问题,即便是多人同时插入多条,如果数据库设计合理(如主键是一个自增列,维一性索引很少的话)应该不会存在这个问题,放在事务中就更可靠些。
mbm 2002-06-28
  • 打赏
  • 举报
回复
并发控制
ms-help://MS.VSCC/MS.MSDNVS.2052/Vbcon/html/vboriDataUpdatesConcurrency.htm
mbm 2002-06-28
  • 打赏
  • 举报
回复
事务处理
ms-help://MS.VSCC/MS.MSDNVS.2052/cpref/html/frlrfSystemDataSqlClientSqlConnectionClassBeginTransactionTopic.htm
cici_sun 2002-06-28
  • 打赏
  • 举报
回复
TO:gplg(咖啡)
能不能提供例程啊?我还是不明白!你说的是不是就不存在mbm(-- (@ \/ @) --) 所说的问题了呢?
gplg 2002-06-28
  • 打赏
  • 举报
回复
在sql的语句中采用事务处理,不外就是begin(commit、rollback、save)
tran,如果要全部插入成功才算成功,那只需在开始用begin tran,插入结束用commit tran就行了。具体用法视具体语句,最好不要在.net中用,因为.net好像不建议用事务处理。
gplg 2002-06-27
  • 打赏
  • 举报
回复
在集合插入时同时采用事务处理就ok了。
mbm 2002-06-27
  • 打赏
  • 举报
回复
其实集中插入有一个最大的缺陷
如果同时访问系统的人很多
就会涉及到并发的问题。

你把数据都取过来,然后再dataset中一条条修改,你改完了一起提交都库表。如果你改了5分钟才改完,那别的人这时候如果改变了库表里的数据,假设删除了一条记录,但你的dataset里还有这条记录,你sqladapter.update时就找不到它了。

所以还是建议你用insert的sqlcommand对象一条条去插入,除非整个系统只有你一个人访问。当然,这只是极端情况。
cici_sun 2002-06-27
  • 打赏
  • 举报
回复
有没有相关的例子呢?baitianhai(hong) 说的方法我不是很明白!

dreammaster 2002-06-27
  • 打赏
  • 举报
回复
SqlCommand来使用Insert语句没有问题,但性能与mbm的方法想比要差一些。集中插入的方法较好。
mbm 2002-06-27
  • 打赏
  • 举报
回复
好像不能用
insert ....
union
insert....
这种方法执行,至少我没用过
cici_sun 2002-06-27
  • 打赏
  • 举报
回复
难道不能直接用insert实现吗?
baitianhai 2002-06-27
  • 打赏
  • 举报
回复
描述:
对数据库操作的时候,有时候需要多条数据的操作,使用sql语句消耗资源大
解决办法:
举例如下
Dim myDataAdapter As New SqlClient.SqlDataAdapter()
myDataAdapter.SelectCommand = New SqlClient.SqlCommand("select * from 表 where 条件", DeviceConnection)
Dim custCB As SqlClient.SqlCommandBuilder = New SqlClient.SqlCommandBuilder(myDataAdapter)
DeviceConnection.Open()
Dim custDS As DataSet = New DataSet()
Dim dr As DataRow
myDataAdapter.Fill(custDS, "设备备件关系表")
'更改dataset的datatable的datarow
dr = custDS.Tables("设备_备件关系表").NewRow
'你可以在此添加数据
custDS.Tables("设备_备件关系表").Rows.Add(dr)
myDataAdapter.Update(custDS, "设备备件关系表")
'更新所作的修改
DeviceConnection.Close()
mbm 2002-06-27
  • 打赏
  • 举报
回复
通过动态在dataTable中添加DataRow
然后sqldataadapter.update()方法一起提交实现

62,073

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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