winform DataGridView access数据库批量更新问题

智者知已应修善业 2011-12-06 10:10:42
1、用for语句执行更新操作 " UPDATE。。。为何循环不执行会结束,不能进行第二次循环就直接跳出循环执行.Close()了?
2、在DataGridView中修改数据后,有什么更好的ACCESS数据库更新多行方法?
给出参考代码
...全文
533 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
就像我的数据显示应该是这样的
行序号,列序号......
-----,数据......
-----,数据......

行序号,列序号......
-----,数据......
-----,数据......

不可以直接把字段显示出来,而是需要重新组织一下显示出来进行编辑

那么,重新组织后的表修改后,有什么方法可以写回原来读出来的表里面的对应字段?
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 denqh 的回复:]

我是这样做抽取数据出来后绑定控件进行编辑的
DataTable dt = myDataSet.Tables[0];
foreach (DataRow row in dt.Rows)
{
string[] subitems = new string[Lies];
object[] Han = row.ItemArray;

subitems[0] = Han[6].ToSt……
[/Quote]
今天使用上面代码确实很好很快,不过由于要处理的数据显示方式不同,所以要重新组织DataTable的,

这就是你不明白的地方,比如要显示的数据里面有[6*6]还有[6*12]和[12*12]等不同的,

在数据库里面只一个字段记录这个数值,在显示的时候要根据这个数值生成对应表格供修改数据,行和列的格还必须标出序号来人看了才明白修改的是哪个的,就提取这个字段值来形成,所以要重新组织DataTable然后绑定显示,而不是直接把表绑定显示出来修改的,不相同的,

那么,这样如果还要使用上面代码就产生一个问题,如何能把重新组织的表修改后对应的值又用来修改到原来读出来表的DataTable里面去呢?有无这种方法?
  • 打赏
  • 举报
回复
嗯,不错,不过我在网络上找到的那样代码,就直接那样用了,这些天编写,逐渐对你那种方法能理解了.
也逐渐熟悉了控件的用法和各种语句,和不同的写法.
我一直借不到图书证,只好在网上找资料,幸好这些代码都能用,所以,现在好像对图书证不那么渴望了.
但好像你没答我的疑问啊!
DENQH 2011-12-08
  • 打赏
  • 举报
回复
我是这样做抽取数据出来后绑定控件进行编辑的
DataTable dt = myDataSet.Tables[0];
foreach (DataRow row in dt.Rows)
{
string[] subitems = new string[Lies];
object[] Han = row.ItemArray;

subitems[0] = Han[6].ToString();
subitems[1] = Han[7].ToString();
subitems[2] = Han[1].ToString();
subitems[3] = Han[2].ToString();
}
我直接有点不明白你上面的,转来转去,
直接这样不好么?
for(i=0;i<myDataSet.Tables[0].Rows.Count();i++)
{
string str0=myDataSet.Tables[0].Rows[i][1];
string str1=myDataSet.Tables[0].Rows[i][7];
.......

}


  • 打赏
  • 举报
回复
我是这样做抽取数据出来后绑定控件进行编辑的
DataTable dt = myDataSet.Tables[0];
foreach (DataRow row in dt.Rows)
{
string[] subitems = new string[Lies];
object[] Han = row.ItemArray;

subitems[0] = Han[6].ToString();
subitems[1] = Han[7].ToString();
subitems[2] = Han[1].ToString();
subitems[3] = Han[2].ToString();

}

  • 打赏
  • 举报
回复
[Quote=引用 6 楼 denqh 的回复:]

第二个DataTable table2= table1.Clone();然后你加入数据,可以使用方面的方法。
[/Quote]

问题在于DataTable2!=DataTable1否则就可以,上面已经说过重新组织了DataTable2,也就是从原来的DataTable抽取需要编辑的列又添加了一个提示列,你这样拷贝的话我就不用重新组织DataTable2了,重新组织后DataTable2的列结构已经不和DataTable1等同了,上面方法还可以?
不知道是否理解了?我还是对你说的有疑惑.

我喜欢玩编程,得益于微软发展到现在越来越好用的缘故.
DENQH 2011-12-07
  • 打赏
  • 举报
回复
因为你的数据不多,用哪种方法都无所谓
  • 打赏
  • 举报
回复
我不是专业程序员,也没系统学习,有代码拿来就用,呵呵......
虽然不是专业,开发出来的看上去好像专业的,哈哈......
  • 打赏
  • 举报
回复
微软让我有成就所以更依赖微软所开发的包括控件......
待研究,目前急着马上投入使用,所以,还是按照FOR循环进行更新,速度还可以,已经找到自己语法错误,可以正常运行......
DENQH 2011-12-07
  • 打赏
  • 举报
回复
第二个DataTable table2= table1.Clone();然后你加入数据,可以使用方面的方法。
  • 打赏
  • 举报
回复
抱歉啊,是我没说清楚,我在界面上放了2个dataGridView,第一个用来显示内容不编辑,
第二个用来调跨行的多行数据方便编辑并更新,且第二个DataTable重新组织并添加了指导文字的列,
因此第二个DataTable就不同第一个DataTable,不知道这样你上面的代码还能行?

DENQH的代码是否对更新数据库效率比较高,如果效率高,那么,像我这样不同的DataTable是否适用?
还是我该采用什么样的方式才能用到你的代码,从而更高效,给个建议和说明该如何做.
DENQH 2011-12-06
  • 打赏
  • 举报
回复
只要你绑定了DataTable,不管你是怎么操作,用上面的方法,在dataGridView1新添加行,会在数据库新加一行,修改会更新数据库存相应行
sdl2005lyx 2011-12-06
  • 打赏
  • 举报
回复
不要用for循环去做,那样繁琐,直接用OleDbCommandBuilder ,它会自动根据DataGridView的数据源DataTable的行状态,更新数据库!

试试楼上的。。。
  • 打赏
  • 举报
回复
问题在于为了方便只显示一个表中2行数据显示在控件中编辑,更新要限定条件,找到对应的如ID号才执行更新这2行.
DENQH 2011-12-06
  • 打赏
  • 举报
回复
 public static OleDbDataAdapter AdapterUpdate(string SelectString, DataTable tableName,string connectionString)
{

OleDbDataAdapter Adapter = new OleDbDataAdapter();

using (OleDbConnection connetion = new OleDbConnection(connectionString))
{
Adapter.SelectCommand = new OleDbCommand(SelectString, connetion);

OleDbCommandBuilder builder = new OleDbCommandBuilder(Adapter);
Adapter.UpdateCommand = builder.GetUpdateCommand();

Adapter.Update(tableName);
table.AcceptChanges();
return Adapter;

}
}
//调用
DataTable table = (DataTable)dataGridView1.DataSource;
AdapterUpdate(SelectSql, table,connectionString)//SelectSql为查询语句 connectionString //为数据库连接语句

111,095

社区成员

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

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

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