我必须说 - 我正在努力使用整个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数据?为什么不能使用与获取数据相同的路径更新数据?