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

智者知已应修善业 2011-12-06 10:10:42
1、用for语句执行更新操作 " UPDATE。。。为何循环不执行会结束,不能进行第二次循环就直接跳出循环执行.Close()了?
2、在DataGridView中修改数据后,有什么更好的ACCESS数据库更新多行方法?
给出参考代码
...全文
532 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 //为数据库连接语句
第2章 QQ企业通    2.1 设计思路 28   2.2 关键技术 28   2.2.1 INI文件的应用 28   2.2.2 线程的应用 30   2.2.3 在Socket中发送大容量的消息 30   2.2.4 将流序列化或反序列化为对象 31   2.2.5 用InnerList列表记录信息 31   2.3 设计过程 32   2.3.1 类库的设计 33   2.3.2 客户端注册模块设计 40   2.3.3 客户端登录模块设计 42   2.3.4 客户端QQ模块设计 43   2.3.5 客户端消息发送模块设计 48   2.3.6 服务器端控制台模块设计 52 第3章 SQL数据表提取器模块    3.1 概述 56   3.2 关键技术 56   3.2.1 如何备份数据库 56   3.2.2 如何还原数据库 57   3.2.3 如何附加数据库 58   3.2.4 如何分离数据库 59   3.2.5 设置数据库模式 59   3.3 设计过程 61   3.3.1 主窗体 61   3.3.2 获取服务器名称 62   3.3.3 获取所有数据库 63   3.3.4 获取所有数据表 64   3.3.5 备份数据库 66   3.3.6 还原数据库 67   3.3.7 附加数据库 68   3.3.8 分离数据库 70   3.3.9 导出表结构 71   3.3.10 导出数据 74 第4章 万能搜索模块    4.1 设计思路 80   4.2 关键技术 80   4.2.1 如何制作一个接口程序 80   4.2.2 实现接口程序的信息互传 80   4.2.3 如何将接口程序加载到其他程序中 82   4.2.4 怎样操作RichtextBox控件的选择文本 82   4.2.5 如何获取数据表中字段的描述信息 83   4.3 设计过程 83   4.3.1 获取数据表中字段的中文信息 84   4.3.2 添加数据表的查询条件 86   4.3.3 向SQL语句中添加括号 89   4.3.4 查询生成后的SQL语句 90   4.3.5 主程序获得接口信息 92 第5章 万能打印模块    5.1 设计思路 94   5.2 关键技术 94   5.2.1 打印设置(PrintDocument类) 94   5.2.2 打印预览对话框(PrintPreview Dialog) 95   5.2.3 打印对话框(PrintDialog) 96   5.2.4 获取指定颜色值和字体样式 97   5.2.5 DataGridView控件的相关应用 97   5.3 设计过程 98   5.3.1 打印信息的设置 98   5.3.2 表格样式的设置 100   5.3.3 打印类的设置 101   5.3.4 打印数据信息 108 第6章 决策分析模块    6.1 设计思路 112   6.2 关键技术 112   6.2.1 游标的基本操作 112   6.2.2 存储过程的基本操作 115   6.2.3 透视表的基本概念 117   6.2.4 统计表的基本操作 117   6.2.5 单击显示右键菜单 118   6.3 设计过程 118   6.3.1 主窗体的初始化 119   6.3.2 透视表的筛选 127   6.3.3 透视表的设计 130   6.3.4 统计表的设计 132 第7章 自定义图表控件    7.1 设计思路 136   7.2 关键技术 137   7.2.1 控件的生成 137   7.2.2 如何在项目中添加控件 137   7.2.3 在“属性”对话框中添加属性 137   7.2.4 用GDI+绘制图形 139   7.2.5 如何在控件上绘制图形 143   7.2.6 获取扇形外弧中心点的位置 143   7.3 设计过程 144   7.3.1 向自定义控件中添加属性 144   7.3.2 获取绘制图表的初始值数据 149   7.3.3 绘制标签框 153   7.3.4 绘制图表中的表格 157   7.3.5 绘制条形图 163   7.3.6 绘制面形图 170   7.3.7 绘制饼形图 174 第8章 电子邮件收发模块    8.1 概述 180   8.2 关键技术 180   8.2.1 Base64编码格式 180   8.2.2 SMTP服务 181   8.2.3 POP3协议 184   8.2.4 使用Jmail组件接收邮件 186   8.2.5 邮件发送类的使用 188   8.2.6 使用正则表达式验证邮件格式 190   8.3 设计过程 191   8.3.1 数据库设计 191   8.3.2 系统登录 191   8.3.3 邮件发送实现 192   8.3.4 为邮件上传多个附件 193   8.3.5 邮件接收实现 194   8.3.6 查看邮件详细信息 196   8.3.7 下载附件的实现 197   8.3.8 删除邮件实现 198   8.3.9 用户管理 198 第9章 短信群发模块    9.1 设计思路 202   9.2 关键技术 202   9.2.1 短信猫中API函数的使用 202   9.2.2 短信猫中的短信接收格式 205   9.2.3 窗体间的互操作 205   9.2.4 锁定模块主窗体 206   9.2.5 使用ADO.NET连接Access数据库 206   9.3 设计过程 207   9.3.1 数据库设计 207   9.3.2 群发短信实现 209   9.3.3 已发送短信管理 213   9.3.4 接收短信实现 215   9.3.5 常用联系人管理 219   9.3.6 常用短语管理 221 第10章 桌面精灵模块    10.1 概述 226   10.2 关键技术 226   10.2.1 阴阳历转换算法 226   10.2.2 调用系统API实现鼠标穿透效果 230   10.2.3 修改注册表控制程序开机自启动 231   10.2.4 通过控制窗体透明度实现日历透明显示效果 231   10.2.5 拖动无标题栏窗体 232   10.2.6 将窗体的关闭位置写入到注册表中 232   10.2.7 将程序图标写入到托盘 232   10.3 设计过程 233   10.3.1 桌面精灵模块公共类设计 233   10.3.2 当前日期的农历、天干地支年、节日及星座显示 235   10.3.3 定时提醒的实现 240   10.3.4 日历窗体效果控制 242   10.3.5 转到某天、某周、某月及某年的实现 243   10.3.6 节日管理 245   10.3.7 提醒管理 249 第11章 文件批量处理器    11.1 概述 256   11.2 关键技术 256   11.2.1 文件流技术 256   11.2.2 文件解压缩技术 258   11.2.3 获取系统文件及文件夹图标 262   11.2.4 获取指定目录下的所有文件及文件夹 265   11.2.5 Word操作技术 266   11.2.6 进度条的显示 266   11.2.7 对ListView控件中的项进行排序 267   11.3 设计过程 267   11.3.1 主窗体预览 267   11.3.2 批量复制、剪切文件 268   11.3.3 批量复制、剪切文件夹 270   11.3.4 批量重命名文件 271   11.3.5 批量删除文件及文件夹 275   11.3.6 搜索文件及文件夹 276   11.3.7 批量压缩、解压文件 278   11.3.8 分割、合并文件 280 第12章 图片管理工具模块    12.1 概述 286   12.2 关键技术 286   12.2.1 上下移动ListBox选中项 286   12.2.2 将文件复制到剪切板 287   12.2.3 格式转换 288   12.2.4 图片幻灯片 288   12.2.5 图片旋转 289   12.3 设计过程 290   12.3.1 主窗体 290   12.3.2 打开图片目录 291   12.3.3 图片格式转换 292   12.3.4 设为桌面背景 294   12.3.5 图片特效 296   12.3.6 图片调节 300   12.3.7 图片水印 304   12.3.8 幻灯片放映 306   12.3.9 图片打印 308 、

111,094

社区成员

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

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

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