2

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();
    }
}

現時点では、何が問題なのか見当がつかないことを認めなければなりません。アドバイスをいただければ幸いです。

4

2 に答える 2

2

.sdf をプロジェクトにコピーしましたか?

データが書き込まれているプロジェクトに .sdf をコピーするのはよくある間違いのようです。SQL スタジオのマネージャーは別のデータベースを見ています。

于 2012-04-25T20:56:55.853 に答える
0

DataAdapter を作成してから長い時間が経ちましたが、MSDN のドキュメントを見ると、電話する必要があると思います

da.UpdateCommand = comBuilder.GetUpdateCommand();

更新する前に。

于 2012-04-24T13:02:39.793 に答える