- PR -

オブジェクトをSQLServerのXML型のデータとして入れたいのですが。

1
投稿者投稿内容
さよこ
ベテラン
会議室デビュー日: 2005/10/13
投稿数: 78
投稿日時: 2007-03-05 22:56
こんばんは。
VB.NETとSQLServer2005を使っています。
SQLServer2005のXML型を使って、オブジェクトをXMLデータとして入れたいと思っています。(その逆も)
XmlSerializerを使うと、オブジェクトをXMLファイルにすることができるのはわかったのですが、SQLServerのXML型のデータとして格納する方法がわかりません。
XmlSerializerのように、オブジェクトをSQLServerのXML型に変換させたり、復元したりする仕組みはないのでしょうか。
説明がヘタですいません。
よろしくお願いします。
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2007-03-06 10:23
さよこさん、お早うございます。

引用:

XmlSerializerを使うと、オブジェクトをXMLファイルにすることができるのはわかったのですが、SQLServerのXML型のデータとして格納する方法がわかりません。


出し入れは文字列として行えばOKです。
かめたろ
ぬし
会議室デビュー日: 2003/03/20
投稿数: 255
投稿日時: 2007-03-06 10:32
引用:

さよこさんの書き込み (2007-03-05 22:56) より:
XmlSerializerを使うと、オブジェクトをXMLファイルにすることができるのはわかったのですが、SQLServerのXML型のデータとして格納する方法がわかりません。


Serialize時に、ファイルに書き出さないで、StringWriterでXML文字列を取得すればよいのではないでしょうか。SQLServerのXML型のパラメタにその文字列を渡せばOKかと思います。
さよこ
ベテラン
会議室デビュー日: 2005/10/13
投稿数: 78
投稿日時: 2007-03-06 10:44
ありがとうございます。
SQLServerへの書き込みは何とかできるようになりました。
ただ、その逆ができなくて困っています。
SQL Serverから受け取ったXMLをDeserializeメソッドの引数として渡せる形に変換できればよいのだと思いますが、どうやってやればよいのかわからなくて・・・。
へなちょこな質問ですいません。
よろしくお願いします。
かめたろ
ぬし
会議室デビュー日: 2003/03/20
投稿数: 255
投稿日時: 2007-03-06 11:18
引用:

SQL Serverから受け取ったXMLをDeserializeメソッドの引数として渡せる形に変換できればよいのだと思いますが、どうやってやればよいのかわからなくて・・・。


SQL Serverから受け取ったXMLをStringReaderのコンストラクタで突っ込んで、そいつをDeserializeに渡すんじゃダメですか?
処理の流れを逆にしてあげるだけでいいと思うのですが・・・
さよこ
ベテラン
会議室デビュー日: 2005/10/13
投稿数: 78
投稿日時: 2007-03-06 12:02
ありがとうございます。

Dim objCon As New SqlConnection(CCONNECTION)
Dim objCmd As New SqlCommand
Dim objSql As New StringBuilder
Dim objSerializer As XmlSerializer = New XmlSerializer(GetType(CTest))
Dim objWriter As New IO.StringWriter
Dim objTest As New CTest
Dim objReader As SqlDataReader

objTest.Value = "ABC"
objSerializer.Serialize(objWriter, objTest)

With objSql
.Append("DECLARE @ID INT ")
.Append("SELECT @ID = ISNULL(MAX(ID),0) + 1 FROM test ")
.Append("INSERT INTO test (ID,DATA) VALUES (@ID,@DATA) ")
End With

objCmd.CommandText = objSql.ToString
objCmd.Parameters.Add("@DATA", SqlDbType.Xml).Value = objWriter.ToString
objCon.Open()
objCmd.Connection = objCon
objCmd.ExecuteNonQuery()
objCon.Close()

objSql = New StringBuilder
objSql.Append("SELECT DATA FROM test WHERE (ID = 1) ")
objCon.Open()
objCmd.CommandText = objSql.ToString
objReader = objCmd.ExecuteReader(CommandBehavior.CloseConnection)
objReader.Read()
Dim objTest2 As CTest = CType(objSerializer.Deserialize(New StringReader(objReader("DATA").ToString)), CTest)
objReader.Close()

MsgBox(objTest2.Value, MsgBoxStyle.OkOnly)

のような感じでやってみたら、メッセージボックスに値が表示されたので、
これでできると思います。
ありがとうございます。
1

スキルアップ/キャリアアップ(JOB@IT)