2009-07-28 3 views
2

型付きデータセットがds.GetXmlを使用してXMLに書き込まれると、null値を持つ列がXMLから削除されます。私はこれがスキーマが書かれていないなどのためですが、DataSetを解析してXMLを書く前にすべてのデータベースのNULLを空の文字列に変換せずにこれをオーバーライドする方法があるのでしょうか?XMLにnull値を持つ型付きデータセット


EDIT:追加情報:

1)私の主な仕事は、DataSetを取り、WebRequestクラスにそれをストリーミングすることです。だから私は、XMLドキュメント

Dim xmldoc As New Xml.XmlDocument() 
xmldoc.LoadXml(dsUpload.GetXml) 

を作成し、この

Using xw As XmlTextWriter = 
    New XmlTextWriter(req.GetRequestStream, System.Text.Encoding.Default) 
    xw.Formatting = Formatting.Indented 
    xmldoc.WriteTo(xw) 
    xw.Close() 
End Using 

2)私はがDBNullについて話しています

3)私が必要とするこれらのようにHttpWebRequestの(REQ)にXMLDOCをアップロードしています私がアップロードしようとしているサイトが含まれている必要があります(既存のシステムでなければなりません)


EDIT

1)私はコードが効率的ではないことに同意しますが、私が言及しなかったのはアップロードメソッドが別のクラスの汎用メソッドであることです。したがって、XMLDocを受け入れるのは、同じメソッドがXMLのデータセットとXMLのハードコードされた文字列を処理するためです。

2)はい、System.StringのみをString.Empty.Andに変換することができます。持っている。

3)レガシーシステムのコメントについてのLOL。ここではもっとばかげたことがあります。私は彼らがカンマで区切ったファイルのようにXMLを解析すると思われます。データにコンマがあるといつでもそれを捨てます! :)

+0

どのバージョンの.NETを使用していますか? –

+0

私は.NET 3.5を使用しています – superartsy

答えて

3

まず、XMLを文字列として処理しないことをお勧めします。常にXMLのルールに敏感なAPIを使用する必要があります。この場合、DataSet.WriteXmlのオーバーロードのいずれかを使用する必要があります。

第2に、「null」と言うと、DBNullを参照していますか?つまり、データベース用語ではNULLか、C#ではnull、VB.NETではNothingの値を参照していますか?

最後に、なぜこれらの列が表示されますか?彼らはスペースを取っているだけです。


編集:コードへ

  1. 訂正:このコードは非効率的である:、XML文字列にDataSetを保存し、その後XmlDocumentにロードするために、再度XMLをパースして、最後に書き込み要求ストリームにXMLを再度出力します。 XmlTextWriterも使用されますが、.NET 2.0では非推奨です。以下は、多くのクリーナーです:

    Dim settings As New XmlWriterSettings With {.Indent = True} 
    Using stream = req.GetRequestStream 
        Using writer = XmlWriter.Create(stream, settings) 
         dsUpload.WriteXml(writer, XmlWriteMode.IgnoreSchema) 
        End Using 
    End Using 
    
  2. 研究から、表示されるように列を強制する簡単な方法があるようには思えません。DBNull.Valueのすべての値をそのタイプのデフォルト値に置き換えることができます(String.Emptyは、列の.NETタイプがstringの場合にのみ機能します)。DateTimeカラムでは機能しません。 DBNull.Value以外に設定すると、テーブルのすべての列を調べて、AllowDBNullプロパティをfalseに設定する必要があると思います。

本当に必要なのは、アップロードするサイトがXMLを学ぶ必要があるということです。ソフトウェアがXMLを理解しておらず、XMLスキーマを提供して、どの列を期待するかを理解することができないのは、今日の時代には恥ずかしいことです。

あなたがこれがどのサイトであるかが気になるなら、私たちは皆公然と嘲笑してくれることを嬉しく思います。

:-)

関連する問題