データセットを使用したレコード登録・更新・削除
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
