【问题标题】:Unable to save changes to dataset无法保存对数据集的更改
【发布时间】:2015-01-18 22:06:41
【问题描述】:

我在我的 C# 项目中添加了一个数据源,它只有几列,用户将输入数据并向数据库添加行,并且还能够搜索某些行。我无法保存任何更改。当我按下添加按钮时,更改出现在我的DataGridView 中,但是当我重新启动我的程序(顺便说一句,我构建并导出它,而不是在调试模式下)时,之前的更改不存在。这是为什么呢?

 //called when the new entry button is clicked, adds new row into DB
    private void CreatEnrtyBtn_Click(object sender, EventArgs e)
    {
        //Create new row to construct
        BettingDB1DataSet.HorsesRow row = bettingDB1DataSet.Horses.NewHorsesRow();

        //Add values to row
        row.HorseName = this.HorseNameBox.Text;
        row.Trainer = this.TrainerNameBox.Text;
        row.Place = this.PlaceBox.Text;
        row.Location = this.LocationBox.Text;
        row.Jockey = this.JockeyNameBox.Text;
        row.Track = this.LocationBox.Text;
        row.Ground = "temp";

        //Add row to DB and commit changes
        bettingDB1DataSet.Horses.AddHorsesRow(row);

        //tried both of these on their own, but neither work?
        horsesTableAdapter.Update(bettingDB1DataSet.Horses);
        horsesTableAdapter.Update(row);
    }

根据要求如何创建 horsesTableAdapter:

        private BettingDB1DataSetTableAdapters.HorsesTableAdapter horsesAdapter;


    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        // TODO: This line of code loads data into the 'bettingDB1DataSet2.Horses' table. You can move, or remove it, as needed.
        this.horsesTableAdapter.Fill(this.bettingDB1DataSet2.Horses);
        this.dataGridView1.DataSource = bettingDB1DataSet.Horses;

    }

【问题讨论】:

  • 您是否有任何异常,或者该方法是否正常完成,而没有更改数据库?
  • 一切顺利。行出现在数据网格中,主键是自动添加的,一切。但是当程序再次打开时,没有保存任何更改。
  • @silent 您所描述的问题是,在您重新启动程序后,没有任何内容加载到网格中。您是否真的验证过数据库本身没有发生任何变化?
  • @Rshepp MS SQL 服务器文件我相信。 BartoszKP 我表单中的网格视图会立即看到更改并显示新行,问题是当我关闭程序并再次打开它时,网格不再有更改。所以在第一次运行时,我的网格没有行,我使用这个按钮添加了一对,它会显示添加的行。我关闭程序并再次打开它,我又没有更多的行了。
  • 是的,它是本地的。这里没有服务器连接:)。是的,如果是这种情况,我将如何停止这种情况?习惯于编写 50 行 Python 脚本,所以这一切都有些不堪重负;)

标签: c# .net datagridview dataset datasource


【解决方案1】:
  1. 您使用数据适配器填充 bettingDB1DataSet2。
  2. 你的网格数据源调用 bettingDB1DataSet。
  3. 您正在更新 bettingDB1DataSet。

也许这就是问题所在。

【讨论】:

  • 这似乎是原因,我的项目有点乱,所以考虑到大家的帮助,我打算重新做。谢谢
【解决方案2】:

您在更新前接受数据集更改???。

投注DB1DataSet.Acceptchanges(); horsesTableAdapter.Update(bettingDB1DataSet.Horses);

【讨论】:

  • 我之前尝试过,但它什么也没做,我还读到 AcceptChanges() 将已编辑的行标记为未编辑,因此如果我在 Update() 之前调用它,那么它将不知道行需要保存?
  • 你能展示你是如何创建你的 horsesTableAdapter 的吗?
猜你喜欢
  • 2016-07-13
  • 2016-11-08
  • 2016-07-07
  • 1970-01-01
  • 2016-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多