C# SqlCeDataAdapter 在从 datagridview 更改值后调用 Adapter.Update() 时不更新数据库中的值

Posted

技术标签:

【中文标题】C# SqlCeDataAdapter 在从 datagridview 更改值后调用 Adapter.Update() 时不更新数据库中的值【英文标题】:C# SqlCeDataAdapter not updating values from database when calling Adapter.Update() after changing values from datagridview 【发布时间】:2017-11-07 11:40:01 【问题描述】:

我有一个代码,其中包含本地数据库“database1.sdf”以及带有一些值的表“Employees”。我正在使用 Datagridview.Datasource 属性将数据库中的所有行添加到 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.Windows.Forms;
using System.Data.SqlServerCe;
namespace demoDatabaseOperations

public partial class Form1 : Form

    public Form1()
    
        InitializeComponent();
    
    public SqlCeConnection con = new SqlCeConnection("Data source=Database1.sdf");
    public DataTable dt = new DataTable();

    public SqlCeDataAdapter adptr;
    public SqlCeCommandBuilder cmdBuilder;
    private void Form1_Load(object sender, EventArgs e)
    

        con.Open();

        if (con.State == ConnectionState.Open)
        
            adptr = new SqlCeDataAdapter("select * from employees", con);
            cmdBuilder = new SqlCeCommandBuilder(adptr);

            adptr.UpdateCommand = cmdBuilder.GetUpdateCommand();

            adptr.Fill(dt);
            this.dataGridView1.DataSource = dt;

        
      

    //Button For Update/delete/insert values to the database
    private void button1_Click(object sender, EventArgs e)
    
        try
        
            adptr.Update(dt);
            adptr.Dispose();
        
        catch (Exception f)  MessageBox.Show(f.ToString()); 

    

有人有解决办法吗?

提前致谢

【问题讨论】:

您确定 adptr 有更新说明吗? 以msdn.microsoft.com/en-us/library/… 为例 - 您没有在代码中显示任何更新部分 @BugFinder 我们必须手动创建更新指令,例如“更新表名设置列...”?或adptr.UpdateCommand = cmdBuilder.GetUpdateCommand(); 这将在从 datagridview 更改列时自动生成更新值的指令? 尝试完全删除这一行 adptr.UpdateCommand = cmdBuilder.GetUpdateCommand(); @Abdou 不工作!同样的问题依然存在! 【参考方案1】:

我想我知道发生了什么。您已将数据库文件放在项目的根文件夹中,并将其添加到项目中,当您构建项目时,此文件将复制到调试文件夹,此复制的文件是您的应用更新的文件

您可以将数据库文件的绝对路径放在连接字符串中 Data source=C://Database1.sdf

【讨论】:

不错!问题是用较新的更新 database.sdf!

以上是关于C# SqlCeDataAdapter 在从 datagridview 更改值后调用 Adapter.Update() 时不更新数据库中的值的主要内容,如果未能解决你的问题,请参考以下文章

在从 C# 调用的 Matlab 函数中保存状态

为啥在从 C# 创建的进程中运行 bash 命令时我的 $PATH 不同?

在从 C++ 转换为 C# 的代码中,我应该使用啥来代替 memcpy?

如何在从 C 到 C# 的结构中获取非托管可变长度 C 数组?

如何在从数据库中选择时使用选择值进行 c# 插入

C# / C++ 应用程序在从 Windows 运行时崩溃,而不是从 Visual Studio 运行