【发布时间】:2012-04-24 12:57:47
【问题描述】:
我正在进行一些实验来掌握在 C# 和 Visual Studio 中管理数据库背后的概念。我所做的是创建一个简单的 sdf 数据库,其中只有一个表“Books”,由两个列组成 - 自动递增键“ID”和“Author”字段。我尝试创建一个 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();
}
}
我必须承认,在这一点上,我不知道可能出了什么问题 - 如果您有任何建议,我将不胜感激。
【问题讨论】:
-
关闭通话...您几乎只是向全世界广播您的密码。
-
不是真的,不是 - 除了真正的应用程序之外,我不会在任何地方使用我的真实密码。我只编辑了我在那些测试中使用的那个,这样人们就不会认为我使用了我真正的通行证 xP
-
我听说过 SQL gremlins - 以为它们只是神话。数据位是一种美味。您是否将 .sdf 复制到您的项目中?将 .sdf 复制到写入数据的项目中似乎是一个常见错误 - 然后您的 SQL 工作室经理正在查看不同的数据库。将托尔金添加到您的图书馆的神话般的 +1。
-
天哪,我不敢相信我没有注意到它=.= lAbstract,你是对的,这正是导致问题的原因。非常感谢。
-
已编辑评论并作为答案输入。
标签: c# database visual-studio sdf