datagridview如何保存到数据库时不覆盖原数据

问题描述

datagridview如何保存到数据库时不覆盖原数据

我现在先从数据库里取出标准表到datagridview里,
修改完后我想将该表存到数据库里,但不覆盖原来的标准表,应该怎么做?

 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Configuration;

namespace NAVECOrepair
{
    public partial class 结算单 : Form
    {
        SqlConnection conn;
        DataSet deptDataSet;
        DataSet deptDataSet1;
        SqlDataAdapter adapter;
        SqlDataAdapter adapter1;
        string connectString = DateTime.Now.ToString();//用于获取当前时间作为3个表的连接,精确到秒
        private bool lcaBool = false;
        public 结算单()
        {
            InitializeComponent();
        }

        private void 结算单_Load(object sender, EventArgs e)
        {
            LCALoad();//加载人工成本分析
            MCALoad();//加载材料成本分析
        }

        //加载人工成本分析
        private void LCALoad()
        {
            conn = new SqlConnection();
            conn.ConnectionString = ConfigurationManager.ConnectionStrings["partialConnectString"].ToString();
            SqlCommand cmd = new SqlCommand("select l_number,l_type,workHours,exaWorkHours,l_unitPrice,unitPriceTerms,exaUnitPriceTerms,connectString from LCA where connectString='0'", conn);
            adapter = new SqlDataAdapter();
            adapter.SelectCommand = cmd;
            deptDataSet = new DataSet();
            adapter.Fill(deptDataSet, "lca");
            DataView dv = new DataView(deptDataSet.Tables["lca"]);
            this.dgvLCA.DataSource = dv;
            this.dgvLCA.Columns[0].HeaderText = "序号";
            this.dgvLCA.Columns[1].HeaderText = "加工类型";
            this.dgvLCA.Columns[2].HeaderText = "工时";
            this.dgvLCA.Columns[3].HeaderText = "审核工时";
            this.dgvLCA.Columns[4].HeaderText = "单价(元)";
            this.dgvLCA.Columns[5].HeaderText = "单价项";
            this.dgvLCA.Columns[6].HeaderText = "审核单价项";
            this.dgvLCA.Columns[7].HeaderText = "连接串";
            this.dgvLCA.Columns[0].ReadOnly = true;//设置只允许修改第3,4列的值
            this.dgvLCA.Columns[1].ReadOnly = true;
            this.dgvLCA.Columns[2].ReadOnly = false;
            this.dgvLCA.Columns[3].ReadOnly = false;
            this.dgvLCA.Columns[4].ReadOnly = true;
            this.dgvLCA.Columns[5].ReadOnly = true;
            this.dgvLCA.Columns[6].ReadOnly = true;
            //this.dgvLCA.Columns[7].Visible=false;//设置连接串不显示
            this.dgvLCA.Columns[0].Width = 60;
            for (int i = 0; i < dgvLCA.Rows.Count; i++)
            {
                dgvLCA.Rows[i].Cells[7].Value = connectString;
            }
        }

        //加载材料成本分析
        private void MCALoad()
        {
            conn = new SqlConnection();
            conn.ConnectionString = ConfigurationManager.ConnectionStrings["partialConnectString"].ToString();
            SqlCommand cmd1 = new SqlCommand("select m_number,m_name,m_type,unit,quantity,m_unitPrice,m_totalPrice,remark,connectString from mca", conn);
            adapter1 = new SqlDataAdapter();
            adapter1.SelectCommand = cmd1;
            deptDataSet1 = new DataSet();
            adapter1.Fill(deptDataSet1, "mca");
            DataView dv1 = new DataView(deptDataSet1.Tables["mca"]);
            this.dgvMCA.DataSource = dv1;
            this.dgvMCA.Columns[0].HeaderText = "序号";
            this.dgvMCA.Columns[1].HeaderText = "材料名称";
            this.dgvMCA.Columns[2].HeaderText = "型号规格";
            this.dgvMCA.Columns[3].HeaderText = "单位";
            this.dgvMCA.Columns[4].HeaderText = "数量";
            this.dgvMCA.Columns[5].HeaderText = "单价(元)";
            this.dgvMCA.Columns[6].HeaderText = "总价(元)";
            this.dgvMCA.Columns[7].HeaderText = "备注";
            this.dgvMCA.Columns[8].HeaderText = "连接串";
            //this.dgvMCA.Columns[8].Visible = false;//设置连接串不显示
            this.dgvMCA.Columns[0].Width = 60;
            for (int i = 0; i < dgvMCA.Rows.Count; i++)
            {
                dgvMCA.Rows[i].Cells[8].Value=connectString;
            }
        }

