数据从C#中的sdf数据库中消失

时间:2012-04-24 12:57:48

标签: c# database visual-studio sdf

我正在进行一些实验来掌握在C#和Visual Studio中管理数据库的概念。我所做的是创建一个简单的sdf数据库,只有一个表“Books”,由两个列组成 - 自动递增键“ID”和“作者”字段。我尝试创建一个DataSet对象来加载,修改和存储更改。程序将两个数字写入控制台 - 在从数据库加载数据后立即在DataSet中计算行数,在修改它之后但在将其更新到sdf之前写入一个。

发生了什么,让我完全失去了,是这样的:
首先,我得到了我期望看到的,即0 1 - 空表已成功加载,并且项目已添加到数据集中。

当我再次运行代码时,我得到1 2.然后2 3,3 4等等,正如预期的那样。 直到我刷新数据库并尝试通过服务器资源管理器查看它的内容 - 我看到的只是空表。此外,当我之后再次运行程序时,我会像开头一样得到0 1响应。

这是我正在使用的代码:

namespace DatasetTesting{
class Program
{
    static void Main(string[] args)
    {
        string conString = "Data Source=Books.sdf;Persist Security Info=False;Password=pass";
        SqlCeConnection objConn = new SqlCeConnection(conString);
        objConn.Open();

        SqlCeDataAdapter da = new SqlCeDataAdapter("Select * from Books", objConn);
        BooksDataSet booksSet = new BooksDataSet();
        da.FillSchema(booksSet,SchemaType.Source, "Books");
        da.Fill(booksSet, "Books");

        Console.Out.WriteLine(booksSet.Books.Rows.Count);

        BooksDataSet.BooksRow book = booksSet.Books.NewBooksRow();
        book.Author = "Tolkien";

        booksSet.Books.AddBooksRow(book);

        Console.Out.WriteLine(booksSet.Books.Rows.Count);

        SqlCeCommandBuilder comBuilder = new SqlCeCommandBuilder(da);
        da.Update(booksSet, "Books");

        Console.In.ReadLine();
    }
}

我必须承认,此时我不知道可能出现的问题 - 我会对任何建议表示感谢。

2 个答案:

答案 0 :(得分:2)

您是否将.sdf复制到了项目中?

将.sdf复制到您编写数据的项目似乎是一个常见的错误 - 然后您的SQL工作室经理正在查看不同的数据库。

答案 1 :(得分:0)

自从我完成DataAdapter已经很长时间了,但是看MSDN documentation,我想你必须打电话

da.UpdateCommand = comBuilder.GetUpdateCommand();

在您更新之前。