C# 如何将dataGridView1里的数据批量插入、更新到SQL数据库

yanele 2011-01-05 03:57:17
1、由于有大量数据,怎么考虑事务的处理?
2、dataGridView1编辑时未绑定数据源,且当记录未满屏时,有相应多的空白行填充,是否插入或更新时不考虑这些空白行?
3、当更改dataGridView1里的数据时,如果某些行没有修改,未修改的行是否可以不再重复向数据库提交写入或更新操作?
4、听说可能用SqlDataAdapter操作,却未找到相关文档,能否实现上面说的功能?


...全文
3391 35 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
清茶慕白 2013-02-26
  • 打赏
  • 举报
回复
清茶慕白 2013-02-26
  • 打赏
  • 举报
回复
汤姆丶叔叔 2012-03-09
  • 打赏
  • 举报
回复
没看懂 ...
lszhx1972 2011-09-15
  • 打赏
  • 举报
回复
学习。。。。
江湖人儿 2011-07-01
  • 打赏
  • 举报
回复
学习学习
akenny0423 2011-05-22
  • 打赏
  • 举报
回复
我用vb2008,也遇到了该问题,有时能够更新,有时却没有反应,数据库中没有变化。
期待高手解决!
Private Sub GetDataToDbYh(ByVal num As Integer)
Try
For i As Integer = 1 To num

Dim n1 As String = Dgv2.Rows(i - 1).Cells(0).Value.ToString
Dim n2 As Double = CType(Dgv2.Rows(i - 1).Cells(1).Value, Double)
Dim n3 As Double = CType(Dgv2.Rows(i - 1).Cells(2).Value, Double)
Dim n4 As Double = CType(Dgv2.Rows(i - 1).Cells(3).Value, Double)
Dim n5 As Double = CType(Dgv2.Rows(i - 1).Cells(4).Value, Double)
Dim n6 As Double = CType(Dgv2.Rows(i - 1).Cells(5).Value, Double)
Dim n7 As Double = CType(Dgv2.Rows(i - 1).Cells(6).Value, Double)
Dim n8 As Double = CType(Dgv2.Rows(i - 1).Cells(7).Value, Double)
Dim n9 As Double = CType(Dgv2.Rows(i - 1).Cells(8).Value, Double)
Dim n10 As Double = CType(Dgv2.Rows(i - 1).Cells(9).Value, Double)
Dim n11 As Double = CType(Dgv2.Rows(i - 1).Cells(10).Value, Double)
Dim n12 As Double = CType(Dgv2.Rows(i - 1).Cells(11).Value, Double)
Dim n13 As Double = CType(Dgv2.Rows(i - 1).Cells(12).Value, Double)
Dim n14 As Double = CType(Dgv2.Rows(i - 1).Cells(13).Value, Double)
Dim n15 As Double = CType(Dgv2.Rows(i - 1).Cells(14).Value, Double)
Dim n16 As Double = CType(Dgv2.Rows(i - 1).Cells(15).Value, Double)
Dim n17 As Double = CType(Dgv2.Rows(i - 1).Cells(16).Value, Double)
Dim n18 As Double = CType(Dgv2.Rows(i - 1).Cells(17).Value, Double)
Dim n19 As Double = CType(Dgv2.Rows(i - 1).Cells(18).Value, Double)
Dim n20 As Double = CType(Dgv2.Rows(i - 1).Cells(19).Value, Double)
Dim n21 As String = Dgv2.Rows(i - 1).Cells(20).Value.ToString


If n1 <> "" Then
Dim ins As New chenhui.chycom
Dim actab As DataTable = ins.CreateDataTable("select * from qdshjyh", "qdshjyh")


Dim oii As Integer = ins.QdShjYhInsert("qdshjyh", n1, n2, n3, n4, n5, n6, n7, n8, n9, n10, n11, n12, n13, n14, n15, n16, n17, n18, n19, n20, n21, Dtp1)

If oii = 0 Then
MsgBox("已存在相同的试验编号!", MsgBoxStyle.Information, "无侧限抗压强度试验试件养护")
End If
Else
MsgBox("试件编号不能为空!")
Exit Sub
End If

Next
Catch ex As Exception

End Try
End Sub
yanele 2011-05-22
  • 打赏
  • 举报
回复
楼上的,你是VB的程序吧.
yanele 2011-01-11
  • 打赏
  • 举报
