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.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関連については勉強します。
No.2ベストアンサー
- 回答日時:
これ使って、
変数名はそのままで書くと、
decimal? a;
// どっかでaの値が決まる
a = b == 0 ? null : b;
table.SetField("列名", a);
じゃダメ?
ご回答ありがとうございます。
途中参加のプロジェクトでして、他ソースを見た感じでDataRowはDBNull.Valueくらいしかブランクは入れられないものと思ってしまっていました。
null許容のデータセットメソッドがあったのですね。
助かります。
先の回答内容とプロジェクトのコーディングルールなどを吟味して、対応していこうと思います。
SetFieldメソッドは画期的でしたので、ベストアンサーとさせて頂きます。
お探しの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でダブルコーテーション入り...
-
EXCEL/VBA 変数の値をクリップ...
-
C言語 列挙型(enum型)変数について
-
processing エラーで、 "cannot...
-
テキストボックスの値を変数に...
-
umu *= 2;てどんな意味があるの...
-
[VBS]変数を定数に変換する方法...
-
【VBA】複合代入演算子
-
7行テトリスコードで分からな...
-
datagridviewに行...
-
Variant型で宣言してるのにEmpt...
-
整数xxxが大き過ぎますというエ...
-
i++と++i ってどう違うのですか?
-
画像のプログラムに関して質問...
-
C言語(高校1年の内容)について
-
Java認定試験3級の問題です。 ...
-
C言語 exitの使い方
-
フォームを開くときに、コンボ...
-
エクセルへのデータの貼付時に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでダブルコーテーション入り...
-
エラーの意味は? Lvalue req...
-
C言語 列挙型(enum型)変数について
-
EXCEL/VBA 変数の値をクリップ...
-
整数xxxが大き過ぎますというエ...
-
テキストボックスの値を変数に...
-
[VBS]変数を定数に変換する方法...
-
Variant型で宣言してるのにEmpt...
-
jsp~jspにhiddenを使って変数...
-
processing エラーで、 "cannot...
-
python の 連鎖代入の文法
-
i++と++i ってどう違うのですか?
-
プログラミングで変数と関数の...
-
C言語 アロー演算子について質...
-
「%」を使って、偶数か奇数かを...
-
JavaScriptをURLから直接実行し...
-
VBA 1行で複数の代入を行った...
-
ExcelのVBAでをA列に第0〜19項...
-
無名関数のメリットがよくわか...
-
コマンドプロンプト バッチ|結...
おすすめ情報
すみません。
タイトルにDataColumn と書いていますが、条件代入で通せるなら、何がなんでもDataColumn を、というわけではありません。