更新奇怪的结果,不仅更新了自己还更新了下一行记录

greatdreamworld 2003-10-16 09:23:10
点击datagrid模板列的某一行编辑按钮时,进行修改后不仅把自己所在行更新了,还把下一行也更新了
我用的是access数据库,不知道这和数据库里自动增加的编号列有没有关系?
...全文
69 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
greatdreamworld 2003-10-27
  • 打赏
  • 举报
回复
解决了,谢谢各位
我在Binding语句里多了个order by
而 update重新提取时没有这个order by
可能就这个原因导致了修改时候有重复现象
greatdreamworld 2003-10-20
  • 打赏
  • 举报
回复
update语句都是一些参数设置,怎么到access试?
greatdreamworld 2003-10-17
  • 打赏
  • 举报
回复
我一项一项的试了一下,最开始更新是正常的,到了一定次数后,原行的数据是修改了,但是原行的原来数据却跑到下面一行把以前下面一行覆盖了
是不是标识列的问题?我已经把数据库自动生成的"编号"列给删除了
代码简单贴如下:
public void DEDR_Update(Object sender,DataGridCommandEventArgs E)
{string strSQL="SELECT * FROM 设备";//构建sql语句,connDM是连接字符串,已初始化
OleDbDataAdapter da=new OleDbDataAdapter(strSQL,connDM);//构建托管对象,以连接数据
DataSet ds=new DataSet();//新建一个dataset用以包含datatable表格数据
da.Fill(ds,"设备");//把dataset的对象ds存入到托管对象da中
DataTable dta=ds.Tables["设备"];//调出dataset中的表“设备”
int row=Convert.ToInt32(E.Item.ItemIndex);//获取要更新的那一行的行号
OleDbCommand odc=new OleDbCommand();
odc.Connection=connDM;
EditText1=(TextBox)E.Item.FindControl("Edit_MachineName");//网格中相应编辑状态下控件名
string MachineNameText=EditText1.Text.Trim();
dta.Rows[row]["设备名称"]=MachineNameText;
....
if(DateTime.Parse(EditText4.Text)>DateTime.Parse(EditText6.Text))
conn.Alert("制造日期应该早于始用日期!请重新输入",Page);
else
{dataGrid5.DataSource=dta.DefaultView;//用于界面显示
dataGrid5.DataBind();
odc.CommandText="UPDATE 设备 SET 设备名称='"+..."' WHERE 设备编号='"+Convert.ToString(dta.Rows[row]["设备编号"]).Trim()+"'";
//From_DBNull_to_null(object x)是一个从DBNull到null的方法
da.UpdateCommand=odc;
try{ da.Update(ds,"设备");//用于更新数据源,与updatecommand相配合 StateMessage.Text+="<b>更新数据成功</b>";
conn.Alert("恭喜!您已经修改数据成功!",Page);
}catch(Exception ee){StateMessage.Text+="<b>更新数据失败</b>;
}
finally{dataGrid5.EditItemIndex=-1;Binding();//初始的页面绑定方法
}}}
menuvb 2003-10-17
  • 打赏
  • 举报
回复
看不了了.

要么就是你没有判定条件.如果你where 条件不存在的话可能会更新表中全部数据.
suguanqun 2003-10-17
  • 打赏
  • 举报
回复
你的代码太长了,看起来很费力,建议你只更改两项,然后加断点逐步跟踪,你会看到再那里出错的!
greatdreamworld 2003-10-17
  • 打赏
  • 举报
回复
btw:我是以我得数据表中的"设备编号"为关键字段,数据库自动生成了一个"编号"列,默认是以"编号"列为主键的,我把它设为了用"设备编号"为主键
greatdreamworld 2003-10-17
  • 打赏
  • 举报
