2012-03-14 7 views
1

私は異なる属性を持つクラスを持っています。空の文字列で上書きするためにC#のチェック挿入値が空またはnullです。

ただし、必ずしも入力されているわけではありません。例えば:私のinsert文は次のようになります

Object.attributeA = "string"; 
Object.attributeB = "string"; 
Object.attributeC = null; 
Object.attributeD = "string"; 

string sql = @"INSERT INTO TABLE 
     (
attributeA, 
attributeB, 
attributeC, 
attributeAD 
) 
values 
(
@attributeA, 
@attributeB, 
@attributeC, 
@attributeAD 
);"; 
SqlParameter[] parameters = 
{ 
new SqlParameter("@attributeA", SqlDbType.NVarChar) {Value = attributeA}, 
new SqlParameter("@attributeB", SqlDbType.NVarChar) {Value = attributeB}, 
new SqlParameter("@attributeC", SqlDbType.NVarChar) {Value = attributeC}, 
new SqlParameter("@attributeD", SqlDbType.NVarChar) {Value = attributeD} 
}; 
ExecuteNoNQuery(sql, parameters); 

どのように私は、NULLを挿入できますか?

(確認するには、次の新しい値がnullの場合、私は古い値を保持したい行を更新するとき、で「」私は古い値権を上書きしますか?)

旧行 「ABC」」 ABC」 "ABC" "ABC"

更新行: "string"。 "string" は "ABC" "文字列"

AND NOT: "文字列" "文字列" "" "文字列"

編集: I hav 2つのテーブル。私は、最初のテーブルの挿入を使用して属性(一時保存の種類)を追加し、次に行のためのこのテーブルの行を '実際の'テーブルを更新します。表1の属性は、常に実表より大きくなります。そのため、実際のテーブルの属性を上書きするだけです。 "

私の更新機能は、次のようになります。

public void UpdateBatchToRealTable(Class, int id) 
    { 
     // Current Batch 
     DataTable dt = DAL.Batch(id); 

     // table 1 (temp table) -> table 2 (real table) 
     DataRow row = dt.Rows[0]; 

     Object.attributeA = row["attributeA"].ToString(); 
     Object.attributeB = row["attributeB"].ToString(); 
     Object.attributeC = row["attributeC"].ToString(); 
     Object.attributeD = row["attributeD"].ToString(); 
    } 
あなたがNULL値を渡したいものをパラメータで
+0

を最初にすべての列の値を取得する必要があります(前へ)、必要に応じて更新してください。私が思うに最高ののは、あなたが価値を最初に習得してからチェックをしているのではなく、ヌルアップデートを拒否するSPを利用することだと思います。 – Zenwalker

+0

私が理解していることを確認するだけです。INSERT nullがOKの場合、UPDATE NULLがOKではない場合 – Steve

+0

ステートメントはINSERTステートメントです。その場合、古い価値はありません! –

答えて

0

使用DBNull.Value値........

+0

これは何か? //値がnullではない場合は上書きしますか? if(row ["attributeA"]!= DBNull.Value) { Oject.attributeA = row ["attribute"] ToString(); } – Danny

0

あなたは二重の質問を使用することができますマーク演算子。

Value = attributeA ?? DBNull.Value 

これは '??'の右側に値を割り当てます。左辺の値(この例ではattributeA)はnullです。

オブジェクトがnullの可能性がある場合に別のデフォルト値を割り当てたい場合には、これをあらゆる場所で使用できます。 (@AttributeAパラメータがNULLの場合はそのままAttributeAを残す

UPDATE Table 
SET AttributeA = ISNULL(@AttributeA, AttributeA) 
... 

:、あなたのような何かを行うことができ、私はあなたの質問を理解している場合

2

は(あなたはUPDATEについて尋ねているように見えるが、あなたのサンプルはINSERTです) DBNull.Value)。

それとも、空の文字列を無視したい場合:

UPDATE Table 
SET AttributeA = CASE WHEN LEN(@AttributeA) = 0 THEN AttributeA ELSE @AttributeA END 
... 

それとも、NULLと空の文字列の両方を無視する場合:そのために

UPDATE Table 
SET AttributeA = CASE WHEN LEN(ISNULL(@AttributeA,'')) = 0 THEN AttributeA ELSE @AttributeA END 
... 
関連する問題