2

I must say - I am struggling with whole Database - Adapter - DataSet model.

Using Visual Studio 2010 (C#, .NET, WPF), I have created a local database (.sdf extension). I added data source (Data > Add new data source) from my only table from my only database.

And from there, I cannot seem to properly update data into database. Here's what I'm stuck with:

    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 should update data into database, but it fails to do so.

Every time the function runs, it properly prints the content of the database to console (including newly added rows) but after every application restart all changes are gone.

The database file "Copy to output directory" parameter is set to "Copy always" (honestly, I don't even know why).

Thanks in advance for your answers! Best regards!

@EDIT

I've found out that manually setting Connection.ConnectionString to full path solves the issue:

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

Before that change adapter.Connection.ConnectionString returns:

  Data Source=|DataDirectory|\PokerStatsDatabase.sdf

It appears that DataDirectory substitution string was not correctly set by the DataSet Wizard.

After:

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

The code works fine too.

Now, what truly boggles me:

Why does the TableAdapter correctly fill the DataSet with data when it's not provided correct path? Why can't it update data with the same path it used to fetch data?

marc_s
  • 732,580
  • 175
  • 1,330
  • 1,459
MkjG
  • 144
  • 2
  • 15

0 Answers0