データセットを使用したレコード登録・更新・削除
Visual C#.NETのお勉強中です。DB操作には「データセット」というものを良く使うようですが、よくわかっていないので勉強してみました。
使用したテーブルです。
drop table Table01; create table Table01 ( Id int IDENTITY PRIMARY KEY, Nchar1 nchar(100), Nvarchar1 nvarchar(1000), Ntext1 ntext, Numeric1 numeric(10,0), Numeric2 numeric(10,2), Int1 int, Float1 float, Datetime1 datetime, CreateDatetime datetime NOT NULL, UpdateDatetime datetime NOT NULL );
レコードの登録・更新・削除を行うソース部分です。
using System; using System.Diagnostics; using System.Windows.Forms; namespace Sqlce01 { public partial class Form1 : Form { private const string APP_NAME = "Sqlce01"; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { // TODO: このコード行はデータを 'sqlce01DataSet1.Table01' テーブルに読み込みます。必要に応じて移動、または削除をしてください。 this.table01TableAdapter.Fill(this.sqlce01DataSet.Table01); } private void buttonInsert_Click(object sender, EventArgs e) { DateTime now = DateTime.Now; // 新規レコードオブジェクト作成 Sqlce01DataSet.Table01Row row = sqlce01DataSet.Table01.NewTable01Row(); row.Nchar1 = textBoxNchar1.Text; row.Nvarchar1 = textBoxNvarchar1.Text; row.Ntext1 = textBoxNtext.Text; row.Numeric1 = numericUpDownNumeric1.Value; row.Numeric2 = numericUpDownNumeric2.Value; row.Int1 = (int)numericUpDownInt1.Value; row.Float1 = (float)numericUpDownFloat1.Value; row.Datetime1 = dateTimePickerDatetime1.Value; row.CreateDatetime = now; row.UpdateDatetime = now; sqlce01DataSet.Table01.AddTable01Row(row); // DB反映 int result = table01TableAdapter.Update(sqlce01DataSet); Debug.WriteLine("レコード登録結果=" + result); // 画面反映 this.table01TableAdapter.Fill(this.sqlce01DataSet.Table01); dataGridView1.Refresh(); CopyToForm(null); } private void buttonUpdate_Click(object sender, EventArgs e) { DateTime now = DateTime.Now; // レコード更新 // 主キーに対して自動生成されるFindByXxxを使用して、レコードを特定しています。 int id = Int32.Parse(textBoxId.Text); Sqlce01DataSet.Table01Row row = sqlce01DataSet.Table01.FindById(id); row.Nchar1 = textBoxNchar1.Text; row.Nvarchar1 = textBoxNvarchar1.Text; row.Ntext1 = textBoxNtext.Text; row.Numeric1 = numericUpDownNumeric1.Value; row.Numeric2 = numericUpDownNumeric2.Value; row.Int1 = (int)numericUpDownInt1.Value; row.Float1 = (float)numericUpDownFloat1.Value; if (dateTimePickerDatetime1.Checked) { row.Datetime1 = dateTimePickerDatetime1.Value; } else { row.SetDatetime1Null(); } row.UpdateDatetime = now; // DB反映 int result = table01TableAdapter.Update(sqlce01DataSet); Debug.WriteLine("レコード更新結果=" + result); // 画面反映 this.table01TableAdapter.Fill(this.sqlce01DataSet.Table01); dataGridView1.Refresh(); CopyToForm(null); } private void buttonDelete_Click(object sender, EventArgs e) { // レコード削除 // 主キーに対して自動生成されるFindByXxxを使用して、レコードを特定しています。 int id = Int32.Parse(textBoxId.Text); Sqlce01DataSet.Table01Row row = sqlce01DataSet.Table01.FindById(id); row.Delete(); // DB反映 int result = table01TableAdapter.Update(sqlce01DataSet); Debug.WriteLine("レコード削除結果=" + result); // 画面反映 this.table01TableAdapter.Fill(this.sqlce01DataSet.Table01); dataGridView1.Refresh(); CopyToForm(null); } private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) { Sqlce01DataSet.Table01Row row = null; // 選択行のレコードを取得する。 DataGridViewRow selectedRow = dataGridView1.Rows[e.RowIndex]; if (selectedRow.Cells[0].Value != null && !string.IsNullOrEmpty(selectedRow.Cells[0].Value.ToString())) { int id = (int)selectedRow.Cells[0].Value; row = sqlce01DataSet.Table01.FindById(id); } // データを画面表示する。 CopyToForm(row); } private void CopyToForm(Sqlce01DataSet.Table01Row row) { DateTime now = DateTime.Now; textBoxId.Text = row == null ? "": row.Id.ToString(); textBoxNchar1.Text = row == null ? "": row.Nchar1; textBoxNvarchar1.Text = row == null ? "": row.Nvarchar1; textBoxNtext.Text = row == null ? "": row.Ntext1; numericUpDownNumeric1.Value = row == null ? 0: row.Numeric1; numericUpDownNumeric2.Value = row == null ? 0: row.Numeric2; numericUpDownInt1.Value = row == null ? 0: row.Int1; numericUpDownFloat1.Value = row == null ? 0: Decimal.Parse(row.Float1.ToString()); dateTimePickerDatetime1.Value = row == null || row.IsDatetime1Null() ? now : row.Datetime1; dateTimePickerDatetime1.Checked = row == null ? false : !row.IsDatetime1Null(); textBoxCreateDatetime.Text = row == null ? "": row.CreateDatetime.ToString(); textBoxUpdateDatetime.Text = row == null ? "": row.UpdateDatetime.ToString(); } } }
動作環境
- OS : Windows 7
- Visual Studio : Visual C# 2008 Express Edition