        //当单元格内容改变时,修改单价项或者审核单价项
        private void dgvLCA_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex != -1 && !lcaBool)
            {
                lcaBool = true;
                if (this.dgvLCA.Rows[e.RowIndex].Cells[2].Value.ToString() != "")
                {
                    this.dgvLCA.Rows[e.RowIndex].Cells[5].Value = Convert.ToDecimal(this.dgvLCA.Rows[e.RowIndex].Cells[2].Value) * Convert.ToDecimal(this.dgvLCA.Rows[e.RowIndex].Cells[4].Value);
                }
                if (this.dgvLCA.Rows[e.RowIndex].Cells[3].Value.ToString() != "")
                {
                    this.dgvLCA.Rows[e.RowIndex].Cells[6].Value = Convert.ToDecimal(this.dgvLCA.Rows[e.RowIndex].Cells[3].Value) * Convert.ToDecimal(this.dgvLCA.Rows[e.RowIndex].Cells[4].Value);
                }
                lcaBool = false;
            }
        }

        private void btnSave_Click(object sender, EventArgs e)
        {
            conn = new SqlConnection();
            conn.ConnectionString = ConfigurationManager.ConnectionStrings["partialConnectString"].ToString();

        }
    }
}

解决方案

具体一点就是:

你的这个需求有两种情况,一种是将你修改后的数据写回原来的表,另一种是写到新表里。

我的解决方案有两个,都完全适用你的这两种情况,不管是写回原来的表里,还是写道新的表里,都可以用我的方案中的一种来解决

方案一:不要适用datagridview这种数据库连接控件来显示数据库的查询结果,而是使用数据库无关的网格等控件显示数据,修改完成后你想怎么写入数据库就怎么写入数据库

方案二:继续使用datagridview控件,这个控件中发生的修改将写回数据表中对应的数据来源行,你不想改变这些对应的表数据,那么比较好的方法是,让datagridview控件和你不想改变的这个表中的对应数据脱离

要实现脱离,那么最有效的方法就是把这些标准数据弄到别的表里,修改,完成后弄到你想存储它们的表里,而这需要一个中间表,把标准数据存放在里面,而数据库中的临时表就是天生干这个用的

假设你的标准表是A,要把其中的数据修改后放到表B里(这里的表B可以是表A本身),那么SELECT * INTO #BB FROM A;这个语句将建立一个新的表BB,这个SQL将新建一个表BB,并自动把表A中的标准数据弄到这个表BB里,可以说这时的表BB和表A中的数据完全一样

这个时候你用你的那些代码打开并用datagridview显示并修改表BB中的数据并保存

等你改好了,要追加这些修改了的数据到表A或表B,那么SELECT * INTO A FROM BB;这样你修改后的数据就回到表A中了,要写回B表也一样的语句,把A改成B就可以了

解决方案二:

有谁知道怎么做吗?求助!!!!!!!!!!!!

解决方案三:

查询之前先创建一个新表,将原始表数据导入其中,这些一个SQL语句可以完成,之后的左右操作都针对这个新表进行

解决方案四:

比如这样就通过查询建立了一个新表:

SELECT * INTO #临时表名 FROM 数据来源表 WHERE temp01='zhaoj';

解决方案五:

笔误了,最后写回去的语句改成 insert into b select * from bb

解决方案六:

晕死了,喝大了,改成笔误了,最后写回去的语句改成 insert into b select * from #bb;

时间: 2024-11-03 19:44:28

datagridview如何保存到数据库时不覆盖原数据的相关文章

这段代码输出保存在数据库中的json格式数据怎么用java代码在前端显示出来

