- - PR -
XMLのDiffGramを使ったDataSet更新
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-01-06 19:44
外部で編集されたデータをDiffGram形式で読み取ってデータベースに適用させる
プログラムを作っています。 以下がソースです。 Dim ds as new DataSet Dim conn As New OleDbConnection("○○○") Dim adapter As New OleDbDataAdapter() Dim queryString As String = "SELECT T_1.* FROM T_1" adapter.SelectCommand = new OleDbCommand(queryString,conn) adapter.Fill(ds,"T_1") Dim updateDS as new DataSet conn.Open() updateDS = ds.Clone() updateDS.ReadXml(Request.InputStream, XmlReadMode.DiffGram) ds.Merge(updateDS) adapter.Update(ds, "T_1") ds.AcceptChanges() conn.Close() ソースはあっているような気がしているのですがエラーがでます。 updateDS.ReadXml(Request.InputStream, XmlReadMode.DiffGram) の行で The root element is missing. Exception Details: System.Xml.XmlException: The root element is missing. というエラーです。 きっとRequest.InputStreamが問題なのではと思っているのですが Request.InputStreamを視覚的に確認する方法がわかりません。 MSDNで調べた以下のソースを試すと Dim str As Stream, strmContents As String Dim counter, strLen, strRead As Integer ' Create a Stream object. str = Request.InputStream ' Find number of bytes in stream. strLen = CInt(str.Length) ' Create a byte array. Dim strArr(strLen) As Byte ' Read stream into byte array. strRead = str.Read(strArr,0,strLen) ' Convert byte array to a text string. For counter = 0 To strLen-1 strmContents = strmContents & strArr(counter).ToString() Next counter Diffgram形式の文字列ではなく数字の羅列が表示されます。 もし参考になるページ等がございましたら教えて下さい。宜しくお願いします。 開発環境は手打ちです。サーバーはwin server2003です。(外国サーバーです) | ||||
|
投稿日時: 2005-01-07 21:35
エラーが「The root element is missing.」なので、Request.InputStreamの中身が問題でしょう。ここでStreamオブジェクトが取れているのだから、そのままファイルにでも吐き出してやればいいのでは? で、Requestの型はなんでしょう?これってHttpRequest?そのようですね。MSDNの…というのも、HttpRequest.InputStreamの説明のところに書いてあるものですね。数字の羅列?そうですね。Byte型に放り込んで、それの“値”を出力していますから。 それで、これって、クライアントがサーバに投げる問い合わせ電文そのものじゃないですか?その中から特定の要素を抜き出す必要があるんじゃないですか? _________________ | ||||
|
投稿日時: 2005-01-11 10:02
Jittaさん、返信ありがとうございます。
Request.InputStreamの中身を見るために、最初 Dim sw As StreamWriter sw.Write(Request.InputStream) とやってしまいだめでした。 Request.SaveAsを使うとうまくいきました。 中身を見てみると一見大丈夫(Diffgramとして)なのですが これから細かくチェックしてみようと思います。 Diffgramをサーバーに送りつけた主はFlashMX2004のXMLconnectorで ノンコードで作成されたDiffgramですので構文のミスよりは エンコードの問題なのかもと、現時点では推測しています。 わかり次第報告致します。 | ||||
|
投稿日時: 2005-01-24 18:29
結果の報告です。
やはりエンコードに問題があったので(外国サーバだからでしょうか) W_Stream = Request.InputStream Dim SrFromStream As StreamReader = New StreamReader(W_Stream, Encoding.GetEncoding(932)) W_Str = "<?xml version=""1.0"" encoding=""Shift_JIS"" ?>" & SrFromStream.ReadToEnd() として「Shift_JIS」にすることによってうまくいきました。 |
1