2012-03-14 2 views
1

다른 속성을 가진 클래스가 있습니다.C# check insert 값이 비어 있거나 빈 문자열로 덮어 쓰기 때문에 null입니다.

그러나 항상 채워지지는 않습니다. 예를 들어 :

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의 경우 내가 이전 값을 유지하려면 행을 업데이트 할 때) "ABC"를 " ABC ","ABC ""ABC "

업데이트 행 : "문자열 ","문자열 ""ABC ","문자열 "

AND NOT : "문자열 ","문자열 "" ""문자열 "

수정 : 내가 근래에 두 테이블. 첫 번째 테이블에 삽입을 사용하고 속성 (일종의 임시 저장)을 추가 한 다음이 테이블 행을 '실제'테이블을 업데이트하기 위해 가져옵니다. 표 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

(:

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

또는 당신은 NULL과 빈 문자열을 모두 무시하려면 이전) 귀하의 요구 사항에 따라 업데이 트하십시오. 가장 좋은 것은 SP를 사용하는 것입니다. SP를 사용하면 값을 다시 얻은 다음 확인을 수행하는 대신 null 업데이트를 거부합니다. – Zenwalker

+0

내가 이해하고 있는지 확인하는 것.INSERT null이 좋으면 UPDATE null이 좋지 않을 때? – 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(ISNULL(@AttributeA,'')) = 0 THEN AttributeA ELSE @AttributeA END 
... 
관련 문제