问题描述 这段代码输出保存在数据库中的json格式数据怎么用java代码在前端显示出来 public class SaveHotKeySkillReq extends CommandBase { @Resource //数据库操作 private EntityManager em; protected void execute() throws GMessageException { CRequesthotKeyChange msg = pak.readMsg(CRequesthotKeyCha

关于数据库升级之后,原数据保存的问题

问题描述 系统版本升级之后,数据库里某些表字段会有增加或删除的情况,这样的话,怎么能方便快捷的把原数据库里数据复制到新数据库里呢,而且新旧数据库还必须在同一位置 解决方案 解决方案二:谁让你新建数据库的呢?解决方案三:你有试过直接导入么?解决方案四:引用1楼sp1234的回复: 谁让你新建数据库的呢? 你的意思是说直接在原数据库里修改?解决方案五:引用3楼hereier的回复: Quote: 引用1楼sp1234的回复: 谁让你新建数据库的呢? 你的意思是说直接在原数据库里修改? 本来就应该这样

具体流程-记录用户的浏览记录并保存到数据库中当用户在次浏览时显示上次

问题描述 记录用户的浏览记录并保存到数据库中当用户在次浏览时显示上次 记录用户的浏览记录并保存到数据库中当用户在次浏览时显示上次浏览相关的内容, 写出具体流程. 求解 ...

树菜单选中保存进数据库。下次加载树菜单打开时,还是显示的是:勾选着上次选中保存的

问题描述 树菜单选中保存进数据库.下次加载树菜单打开时,还是显示的是:勾选着上次选中保存的 树菜单选中保存进数据库.下次加载树菜单打开时,还是显示的是:勾选着上次选中保存的 解决方案 这问题怎么又重复提问一次,还没解决? 解决方案二: 你需要一个表,保存当前所有被打开的节点的id和用户名,下次打开的时候在装入树的时候加载. 解决方案三:

web用sql语句访问是数据库时造成数据被覆盖

问题描述 web用sql语句访问是数据库时造成数据被覆盖 我的问题是这样的:云端有4个地址块0.1.2.3.我需要从这4个地址中读取数据,当道一个类中,然后把数据以曲线的形式呈现到页面.而且 我前端用的iframe静态加载数据.同时,var_type=1的iframe加载数据后紧接着var_type=3的iframe开始加载数据.我的做法: 第一步:我利用sql语句直接访问数据库.第二步:var_type=1访问块0数据,然后存放到his_dev0(是个类)中,var_type=3访问数据库块0

datagridview能不能如Excel那样,先输入数据,然后再保存到数据库?

问题描述 内容如标题 解决方案 解决方案二:本来就是干这个的,grid中可以直接修改数据,改完可以提交解决方案三:可以的啊,首先必须先写事件啊!!解决方案四:可以啊,这玩意就是干这个的解决方案五:你搜索一下吧,commandbuilder解决方案六:commandbuilder只能对于有主键的表进行操作,对于没有主键的表,用datagridview直接更新只能现将数据库表的旧数据删掉,在遍历datagridview修改后的数据插入数据库表中解决方案七:引用5楼colahk的回复: command

鼠标经过td时变成文本框架,离开时自动保存到数据库

问题描述 鼠标经过td时变成文本框架,离开时自动保存到数据库,这个问题怎么做呀 解决方案 解决方案二:能不能在TD里加个输入框,应该可以触发和鼠标经过离开的相关事件~!解决方案三:可以做到,想法不錯,但不現實我在TD上移來移去的話,就是不斷的寫數據庫

dedecms数据保存到数据库附加表 xxx_addonarticle 时出错

由于安装使用DEDE默认的数据库表名等很容易被黑客黑.最近公司的一个站用DEDE就遇到.为此做了安全防护以后.想顺便更改默认的数据库表名: 假设定原来的为:xxx_前缀   更改以后的为:sq_xxx_ 更改完成以后提交数据显示: 把数据保存到数据库附加表 `xxx_addonarticle` 时出错,请把相关信息提交给DedeCms官方.Table 'testdata.xxx_addonarticle' doesn't exist 解决办法: 找到数据库表:sq_xxx_channeltype

CS结构混合编程 新增时 把textbox中内容保存到数据库对应字段

问题描述 前台为嵌入式C后台c++由于该字段是备注信息太长不在gridview里面进行操作,查询新增修改等操作都在textbox里面进行.表名为hdys01,字段名remark.现在想请问下在测试环境的gridview里面新增一条记录的时候,其他都能保存,就是textbox里面内容怎么保存到数据库对应的字段?代码应该写在前台还是后台,哪个位置.我们前台格式为查询函数.画面载入.按钮区.最好能给出详细的代码,谢谢各位 解决方案 解决方案二:新增时:在保存前加上这样的语句:DataTabledt=d