0

我是编程的初学者,我正在尝试制作一个程序来跟踪我在 WPF 中的慢跑数据。我设置了一个列表框,该列表框与我的紧凑型 sql 数据库进行数据绑定,我的信息被记录到该数据库中。当我在 Visual Studio 中时,它可以正常工作,但是当我发布程序时,列表框将不再显示来自数据库的正确信息。每次我开始新的程序会话时,它都会重新开始。我知道信息在数据库中,因为我有可以正确显示所有最新记录数据的图表。但是,列表框将仅显示在当前会话期间记录的数据。当我关闭程序并重新打开时,我之前会话的数据不再显示在列表框中。

我的代码如下所示:

    runDataDataSet1 ds;
    runDataDataSet1TableAdapters.runDataTableTableAdapter dt;
    weightDataSet wds;
    weightDataSetTableAdapters.weightTableTableAdapter wdt;


    private void Window_Loaded(object sender, RoutedEventArgs e)
    {

        ds = ((runDataDataSet1)(this.FindResource("runDataDataSet1")));
        dt = new runDataDataSet1TableAdapters.runDataTableTableAdapter();
        dt.Fill(ds.runDataTable);
        CollectionViewSource cvs = ((CollectionViewSource)(this.FindResource("runDataTableViewSource")));
        cvs.View.MoveCurrentToFirst();

        wds = ((weightDataSet)(this.FindResource("weightDataSet")));
        wdt = new weightDataSetTableAdapters.weightTableTableAdapter();
        wdt.Fill(wds.weightTable);
        CollectionViewSource wcvs = ((CollectionViewSource)(this.FindResource("weightTableViewSource")));
        wcvs.View.MoveCurrentToFirst();

要提交数据,当按下提交按钮时,我有以下代码:

double pace = runData.runPace(runData.milesRun, runData.timeRun);
        double pace2 = Math.Round(pace, 1);
        double milesDuration = Math.Round((runData.mileDuration(runData.milesRun, runData.timeRun)), 1);
        paceTextBox.Text = ((milesDuration) + " min mile");
        //UPDATE DATABASE
        string myConnectionString = @"Data Source=C:\Users\zfam\My   Projects\programming\visual studio\XTrakker\XTrakker\runData.sdf";
        string mySelectQuery = "SELECT [int], [runDate], [runDist], [runTime], [runPace] FROM [runDataTable] order by [int] desc";
        DataRow dr = ds.Tables["runDataTable"].NewRow();
        SqlCeDataAdapter adapter = new SqlCeDataAdapter(mySelectQuery, myConnectionString);
        dr["runDate"] = date;
        dr["runDist"] = distData;
        dr["runTime"] = timeData;
        dr["runPace"] = milesDuration;

        ds.Tables["runDataTable"].Rows.Add(dr);

        SqlCeCommandBuilder projectBuilder = new SqlCeCommandBuilder(adapter);
        DataSet newSet = ds.GetChanges(DataRowState.Added);
        adapter.Update(newSet, "runDataTable");
        adapter.Dispose();

同样,当我在 Visual Studio 中运行程序时,这一切都正常工作。一旦我发布,列表框将只显示当前会话中的数据,甚至正在更新实际的数据库文件。也许我做错了?有什么想法吗?

4

1 回答 1

0

很难说,但我对这条线有点困惑:

string myConnectionString = @"Data Source=C:\Users\zfam\My   Projects\programming\visual studio\XTrakker\XTrakker\runData.sdf";

看起来您对数据源提供程序进行了硬编码。您确定在 Visual Studio 中以及在发布应用程序时使用相同的数据源吗?

也许数据源在每次执行时都会重新创建,这可以解释为什么你总是有新数据。

于 2013-03-25T07:24:29.880 回答