0

Visual Studio 2010 Express を使用して、複数のテーブルとリレーションを含む Sql コンパクト データベース (sdf ファイル) を作成しました。このデータベースから、厳密に型指定されたデータセットを生成しました。

ここで、データセットにデータベースのコンテンツを入力したいと思います。そこで、次のコードを使用してデータベースに接続し、データセットを埋めました。

//My strongly typed dataset
localData = new LokalStorageDataSet();

//SqlCe-Connection
localConnection = new SqlCeConnection(@"Data Source=|DataDirectory|\TempStorage.sdf; Password='xyc';Persist Security Info=True");

localConnection.Open();
SqlCeCommand command = new SqlCeCommand("SELECT * FROM progstates", localConnection);
localDataAdapter = new SqlCeDataAdapter(command);

localDataAdapter.Fill(localData);

問題は、データベースに行があるにもかかわらず、データセットに行が追加されなかったことです。SqlCeReader を使用して SqlCeCommand の結果を読み取ると、リーダーは次の行を返します。

SqlCeDataReader dr = command.ExecuteReader();

        while (dr.Read())
        {
          ...
        }

データセットがデータセット内のテーブルから行を取得しない理由を教えてください。

編集: データセットで、要求したものと同じ列 (progstate) を持つ「テーブル」という名前の新しいデータテーブルが作成されましたが、このデータテーブルの行数は 0 であることがわかりました。

4

1 に答える 1

1
EDITED *****

Try This :-

//My strongly typed dataset
localData = new LokalStorageDataSet();

//SqlCe-Connection
localConnection = new SqlCeConnection(@"Data Source=|DataDirectory|\TempStorage.sdf; Password='xyc';Persist Security Info=True");


SqlCeCommand command = new SqlCeCommand("SELECT * FROM progstates", localConnection);

localConnection.Open();

var dataReader = command.ExecuteReader();

localData.Load(dataReader,LoadOption.Upsert,localData.Tables[0]);

localConnection.Close();

または、このように DataAdapter でこれを行うことはできません:-

localDataAdapter = new SqlCeDataAdapter();

SqlCeCommand command = new SqlCeCommand("SELECT * FROM progstates", localConnection);

localDataAdapter.SelectCommand = command;

localConnection.Open();

localDataAdapter.SelectCommand.ExecuteNonQuery();
localDataAdapter.Fill(localData.Tables[0]);

localConnection.Close();
于 2012-12-05T10:55:52.407 に答える