![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
C#でDataTable型のNUMBER型列にNULL or 0より大きい値を代入したく思っています。
とりあえずはできたのですが、いかんせんスマートではないため、綺麗にしたいのですが、どうにもうまくいきません。
ご教授頂けないでしょうか。
<とりあえず動いていた処理サンプル>
decimal a = 0;
if(条件) { a = 10; }
if(a == 0){
table[列名] = DBNull.Value;
}
else{
table[列名] = a;
}
※テーブルは作成済
上記を1行処理などスマートにできないものかと考えていますが、いくつか試したもののうまくいかず...
やってみたのは下記になります。
<条件代入>
decimal a = 0;
if(条件) { a = 10; }
table[列名] = a == 0 ? DBNull.Value : a;
これは代入2つの型合わずでエラー。
<DataColumn使用>
DataColumn dc = table.Columns[列名];
dc = DBNull.Value;
if(条件) {dc = 10;}
table[列名] = dc;
これはdcにDBNull.Value代入でエラーとなります。
案として出しているものは、どっちがいい、などのこだわりはないです。
キャストやDataColumn 型の使い方を変えれば動くのかもしれませんが、方法が分かりません。
申し訳ありませんが、ご教授お願い致します。
No.2ベストアンサー
- 回答日時:
これ使って、
変数名はそのままで書くと、
decimal? a;
// どっかでaの値が決まる
a = b == 0 ? null : b;
table.SetField("列名", a);
じゃダメ?
ご回答ありがとうございます。
途中参加のプロジェクトでして、他ソースを見た感じでDataRowはDBNull.Valueくらいしかブランクは入れられないものと思ってしまっていました。
null許容のデータセットメソッドがあったのですね。
助かります。
先の回答内容とプロジェクトのコーディングルールなどを吟味して、対応していこうと思います。
SetFieldメソッドは画期的でしたので、ベストアンサーとさせて頂きます。
No.1
- 回答日時:
とりあえずボックス化で型を合わせれば3項演算子は動くとは思います。
table[列名] = a == 0 ? DBNull.Value : (object)a;
(tableという変数がDataTableではなくDataRowだった場合)
案を見る限り、DataTable,DataColumn,DataRowがどういったものかわかっていなさそうなので、
その3つがどういったものかを理解したほうが良いかと思われます。
(1行で書く構文よりよっぽど重要)
ご回答ありがとうございました。
tableはDataRowでした。
説明不足ですみません。
object型へのキャストで動くことは、私も実際にやってみて確認が取れました。
(デバッグが通った程度の確認なので、SQLにINSERTをして別途確認します)
DataTable etcは仰る通り勉強不足です。
単純にDataTableはDataRowの集合体。
DataRowはDataColumnの集合体。
という感じに考えています。
そのため、
DataRow[列名]は「DataColumn = DataRow[列名]」と一緒。
DataRow[列名] = DBNull.Value が可なのに、DataColumn = DBNull.Valueはなぜできん!
みたいな気持ちでした。
もっと深いところまで見て、DataTable関連については勉強します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) マクロ実行時、自動で背景色を変えたい。 C列にあるチェックボックスをチェックするとB列に「TRUE」 4 2022/11/08 11:14
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) VBAで日付入力しているのですが 4 2023/03/02 11:25
- Visual Basic(VBA) VBA エクセル 条件の設定 1 2022/03/28 10:24
- Visual Basic(VBA) Sheet3から2つの条件でオートフィルターで抽出した個数をSheet2へ入力するマクロで、一つ目の 4 2023/01/12 23:40
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) VBAのトグルボタンでのマクロについて質問です 3 2022/10/10 17:23
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エラーの意味は? Lvalue req...
-
VBAでダブルコーテーション入り...
-
[VBS]変数を定数に変換する方法...
-
インクリメント演算子の前置(+...
-
Excel VBAでイコール二回使えま...
-
JavaScriptの関数宣言と関数式...
-
jsp~jspにhiddenを使って変数...
-
テキストボックスの値を変数に...
-
C言語 exitの使い方
-
配列の座標指定について。
-
正規表現で、英数記号を含むパ...
-
Excel-vba 文字列と変数を...
-
数字の位ごとの値を表示するプ...
-
配列の値を置換するにはどうす...
-
long型のランダムな値を返す方法
-
for the first timeとfirst tim...
-
c言語 プログラミング 等比数列...
-
Accessで文字列のバイト数読み込み
-
ファイルの特定行を取り出したい.
-
平均、最大値、最小値を表示す...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エラーの意味は? Lvalue req...
-
VBAでダブルコーテーション入り...
-
だれがとけるの?
-
jsp~jspにhiddenを使って変数...
-
テキストボックスの値を変数に...
-
EXCEL/VBA 変数の値をクリップ...
-
[VBS]変数を定数に変換する方法...
-
processing エラーで、 "cannot...
-
Variant型で宣言してるのにEmpt...
-
整数xxxが大き過ぎますというエ...
-
プログラミングで変数と関数の...
-
C言語 アロー演算子について質...
-
C言語 列挙型(enum型)変数について
-
i++と++i ってどう違うのですか?
-
切り上げ
-
VB6.0での条件文にある#の意味
-
インクリメント演算子の前置(+...
-
親ウィンドウの情報をインライ...
-
C言語 exitで終了した関数の戻...
-
Serialize(CArchive& ar)にて
おすすめ情報
すみません。
タイトルにDataColumn と書いていますが、条件代入で通せるなら、何がなんでもDataColumn を、というわけではありません。