2017-01-19 7 views
2

私はデータベースを作ろうとしています。フォームを作ったので、そこからデータを取得したいと思います。すべては大丈夫だと思われますが、私のデータベースは更新されず、変更されませんでした。私はローカルデータベースを使用しています。私は "出力ディレクトリにコピー"を変更しようとしましたが、何も起こっていません... SubmitChangesはOKのようです:メッセージが表示されますが、プログラムが終了した後にデータベースに新しいデータが含まれていません...同様の問題を抱えていましたが、解決策が見つかりませんでした。C#SubmitChangesは仕事しません

マイコード:

private void felvetButton_Click(object sender, EventArgs e) 
{ 
    Form2 f2 = new Form2(); 
    if (f2.ShowDialog() == DialogResult.OK) 
    { 
     Match m = new Match(); 
     try 
     { 
      m.datum = f2.datumTextBox.Text; 
      m.mod_fk = Convert.ToInt32(f2.modTextBox.Text); 
      m.acc_fk = Convert.ToInt32(f2.accTextBox.Text); 
      m.champion = f2.champTextBox.Text; 
      m.szerep_fk = Convert.ToInt32(f2.roleTextBox.Text); 
      m.kimenet = f2.resultTextBox.Text; 
      m.mhossz = f2.lengthTextBox.Text; 
      m.kill = Convert.ToInt32(f2.killTextBox.Text); 
      m.death = Convert.ToInt32(f2.deathTextBox.Text); 
      m.assist = Convert.ToInt32(f2.assistTextBox.Text); 
      m.kda = float.Parse(f2.kdaTextBox.Text); 
      m.killpart = float.Parse(f2.kpTextBox.Text); 
      m.farm = Convert.ToInt32(f2.farmTextBox.Text); 
      m.ward = Convert.ToInt32(f2.wardTextBox.Text); 
      m.redward = Convert.ToInt32(f2.redwTextBox.Text); 

      db.SubmitChanges(); 
      MessageBox.Show("New match added to the database!"); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 
} 
+3

あなたは送信したい変更をdbに伝えませんでした。関連する限り、あなたの 'match'オブジェクトとは何の関係もありません - ' f2'オブジェクトと同じです。 – Amy

+0

とにかく 'db'とは何ですか?しかしAmyのように、あなたはそれに 'm'を関連付ける必要があります。 – DavidG

+1

また、ネストされたtry/catchブロックは必要ありません。外部ブロックは、SubmitChanges()呼び出しによってスローされた例外をすべて捕捉します。 – squillman

答えて

4

は、あなたがこの新しいオブジェクトの実体層を意識する必要はありませんか?私はあなたが新しいエンティティのためにこのような何かを呼び出す必要があります想像:

db.Matches.InsertOnSubmit(match); 

その、このエンティティ層を介してデータベースからエンティティをロードし、それらを変更し、実体層は、すでに既存のオブジェクトを知っているので、db.SubmitChanges()を使用して完全に罰金!エンティティレイヤーに参照がない場合、この新しいオブジェクトについてどのように知っているはずですか?

+0

や 'db.Matches.Add(試合)'あなたはEFを使用している場合、<= 6 – smoksnes

+0

私はあなたが言ったことをやった、と私はそれがミッシングリンクに気づきました! IDENTITY_INSERTがOFFに設定されている場合、テーブル 'IDENTITY_INSERTが設定されているとき'のID列に明示的な値を挿入できません。プログラムでは、私は 'サービスベースのデータベース'と 'Linq to SQLクラス'を持っています。同じコードを使って同様のプログラムを作成していましたが、それはうまくいきました。データベースとは何かだと思います。何か案が? –

+1

DB内のテーブルにautoincrementカラムがあり、このカラムの値を手動で設定しようとしていることを意味します。この列を挿入から除外するか、テーブルID列にIsIdentity = falseを設定します。 –

関連する問題