C#
イディオム4: DataRow.Field<T>()でNullable<T>受け(業務系最強)
出典: SQL Server の DBNull を C# で安全にハンドリングする5つのイディオム — イディオム4: DataRow.Field<T>()でNullable<T>受け(業務系最強)
using System.Data;
DataRow row = dt.Rows[0];
//値型→ Nullable<T>で受ける
int? amount = row.Field<int?>("amount"); // DBNull → nullに自動変換
DateTime? createdAt = row.Field<DateTime?>("created_at");
//参照型はNullable不要
string name = row.Field<string>("name"); // DBNull → nullに自動変換
▸ この snippet は実行結果未収録
▸ 実行結果は未収録です
Source収録記事
この snippet は記事の「イディオム4: DataRow.Field<T>()でNullable<T>受け(業務系最強)」セクションに登場する。コードの前後の文脈・ハマりどころの解説は記事本文で。
同じ記事から
10 件DataRow row = dt.Rows[0]; object val = row["bikou"]; //この時点で値はobject型 string bikou = val is DBNull未収録
イディオム1: is DBNullで直接比較する基本形
#12f251f72d35
//整数列を扱う場合 int? amount = row["amount"] is DBNull ? (int?)null : Convert.ToInt32(row["amount"]);未収録
イディオム1: is DBNullで直接比較する基本形
#0dee0b27ad7e
//文字列列のnull安全取得 string bikou = Convert.IsDBNull(row["bikou"])? null : row["bikou"].ToString(); //あるいは??と組み合わせて空文字フォールバック未収録
イディオム2: Convert.IsDBNull + ??演算子のシンプルパターン
#769f7a7bda55
//罠:Convert.ToInt32(DBNull.Value)は0を返す int amount = Convert.ToInt32(row["amount"]); // row["amount"] がDBNullだとamount = 0になる //「金額0円」と「未入力」を区別したい業務系では事故の元未収録
イディオム2: Convert.IsDBNull + ??演算子のシンプルパターン
#f6d9581c23a1
using (var conn = new SqlConnection(connStr)) using (var cmd = new SqlCommand("SELECT id, name, amount FROM customers", conn)) { conn.Open();未収録
イディオム3: DataReader.IsDBNull(i)で読み取り時に分岐
#5206497a1ab8
//拡張メソッド化すると行が圧縮できる public static class SqlReaderExtensions { public static T? GetNullable<T>(this SqlDataReader reader, int ordinal)未収録
イディオム3: DataReader.IsDBNull(i)で読み取り時に分岐
#13fb96000b24
