2011-08-14 13 views
1

私は、DataSetと呼ばれるMYDSを持っているし、私のようなループに直接アクセスすることによってそれにフィールドを編集する場合、以下:私はデータベース内で行われ、これらの変更を行う方法データベースを変更した後でDataSetを保存する方法は?

for (int i = 0; i < myDS.Tables[TableName].Rows.Count; i++) 
{ 

    //some function or web method to get the id value of the record being updated 
    int n = getNewNumber(); 

    //updating the dataset record according to some condition 
    if (n == 0) 
    { 
     myDS.Tables[TableName].Rows[i]["id"] = n; 
     myDS.Tables[TableName].Rows[i]["description"] = "some data"; 
    } 
    else 
    { 
     myDS.Tables[TableName].Rows[i]["id"] = n; 
     myDS.Tables[TableName].Rows[i]["description"] = "new data"; 
    } 
} 

私はGridViewコントロールでそれを見ることができるよう私はdatabind()を行うが、データベースは影響を受けず、OdbcDataAdapterとOdbcCommandBuilderの更新メソッド&の更新メソッドを使用しようとしていますか?

+0

後に2行を入力する必要があり**何**データベースとバージョン、その使用しています? –

+0

データベースはsybaseであり、データベース接続にはodbcを使用しているため、ODBCが使用されている間はデータベースエンジン自体は問題になりません。 – TopDeveloper

答えて

1

この記事に示すTableAdapter.Updateプロセスを試してみてください:How to: Update Records in a Database

また、接続しようとしているデータベースに必要なアクセス権だけでなく、目的のテーブルのレコードを更新する権限も持っていることを確認してください。コードの更新を妨げるSQL Server構成の問題がある可能性があります。

+0

このリンクは良いですが、私はset文節とwhere節の両方で主キーを変更しないと思っていたので、Update文の問題を発見しました。 – TopDeveloper

0

odbcなので、OdbcDataAdapterを使用することができます。次に電話をしてください:

adapter.Update(myDS.Tables[TableName]); 

免責事項個人的には、私は決して....何もデータセットを使用していません。 YMMV。

+0

私はこれを行いましたが、データベースは新しい更新に応じて変更されず、プライマリキー(ID)も更新され、使用できないため、更新コマンドをループ内で更新する必要があるため、 Where句で指定します。 – TopDeveloper

0

あなたがループ

myDS.AcceptChanges(); 
adapter.Update(myDS.Tables[TableName]); 
+0

しかし、アダプタはどこですか?コードで見ることができるように、OPはDataSetのみを使用します。アダプターが利用できない場合、またはおそらく内部の場合はどうなりますか? (Visual Studioでは、ListBoxを新しいデータソースにバインドするときなどにDataSetが自動生成されることがあります)。 DataSetオブジェクトのみが使用可能な場合、データベースはどのように保存されますか? – Dexter

関連する問題