回复
using (SqlConnection connection = new SqlConnection(RunSqlClass.connectionStr))
{
SqlDataAdapter myAdapter = new SqlDataAdapter();
SqlCommand myCommand = new SqlCommand(sqlStr, connection);
myAdapter.SelectCommand = myCommand;
SqlCommandBuilder myCommandBuilder = new SqlCommandBuilder(myAdapter);

myAdapter.Update(ds, ds.Tables[0].TableName);
}

没有搞懂,新增的数据保存时没有问题,修改数据保存就会提示:
违反了 PRIMARY KEY 约束 'PK_TC'。不能在对象 'dbo.TC' 中插入重复键。
语句已终止。

感觉修改数据时也插入了数据,不知道哪时错了?!!!
yanele 2011-01-10
  • 打赏
  • 举报
回复
下面这个方法可以实现新增数据了,不知道能不能同时更新两个数据表?

更新数据时会提示已存在记录不能重复,应该是直接更新语句,又不是插入数据,怎么会有这个提示?

另外就是整个过程缺少事务处理,不知道该怎么加上去?

public void DataSetUpdate(DataSet ds, string connectstr, string tablename, string sqlstr)
{
try
{
SqlDataAdapter adapter = new SqlDataAdapter(sqlstr, connectstr);

//使用SqlCommandBuilder 对像填充SqlDataAdapter 的InsertCommand、DeleteCommand、UpdateCommand对像
SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(adapter);


int val = adapter.Update(ds, tablename);
ds.AcceptChanges();
}
catch
{
throw;
}
}
zfzxw123 2011-01-10
  • 打赏
  • 举报
回复
我看了大家的回复,也没弄太明白,以前用DELPHI的时候,都会把修改的项目放到一个临时表里,保存的时候只保存临时表里的数据,不知道C#是否有类似的功能。
yanele 2011-01-10
  • 打赏
  • 举报
回复
现在提示将"参数值从 String 转换到 Decimal 失败",因为表中有一个字段是单价,录入的内容是12.23,所以报这个错。另外,当我使用更新数据时,会提示有重复记录。
wy811007 2011-01-10
  • 打赏
  • 举报
回复
话说 和更新到access 应该一样吧 我也来看看。
yanele 2011-01-10
  • 打赏
  • 举报
回复
郁闷,就是搞不定。

我根据现在dataGridView1里的数据,重新生成一个DataSet ds=需要更新到数据库里的数据(跟数据库的字段完全一致)

我想将这个ds数据集更新到SQL中,总也不成功!
yanele 2011-01-09
  • 打赏
  • 举报
回复
想问一下,dataGridView1非绑定数据源,可以用SqlCommandBuilder实现dataGridView1中的数据批量更新数据库吗?
LovePurple 2011-01-08
  • 打赏
  • 举报
回复
批量插入可以用事务来实现 2楼正解
yanele 2011-01-08
  • 打赏
  • 举报
回复
那样就分不清哪些数据是新建的,哪些是修改过的,从长远考虑以后数据日志等,这都不是一个好的办法.
donglin0316 2011-01-08
  • 打赏
  • 举报
回复
第3问 可以告诉你个方法

更新前把原有的数据数据先删掉,再根据datagridview上的数据进行添加
yanele 2011-01-08
  • 打赏
  • 举报
回复
难道这个问题,真的没有办法了吗?
我是dataGridView1数据修改后,用一个方法得到修改后的数据,DataSet dt = GetDataSetFromDataGridView(dataGridView1);

测试将其dataGridView2.DataSource = dt.Tables[0];都是成功的。

现在就是想将这个dt更新到数据库相应记录,总也不成功!但如果之前绑定dataGridView1数据源又可以。
不知道SqlCommandBuilder可不可以单独取一个DataSet的内容去更新,而非绑定过的内容。
KasthSoft 2011-01-07
  • 打赏
  • 举报
回复
dataGridView 不支持太大的数据, 超过5万条 ,你的页面就会变白的。。。。
yanele 2011-01-07
  • 打赏
  • 举报
回复
搞了这么久,还是不行,哪位大哥能不能有实现这个完整功能?

再想问一下:SqlCommandBuilder类是否自带有事务回滚机制?
批量插入与更新时,DataSet的列名与顺序是不是要跟SQL数据库的表列名与顺序保持完全一致?
加载更多回复(10)

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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