C# と Visual Studio でデータベースを管理する背後にある概念を把握するために、いくつかの実験を行っています。私がしたことは、自動インクリメントキー「ID」と「作成者」フィールドの2つの列で構成される、1つのテーブル「Books」を持つ単純なsdfデータベースを作成することでした。変更をロード、変更、保存するための DataSet オブジェクトを作成しようとしました。プログラムは、コンソールに 2 つの数値を書き込みます。データベースからデータをロードした直後の 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();
}
}
現時点では、何が問題なのか見当がつかないことを認めなければなりません。アドバイスをいただければ幸いです。