回复
public void DEDR_Update(Object sender,DataGridCommandEventArgs E)
{string strSQL="SELECT * FROM 设备";//构建sql语句,connDM是连接字符串,已初始化
OleDbDataAdapter da=new OleDbDataAdapter(strSQL,connDM);//构建托管对象,以连接数据
DataSet ds=new DataSet();//新建一个dataset用以包含datatable表格数据
da.Fill(ds,"设备");//把dataset的对象ds存入到托管对象da中
DataTable dta=null;
dta=ds.Tables["设备"];//调出dataset中的表“设备”用以方便的对行(rows)进行处理int row=Convert.ToInt32(E.Item.ItemIndex);//获取要更新的那一行的行号
OleDbCommand odc=new OleDbCommand();
odc.Connection=connDM;
EditText1=(TextBox)E.Item.FindControl("Edit_MachineName");//网格中相应编辑状态下控件名
string MachineNameText=EditText1.Text.Trim();
dta.Rows[row]["设备名称"]=MachineNameText;

EditText4=(TextBox)E.Item.FindControl("Edit_ZhizaoDate");
dta.Rows[row]["制造日期"]=Convert.ToDateTime(EditText4.Text.Trim());

EditText5=(TextBox)E.Item.FindControl("Edit_Zhizaobianhao");
dta.Rows[row]["制造编号"]=EditText5.Text;

EditText6=(TextBox)E.Item.FindControl("Edit_OriginDate");
OriginDateStr=EditText6.Text.Trim();
dta.Rows[row]["始用日期"]=DateTime.Parse(OriginDateStr).ToString("u",DateTimeFormatInfo.InvariantInfo);

EditText7=(TextBox)E.Item.FindControl("Edit_EngineNum");
string EngineNumText=EditText7.Text;
dta.Rows[row]["电动机总台数"]=Convert_to_null(EngineNumText);
//Convert_to_null(string s)是针对编辑框为空情况下的一种转换,这个字段为整形
EditText8=(TextBox)E.Item.FindControl("Edit_EnginePower");
dta.Rows[row]["电动机总千瓦"]=Convert_to_null(EditText8.Text.Trim());

EditText9=(TextBox)E.Item.FindControl("Edit_OriginValue");
dta.Rows[row]["原价值"]=Convert_to_null(EditText9.Text.Trim());

EditText10=(TextBox)E.Item.FindControl("Edit_Weight");
string weighttext=EditText10.Text.Trim();
dta.Rows[row]["重量"]=Convert_to_null(weighttext);

EditText11=(TextBox)E.Item.FindControl("Edit_Address");
dta.Rows[row]["安装地点"]=EditText11.Text.Trim();

EditText12=(TextBox)E.Item.FindControl("Edit_GongYi");
dta.Rows[row]["工艺参数"]=EditText12.Text;

EditText13=(TextBox)E.Item.FindControl("Edit_Remark");
dta.Rows[row]["备注"]=EditText13.Text;
if(DateTime.Parse(EditText4.Text)>DateTime.Parse(EditText6.Text))
conn.Alert("制造日期应该早于始用日期!请重新输入",Page);
else
{dataGrid5.DataSource=dta.DefaultView;//用于界面显示
dataGrid5.DataBind();
odc.CommandText="UPDATE 设备 SET 设备名称='"+Convert.ToString(dta.Rows[row]["设备名称"]).Trim()+"',制造日期='"+dta.Rows[row]["制造日期"]+"',制造编号='"+ dta.Rows[row]["制造编号"].ToString().Trim()+"',始用日期='"+dta.Rows[row]["始用日期"]+"',电动机总台数="+From_DBNull_to_null(dta.Rows[row]["电动机总台数"])+",电动机总千瓦="+From_DBNull_to_null(dta.Rows[row]["电动机总千瓦"])+ ",原价值="+From_DBNull_to_null(dta.Rows[row]["原价值"])+ ",重量="+From_DBNull_to_null(dta.Rows[row]["重量"])+",安装地点='"+dta.Rows[row]["安装地点"]+"',工艺参数='"+dta.Rows[row]["工艺参数"]+"',备注='"+dta.Rows[row]["备注"]+"' WHERE 设备编号='"+Convert.ToString(dta.Rows[row]["设备编号"]).Trim()+"'";
//From_DBNull_to_null(object x)是一个从DBNull到null的方法
da.UpdateCommand=odc;
try{ da.Update(ds,"设备");//用于更新数据源,与updatecommand相配合 StateMessage.Text+="<b>更新数据成功</b>";
conn.Alert("恭喜!您已经修改数据成功!",Page);
}catch(Exception ee){StateMessage.Text+="<b>更新数据失败</b></br>"+"error message:"+ee.Message+"</br>err source:"+ee.Source+"</br>errstacktrace:"+ee.StackTrace;
conn.Alert("对不起!您修改数据失败,请检查是否有非法操作!",Page);
}
finally{dataGrid5.EditItemIndex=-1;Binding();//初始的页面绑定方法
}}}
lucidaxy 2003-10-17
  • 打赏
  • 举报
回复
sql语句打出来,在access里执行试试
bing314 2003-10-17
  • 打赏
  • 举报
回复
ms-help://MS.VSCC/MS.MSDNVS.2052/cpguide/html/cpconupdatingdatabasewithdataadapterdataset.htm
oldhunter 2003-10-16
  • 打赏
  • 举报
回复
可能是你的标识列重复
scale8292 2003-10-16
  • 打赏
  • 举报
