C# : データベースを DataSet クラスで更新する / フィールドに値をセットして Update

更新の SQL を作成せずに、DataRow オブジェクトの中のフィールドに対して個別にデータをセットします。ここでは、 System.Data.SqlClient を使用していますが、OleDb や Odbc でも同じです。

▼ DataAdapter を使用した更新方法のサンプル
DataAdapter.Update(DataSet) Method
▼ 列にデータをセットする方法のサンプル
DataColumn Class
▼ 各オブジェクトの参照方法のサンプル
DataSet.Tables Property
▼ 接続からの全体像
DataSet Class
▼ DataSet 内の Table と言う名称について
複数のselect文をまとめて実行するには?
using System;
using System.Data;
using System.Data.SqlClient;

namespace DBUpdate1
{
	class Program
	{
		static void Main(string[] args)
		{
			DataSet dataSet = new DataSet();
			string connectionString;
			string queryString = "select * from 社員マスタ where 社員コード = '0001'";

			SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
			// 接続用のパラメータを追加
			builder.Add("Data Source", "layla");
			builder.Add("Initial Catalog", "lightbox");
			builder.Add("User ID", "sa");
			builder.Add("Password", "");

			// 接続文字列を取得
			connectionString = builder.ConnectionString;

			using (SqlConnection connection = new SqlConnection(connectionString))
			{
				// 接続
				connection.Open();
				SqlDataAdapter adapter = new SqlDataAdapter();
				// 参照用のマップを追加
				adapter.TableMappings.Add("Table", "社員マスタ");

				// SQL 作成
				SqlCommand command = new SqlCommand(queryString,connection);
				command.CommandType = CommandType.Text;
				adapter.SelectCommand = command;

				// 更新用のオブジェクトを準備
				SqlCommandBuilder commandBuilder = new SqlCommandBuilder(adapter);

				// データを取り出す
				adapter.Fill(dataSet);

				// テーブルを取得
				DataTable dataTable = dataSet.Tables["社員マスタ"];

				// 行と列の数( ここでは行は 1 )
				Console.WriteLine($"行数 : {dataTable.Rows.Count}");
				Console.WriteLine($"列数 : {dataTable.Columns.Count}");

				// 行
				DataRow row = dataTable.Rows[0];

				// 列の定義
				DataColumn column = dataTable.Columns["氏名"];
				Console.WriteLine($"氏名 : {column.DataType.ToString()}");
				column = dataTable.Columns["給与"];
				Console.WriteLine($"給与 : {column.DataType.ToString()}");
				column = dataTable.Columns["手当"];
				Console.WriteLine($"手当 : {column.DataType.ToString()}");
				column = dataTable.Columns["生年月日"];
				Console.WriteLine($"生年月日 : {column.DataType.ToString()}");

				// 列の正確なデータの取り出し
				string simei = row.Field<string>("氏名");
				Console.WriteLine(simei);
				int kyuyo = row.Field<int>("給与");
				Console.WriteLine(kyuyo);
				DateTime birth = row.Field<DateTime>("生年月日");
				Console.WriteLine($"{birth.ToShortDateString()}");

				// データのセット
				row["氏名"] = "山田 太郎";
				// 整数のセット
				row["給与"] = 10000;
				// NULL のセット
				row["手当"] = DBNull.Value;
				// 日付のセット
				row["生年月日"] = DateTime.Parse("1999/01/02");

				// 更新用のコマンドを取得
				adapter.UpdateCommand = commandBuilder.GetUpdateCommand();
				// 更新実行
				adapter.Update(dataSet);
			}

			// 一時停止
			Console.ReadLine();
		}
	}
}


更新の無い場合のデータ読み出し

接続準備等は同じなので、パラメータのセットの仕方を別バリエーションで行っています。
using System;
using System.Data.SqlClient;

namespace DBSelect
{
	class Program
	{
		static void Main(string[] args)
		{
			string connectionString;
			string queryString = "select * from 社員マスタ order by 社員コード";

			SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
			// 接続用のパラメータを追加
			builder.Add("Data Source", "layla");
			builder.Add("Initial Catalog", "lightbox");
			builder.Add("User ID", "sa");
			builder.Add("Password", "");

			// 接続文字列を取得
			connectionString = builder.ConnectionString;

			using (SqlConnection connection = new SqlConnection(connectionString))
			using (SqlCommand command = new SqlCommand())
			{

				// *********************
				// 接続
				// *********************
				connection.Open();
				// コマンドオブジェクトに接続をセット
				command.Connection = connection;
				// コマンドを通常 SQL用に変更
				command.CommandType = System.Data.CommandType.Text;

				// *********************
				// 実行 SQL
				// *********************
				command.CommandText = queryString;

				// *********************
				// レコードセット取得
				// *********************
				using (SqlDataReader reader = command.ExecuteReader())
				{

					// *********************
					// 列数
					// *********************
					int nCols = reader.FieldCount;

					// データ取得と表示
					int row_cnt = 0;
					while (reader.Read())
					{

						row_cnt++;

						// 初回のみ、タイトル文字列を設定
						if (row_cnt == 1)
						{
							for (int idx = 0; idx < nCols; idx++)
							{
								Console.Write($"{reader.GetName(idx)}  ");
							}
							Console.WriteLine();
						}

						// 行データ
						for (int idx = 0; idx < nCols; idx++)
						{

							// NULL でない場合
							if (!reader.IsDBNull(idx))
							{
								// 列のデータ型を取得
								Type fldType = reader.GetFieldType(idx);

								// 文字列
								if (fldType.Name == "String")
								{
									Console.Write($"{reader.GetValue(idx).ToString()}  ");
								}
								else if (fldType.Name == "Int32")
								{
									Console.Write($"{reader.GetInt32(idx)}  ");
								}
								else if (fldType.Name == "DateTime")
								{
									Console.Write($"{reader.GetDateTime(idx).ToShortDateString()}  ");
								}
								else
								{
									Console.Write($"{reader.GetValue(idx).ToString()}");
								}

							}
						}

						Console.WriteLine();

					}

					// リーダを使い終わったので閉じる
					reader.Close();

					connection.Close();
				}

			}       // 最外の using の終わり

			Console.ReadLine();
		}
	}
}