2009-06-26 1 views
2

NULL 또는 DBNull.Value를 C# 데이터 서비스에서 저장된 구성으로 일부 구성 XML 매개 변수를 통해 보낼 수있는 방법이 있는지 궁금합니다.XML을 통해 proc를 저장 한 SQL에 NULL 값을 보낼 수있는 방법이 있습니까?

proc에서는 xml에서 약간의 값을 빼내고 싶지만 UI가 세 번째 상태를 허용하기 때문에 xml에서 들어오는 비트 값이 NULL 일 수 있습니다. 어떤 경우이든 무시하려고합니다. 해당 필드에 대한 SQL 갱신. 나는 C#을에서 XML로 NULL을 던질 때

 XElement xml = new XElement("XML"); 
     xml.Add(new XElement("SomeConfigValue", NULL)); 

그것은 어떤 값을 가진 노드가 기본값 보인다. 나는 SQL에서 조금으로 XML에서 값을 잡아하려고하면

<SomeConfigValue /> 

값은 벌금과 좋은 전부 0

select isnull(@Configuration.value('/Configuration[1]/SomeConfigValue [1]', 'bit'), NULL) 

로 해석됩니다. 말된다. 누군가가 아이디어를 제안 할 수 있다면 내가 궁금해 할 것입니다. 아이디어를 통해 내가 원하는 방식으로이 아이디어를 얻을 수 있습니다. 아마도 SQL 비트 유형에 의존 할 수 없지만 현재는 강력하게 형식을 지정하기 위해 다시 고려 중입니다.

들어오는 값이 1 또는 0

set @SomeConfigValue = isnull(@Configuration.value('/Configuration[1]/SomeConfigValue [1]', 'bit'), NULL) 

목표는이 NULL 인 경우 그 값을 업데이트 무시하거나하지 않는 것입니다하지 않으면 내가 NULL을 잡을 수 있도록하고 싶습니다

이 특정 SQL 비트 유형의 경우 1 또는 0

 update MyTable 
    set ConfigValue = 
      case 
     when @SomeConfigValue IS NULL then T.SomeConfigValue 
     else @SomeConfigValue 
    end from SomeTable T 
+0

가 표준이 없을 겁니다 어떻게해야합니까? – topwik

답변

1

표준 xml 직렬화에서 사용되는 방법론입니다 (IsNullable). XElement는 비슷한 속성을 가지고 있지 않지만 "xsi : nil"속성을 직접 추가 할 수 있으며 저장된 proc에서 해당 속성을 테스트 할 수 있습니다.

+0

내가 이런 식으로 제안하는거야? xml.Element ("NotificationId"). 추가 (새 XAttribute ("xsi : nil", true)); 해당 특성의 이름에 대한 표준을 따라야하는지 확실하지 않지만 특성 이름에 콜론을 사용할 수 없다는 예외가 표시됩니다. – topwik

+1

'xsi'는 네임 스페이스이고 'nil'만 특성 이름이기 때문입니다. 더 읽기 - http://www.w3.org/TR/xmlschema-1/#xsi_nil – arbiter

관련 문제