回复
贴出代码!
cms-Cloud后台管理系统 cms-Cloud 基于Spring Boot、Spring Cloud & Alibaba、OAuth2的前后端分离的后台管理系统,内置模块如:部门管理、角色用户、菜单及按钮授权、数据权限、系统参数、日志管理、代码生成等。在线定时任务配置;支持集群,支持多数据源。核心技术前端技术栈 ES6、vue、vuex、vue-router、vue-cli、axios、element-ui后端技术栈 Spring Boot、Spring Cloud & Alibaba、OAuth2系统需求JDK >= 1.8MySQL >= 5.5Maven >= 3.0主要特性1. 完全响应式布局(支持电脑、平板、手机等所有主流设备)2. 强大的一键生成功能(包括控制器、模型、视图、菜单等)3. 支持多数据源,简单配置即可实现切换。4. 支持按钮及数据权限,可自定义部门数据权限。5. 对常用js插件进行二次封装,使js代码变得简洁,更加易维护6. 完善的XSS防范及脚本过滤,彻底杜绝XSS攻击7. Maven多项目依赖,模块及插件分项目,尽量松耦合,方便模块升级、增减模块。8. 国际化支持,服务端及客户端支持9. 完善的日志记录体系简单注解即可实现技术选型1、系统环境Java EE 8Servlet 3.0Apache Maven 32、主框架Spring Boot 2.2Spring Cloud Hoxton.SR3Spring Framework 5.1Spring Security 5.13、持久层Apache MyBatis 3.4Alibaba Druid 1.14、视图层Vue 2.6Axios 0.18Element UI 2.11内置功能(1) 用户管理:用户是系统操作者,该功能主要完成系统用户配置。(2) 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。(3) 岗位管理:配置系统用户所属担任职务。(4) 菜单管理:配置系统菜单,操作权限,按钮权限标识等。(5) 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。(6) 字典管理:对系统中经常使用的一些较为固定的数据进行维护。(7) 参数管理:对系统动态配置常用参数。(8) 通知公告:系统通知公告信息发布维护。(9) 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。(10) 登录日志:系统登录日志记录查询包含登录异常。(11) 在线用户:当前系统中活跃用户状态监控。(12) 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。(13) 代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。(14) 系统接口:根据业务代码自动生成相关的api接口文档。(15) 服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。(16) 在线构建器:拖动表单元素生成相应的HTML代码。(17) 连接池监视:监视当期系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。 环境部署准备工作JDK >= 1.8 (推荐1.8版本)Mysql >= 5.5.0 (推荐5.7版本)Redis >= 3.0Maven >= 3.0Node >= 10nacos >= 1.1.0sentinel >= 1.6.0运行系统因为本项目是前后端分离的,所以需要前后端都启动好,才能进行访问。后端运行1、导入cms到Eclipse,菜单 File -> Import,然后选择 Maven -> Existing Maven Projects,点击 Next> 按钮,选择工作目录,然后点击 Finish 按钮,即可成功导入Eclipse会自动加载Maven依赖包,初次加载会比较慢(根据自身网络情况而定)2、创建数据库cms-cloud并导入数据脚本cms.sql(必须),quartz.sql(可选)3、创建数据库cms-config并导入数据脚本cms_config.sql(必须)4、配置nacos持久化,修改conf/application.properties文件,增加支持mysql数据源配置。# db mysqlspring.datasource.platform=mysqldb.num=1db.url.0=jdbc:mysql://localhost:3306/cms-config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTCdb.user=rootdb.password=password5、打开运行基础模块(启动没有先后顺序)CmsGatewayApplication (网关模块 必须)CmsAuthApplication (认证模块 必须)CmsSystemApplication (系统模块 必须)CmsMonitorApplication (监控中心 可选)CmsGenApplication (代码生成 可选)CmsJobApplication (定时任务 可选)CmsFileApplication (文件服务 可选)前端运行# 进入项目目录cd cms-ui# 安装依赖npm install# 强烈建议不要用直接使用 cnpm 安装,会有各种诡异的 bug,可以通过重新指定 registry 来解决 npm 安装速度慢的问题。npm install --registry=https://registry.npm.taobao.org 本地开发 启动项目npm run dev打开浏览器,输入:http://localhost:80 (默认账户 admin/admin123)若能正确展示登录页面,并能成功登录,菜单及页面展示正常,则表明环境搭建成功提示前端安装完node后,最好设置下淘宝的镜像源,不建议使用cnpm(可能会出现奇怪的问题)部署系统因为本项目是前后端分离的,所以需要前后端都部署好,才能进行访问后端部署bin/package.bat 在项目的目录下执行然后会在项目下生成 target文件夹包含 war 或jar1、jar部署方式使用命令行执行:java –jar xxxx.jar 或者执行脚本:bin/run.bat2、war部署方式pom.xml packaging修改为war 放入tomcat服务器webapps提示SpringBoot去除内嵌tomcat前端部署当项目开发完毕,只需要运行一行命令就可以打包你的应用# 打包正式环境npm run build:prod# 打包预发布环境npm run build:stage构建打包成功之后,会在根目录生成 dist 文件夹,里面就是构建打包好的文件,通常是 ***.js 、***.css、index.html 等静态文件。通常情况下 dist 文件夹的静态文件发布到你的 nginx 或者静态服务器即可,其中的 index.html 是后台服务的入口页面。环境变量所有测试环境或者正式环境变量的配置都在 .env.development (opens new window)等 .env.xxxx文件中。它们都会通过 webpack.DefinePlugin 插件注入到全局。常见问题如果使用Mac 需要修改application.yml文件路径profile如果使用Linux 提示表不存在,设置大小写敏感配置在/etc/my.cnf 添加lower_case_table_names=1,重启MYSQL服务如果提示当前权限不足,无法写入文件请检查profile是否可读可写,或者无法访问此目录

62,025

社区成员

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

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

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

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