|
分類:[C#]
VisualC#2005で開発しています。 ボタンを押された時にデータを登録し、登録したデータを一覧として画面に表示しています。 一度一覧に表示されたデータは、カラムの一部を更新します。(一覧に表示された回数を数値で管理)
2度目ボタンを押した場合、一度一覧に表示されたデータかどうかチェックのために検索をするのですが 正しいデータが取得できません。(1に更新されてるはずが0が取得される)
DBはSQLServer、登録と更新は同じテーブルです。登録のみ、更新のみの場合はうまくいきます。 データベースには正しいデータが登録されています。 SQL文はあっています。試しにManagement Studio Expressで実行すると正しいデータがとれます。 なぜかプログラム上で、登録、更新を行うと取得データがおかしくなります。 おかしくなるのは、更新したカラム部分だけで他のカラムは正しいデータです。 原因がさっぱりわかりません。
以下、簡略したソース
public partial class testForm : Form{ public void Btn_Click(object sender, EventArgs e){ Bclass b = new Bclass(); b.insertData(); b.selectData(); b.updateData(); //画面表示処理 ・・・ } }
class Bclass{ //登録処理 public void insertData() { using (TransactionScope txnScope = new TransactionScope()) { using (SqlConnection cn = new SqlConnection()) { SqlCommand com = null; try { cn.ConnectionString = "接続文字列"; cn.Open(); using (com = new SqlCommand()) { com.Connection = cn; com.CommandText = "SQL文"; com.ExecuteNonQuery(); } } catch (Exception ex) { } finally { if (com != null) { com.Dispose(); } if (cn != null) { cn.Close(); cn.Dispose(); } } txnScope.Complete(); } } }
//更新処理 public void updateData() { using (TransactionScope txnScope = new TransactionScope()) { using (SqlConnection cn = new SqlConnection()) { SqlCommand com = null; try { cn.ConnectionString = "接続文字列"; cn.Open(); using (com = new SqlCommand()) { com.Connection = cn; com.CommandText = "SQL文"; com.ExecuteNonQuery(); } } catch (Exception ex) { } finally { if (com != null) { com.Dispose(); } if (cn != null) { cn.Close(); cn.Dispose(); } } } txnScope.Complete(); } }
//検索処理 public void selectData() { SqlConnection cn = new SqlConnection(); SqlDataReader dr = null; SqlCommand com = null; try { cn.ConnectionString = "接続文字列"; cn.Open(); com = new SqlCommand("SQL文", cn); dr = com.ExecuteReader(); while (dr.Read()) { System.Diagnostics.Debug.WriteLine(dr.GetInt32(0)); System.Diagnostics.Debug.WriteLine(dr.GetInt32(1));//←更新したはずがデータが不正 System.Diagnostics.Debug.WriteLine(dr.GetInt32(2));//←更新したはずがデータが不正 System.Diagnostics.Debug.WriteLine(dr.GetInt32(3)); } } catch (Exception ex) { } finally { if (dr != null) { dr.Close(); dr.Dispose(); } if (com != null) { com.Dispose(); } if (cn != null) { cn.Close(); cn.Dispose(); } } } }
|