2009-06-26 54 views
2

我想知道是否有一種方法,我可以通過一些配置xml參數從我的C#數據服務發送NULL或DBNull.Value到存儲過程。有沒有一種方法可以通過XML將NULL值發送到SQL存儲過程?

在proc中,我想從xml中提取一些值作爲一點,但因爲UI允許第三個狀態,所以從xml進入的位值可以爲NULL,在這種情況下,我想忽略任何該字段的SQL更新。

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

看來,當我從C#向xml中拋出NULL時,它默認爲沒有值的節點。

<SomeConfigValue /> 

當我試圖抓住從XML值在SQL位值被解釋爲0。

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

這是所有罰款和良好的。這說得通。我只是好奇,如果任何人都可以提出想法,我可以按照自己喜歡的方式進行工作。也許我不能依賴SQL位類型,但我現在正在重新考慮強類型。

我希望能夠抓住一個NULL,如果進來的值不是1或0。

set @SomeConfigValue = isnull(@Configuration.value('/Configuration[1]/SomeConfigValue [1]', 'bit'), 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 2009-07-07 16:40:09

回答

1

這裏標準xml序列化使用的方法 - IsNullable。 XElement沒有類似的屬性,但可以自己添加屬性「xsi:nil」,並在存儲過程中對其進行測試。

+0

你是否建議我這樣做? xml.Element(「NotificationId」)。Add(new XAttribute(「xsi:nil」,true)); 我不確定是否必須按照該屬性名稱的標準進行操作,但我得到的異常表明我無法在屬性名稱中使用冒號。 – topwik 2009-07-07 15:42:50

相關問題