Datagridview不保存对数据库的更改

时间:2015-08-30 14:39:32

标签: c# datagridview

Datagridview未保存对数据库的更改。

只是在表单中,而不是数据库。

我已检查数据库属性,Copy to output Directory设置为cope if newer

这是我的代码:

public partial class ClientsManager : Form
{

    public ClientsManager()
    {
        InitializeComponent();
    }

    private void clientsBindingNavigatorSaveItem_Click(object sender, EventArgs e)
    {
        try
        {

            this.Validate();
            this.clientsBindingSource.EndEdit();
            //this.tableAdapterManager.UpdateAll(this.databaseDataSet);
            this.clientsTableAdapter.Update(this.databaseDataSet.Clients);
            MessageBox.Show("Changes has been Saved!");
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
      }
   }

    private void ClientsManager_Load(object sender, EventArgs e)
    {
        // TODO: This line of code loads data into the 'databaseDataSet.Clients' table. You can move, or remove it, as needed.
        this.clientsTableAdapter.Fill(this.databaseDataSet.Clients);

    }

到目前为止,我读过的大多数解决方案都是关于EndEdit()Update() ..我在我的代码中已经解决了这个问题但仍无效。

2 个答案:

答案 0 :(得分:1)

您可以创建一个名为SAVE的新按钮,并将下面的代码放在其中。

yourdatadapatername.update(yourdatatablenamehere)

希望这有帮助。

答案 1 :(得分:1)

我在this Answer找到了解决方案:

  

这是一个非常普遍的问题。您使用| DataDirectory |替换字符串。这意味着,在Visual Studio环境中调试应用程序时,应用程序使用的数据库位于项目的子文件夹BIN \ DEBUG文件夹(或x86变体)中。这样做效果很好,因为您没有任何错误连接到数据库并进行更新操作。

     

但是,然后退出调试会话,并通过Visual Studio Server Explorer查看数据库。此窗口具有不同的连接字符串(可能指向项目文件夹中的数据库副本)。您搜索表格时看不到变化。

     

然后问题变得更糟。如果在项目文件和属性Copy to Output目录之间列出数据库文件设置为Copy Always,则每次重新启动调试会话时,原始数据库文件将从项目文件夹复制到输出文件夹(BIN) \ DEBUG)因此您之前的更改将丢失。现在,您的应用程序也没有看到之前所做的更改。

     

您可以停止此问题,将属性复制到输出目录更改为复制如果更新或从不复制。您还可以在服务器资源管理器中更新您的连接字符串,以查看数据库的工作副本或创建第二个连接。第一个仍然指向项目文件夹中的数据库,而第二个指向BIN \ DEBUG文件夹中的数据库。通过这种方式,您可以保留原始数据库以进行部署和架构更改,而使用第二个连接可以查看编码工作的有效结果。

     

编辑MS-Access数据库用户的特殊警告。如果您不编写或更改任何内容,查看表格的简单操作也会更改数据库的修改日期。因此,如果Newer启动,则标记为Copy,并将数据库文件复制到输出目录。使用Access可以更好地使用Copy Never。