2009-05-07 11 views
1

私のプロジェクトでこのコードを書いていますが、アプリケーションの値を変更すると例外が発生し、データベースを更新しません。新しいものの、データの削除や編集はしないでください。私のアプリケーションでは値を変更しますが、データベースでは更新しません

CODE:

private void btnLecOk_Click(object sender, EventArgs e) 
    { 
      DataRow dr = (lecturesBindingSource.Current as DataRowView).Row; 
      dr["Section_ID"] = Convert.ToInt32(cmbLec_Section_Name.SelectedValue); 
      dr["Lecture_Type_ID"] = Convert.ToInt32(cmbLec_Lecture_Type.SelectedValue); 
      dr["Practicable_Unit"] = numLec_Practicable_Unit.Value; 
      dr["theoretical_Unit"] = numLec_Theoretical_Unit.Value; 
      dr["Term"] = numLec_Term.Value; 

      lecturesBindingSource.EndEdit(); 
      lecturesTableAdapter.Update(dsSchedule.Lectures); 
      EnableLectureControls(); 
    } 

例外:

System.Data.DBConcurrencyExceptionは、未処理 メッセージ= "同時実行違反:UpdateCommandの予想1つのレコード0に影響を与えた。" でしたソース= "System.Data" 行カウント= 1

SQLクエリの敵更新:

UPDATE講義 SET Lecture_Code = @Lecture_Code、SECTION_ID = @Section_ID、Lecture_Type_ID = @Lecture_Type_ID、Lecture_Name = @Lecture_Name 、 Practicable_Unit = @Practicable_Unit、theoretical_Unit = @theoretical_Unit、Lecture_Capacity = @Lecture_Capacity、TERM = @Term WHERE(Lecture_Code = @Original_Lecture_Code)AND(SECTION_ID = @Original_Section_ID)AND(Lecture_Type_ID = @Original_Lecture_Type_ID)AND (Lecture_Name = @Original_Lectu re_Name)AND(Practicable_Unit = @Original_Practicable_Unit)AND(theoretical_Unit = @Original_theoretical_Unit) AND(Lecture_Capacity = @Original_Lecture_Capacity)AND(期間= @Original_Term)

答えて

2

私はかつて同じ問題を抱えていたし、私が思い出すように、後に働きました影響を受けたデータベーステーブル内の関係プロパティの変更。挿入と更新の仕様をカスケードとして変更したが、この問題は再び発生しなかった。おそらく完璧な解決策ではありませんでした。

1

更新クエリには、その間に別のソースから更新されていない場合、データベースの行が更新または削除されることを保証するWHERE句が含まれています。

強く型付けされたdatase/tableadaptersによって提供される自動生成されたsqlクエリを使用したと思われますか?
tableadapterのSELECTクエリを指定するときは、「詳細オプション」に進みます。表示されるウィンドウには、「オプティミスティックな並行処理を使用する」というオプションがあります。これをオフにすると、データがアプリケーションにロードされてからデータベースで変更された値を上書きすることができます。更新ステートメントのWHERE節がはるかに小さくなることに気付くでしょう。

+0

ありがとうございました! –

関連する問題