如何在C#中正确地将数据更新到本地数据库

时间:2014-08-31 21:46:23

标签: c# database dataset tableadapter

我必须说 - 我正在努力使用整个Database - Adapter - DataSet模型。

使用Visual Studio 2010(C#,. NET,WPF),我创建了一个本地数据库(.sdf扩展名)。 我从我唯一的数据库中添加了数据源(Data > Add new data source)。

从那里,我似乎无法正确地将数据更新到数据库中。这就是我所坚持的:

    private Random rnd = new Random(); 

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        PokerStatsDatabaseDataSet myDataSet = new PokerStatsDatabaseDataSet();

        PokerStatsDatabaseDataSetTableAdapters.PlayersTableAdapter adapter = new PokerStatsDatabaseDataSetTableAdapters.PlayersTableAdapter();
        adapter.Fill(myDataSet.Players);

        Console.WriteLine(myDataSet.Players.Rows.Count);
        foreach (PokerStatsDatabaseDataSet.PlayersRow r in myDataSet.Players.Rows)
        {
            Console.WriteLine("\t" + r.ID + " " + r.Nick); 
        }

        PokerStatsDatabaseDataSet.PlayersRow row = myDataSet.Players.NewPlayersRow();
        row.ID = rnd.Next(2, 1000);
        row.Nick = "asdf";
        myDataSet.Players.Rows.Add(row);

        adapter.Update(myDataSet);
    }

DataSetTableAdapter::Update应该将数据更新到数据库中,但它没有这样做。

每次运行该函数时,它都会正确地将数据库的内容打印到控制台(包括新添加的行),但在每次应用程序重新启动后,所有更改都将消失。

数据库文件"复制到输出目录"参数设置为"始终复制" (说实话,我甚至不知道为什么)。

提前感谢您的回答!最好的问候!

@EDIT

我发现手动将Connection.ConnectionString设置为完整路径可以解决问题:

 adapter.Connection.ConnectionString = @"Data Source=C:\Users\someUser\Documents\Visual Studio 2010\Projects\PokerStats\PokerStatsDatabase.sdf"; 

在此更改之前adapter.Connection.ConnectionString返回:

  Data Source=|DataDirectory|\PokerStatsDatabase.sdf

似乎DataSet向导未正确设置DataDirectory替换字符串。

之后:

  AppDomain.CurrentDomain.SetData("DataDirectory", @"C:\Users\someUser\Documents\Visual Studio 2010\Projects\PokerStats");

代码也可以。

现在,真正令我困惑的是:

为什么TableAdapter在未提供正确路径的情况下正确填充DataSet数据?为什么不能使用与获取数据相同的路径更新数据?

0 个答案:

没有答案