
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
jsp~jspにhiddenを使って変数...
-
VBAでダブルコーテーション入り...
-
[VBS]変数を定数に変換する方法...
-
エラーの意味は? Lvalue req...
-
processing エラーで、 "cannot...
-
EXCEL/VBA 変数の値をクリップ...
-
テキストボックスの値を変数に...
-
processing "フラグcheckをfals...
-
vba 最大値 条件分岐
-
PL/Iについて、教えてください。
-
DataTableの値を変数に代入したい
-
VBAでコマンドプロンプトの結果...
-
C言語 exitの使い方
-
excelの、ある数式内の{}の意...
-
Excel-vba 文字列と変数を...
-
VBAの定数の使い方で、計算値を...
-
フォームを開くときに、コンボ...
-
VBAで配列のNULL判定
-
数字の位ごとの値を表示するプ...
-
【for文】アスタリスクと$で図...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでダブルコーテーション入り...
-
エラーの意味は? Lvalue req...
-
jsp~jspにhiddenを使って変数...
-
EXCEL/VBA 変数の値をクリップ...
-
テキストボックスの値を変数に...
-
C言語 アロー演算子について質...
-
整数xxxが大き過ぎますというエ...
-
[VBS]変数を定数に変換する方法...
-
processing エラーで、 "cannot...
-
gridViewの行選択解除
-
Variant型で宣言してるのにEmpt...
-
プログラミングで変数と関数の...
-
C言語
-
DataTableの値を変数に代入したい
-
VB6.0 DataGridでのfirstRowの...
-
DataColumn型の使用方法
-
String型ローカル変数の初期化...
-
VBA 1行で複数の代入を行った...
-
変数宣言と初期値代入の場所に...
-
valueChanged の引数について
おすすめ情報
すみません。
タイトルにDataColumn と書いていますが、条件代入で通せるなら、何がなんでもDataColumn を、というわけではありません。