私はVisual StudioのC#でデータベースを管理するというコンセプトを理解するためにいくつかの実験を行っています。私がしたのは、 "Books"という1つのテーブルを持つシンプルなsdfデータベースを作成することでした。このテーブルは、自動インクリメントキー "ID"と "Author"フィールドの2つの欄から成っていました。私は、ロード、変更、および変更を保存するDataSetオブジェクトを作成しようとしました。このプログラムは、データベースからデータをロードした直後のDataSetの行の数と、それを変更した後でsdfに更新する前の2つの数値をコンソールに書き込みます。C#で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();
}
}
を私はこの時点で私は間違っているかもしれないものについての手掛かりを持っていないことを認めなければならない - 私は何かアドバイスに感謝するだろう。
閉じる...あなたの*ほぼ*広範な世界全体にあなたのパスワードをブロードキャストします。 – KingCronus
本当にいいえ、私は実際のアプリケーション以外の場所では私の本当のパスワードを使用しません。私はこれらのテストで使ったものを編集しただけなので、私は実際のパスを使ったとは思わないでしょう。 – Mornar
SQL gremlinsについて聞いたことがあります。データのビットは繊細さです。 .sdfをプロジェクトにコピーしましたか? .sdfをデータが書き込まれているプロジェクトにコピーするのはよくある間違いです。それから、SQLスタジオマネージャーは別のデータベースを探しています。あなたのライブラリーにTolkienを追加するための神話+1。 – IAbstract