1

データベース内の学生を更新するための次の関数を作成しました。

public bool UpdateStudent(Student stu)
{
   Console.WriteLine("StudentManger.UpdateStudent): Called");

   int rowsChanged = 0;

   using (var cnn = new SqlConnection(
          Properties.Settings.Default.universityConnectionString))
   {
      using (var cmd = new SqlCommand("UPDATE Student " +
              "SET FirstName = @FirstName, " +
              "lastName = @LastName, " +
              "birth = @birth " +
              "WHERE id = @id", cnn))
      {
        cmd.Parameters.Add(new SqlParameter("@FirstName", stu.FirstName));
        cmd.Parameters.Add(new SqlParameter("@LastName", stu.LastName));
        cmd.Parameters.Add(new SqlParameter("@id", stu.ID));
        cmd.Parameters.Add(new SqlParameter("@birth", stu.Birth));

        cnn.Open();
        rowsChanged = (int)cmd.ExecuteNonQuery();
        Properties.Settings.Default.Save();
      }
    }
    Properties.Settings.Default.Save();
    return (rowsChanged != 0);
  }

しかし、関数を呼び出すと、実際にはデータがデータベースに保存されません

誰かが理由を教えてもらえますか?

4

1 に答える 1

3

チャットで提供したソリューション全体と情報があれば、コードは問題ありません。問題は、プロジェクトで .mdf データベース ファイルが "Copy to Output Directory": "Always" に設定されていることです。このプロパティを「新しい場合はコピーする」(または「コピーしない」で自分で bin フォルダーに移動する) に変更すると、アプリケーションを再実行しても変更が上書きされません。重要なのは、アプリケーションで行った変更が、プロジェクトのルート ディレクトリにある.mdf データベース ファイルに反映されていないことです。実際には /bin フォルダーにコピーされ、そこに変更が保存されます。したがって、「出力ディレクトリにコピー」プロパティを変更しないと、ビルドするたびにルートから /bin フォルダにコピーされます。変更が実際には永続化されているのに、永続化されていないこと。

于 2012-05-24T03:32:11.367 に答える