私は異なる属性を持つクラスを持っています。空の文字列で上書きするために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値を渡したいものをパラメータで
を最初にすべての列の値を取得する必要があります(前へ)、必要に応じて更新してください。私が思うに最高ののは、あなたが価値を最初に習得してからチェックをしているのではなく、ヌルアップデートを拒否するSPを利用することだと思います。 – Zenwalker
私が理解していることを確認するだけです。INSERT nullがOKの場合、UPDATE NULLがOKではない場合 – Steve
ステートメントはINSERTステートメントです。その場合、古い価値はありません! –