- - PR -
オブジェクトをSQLServerのXML型のデータとして入れたいのですが。
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-03-05 22:56
こんばんは。
VB.NETとSQLServer2005を使っています。 SQLServer2005のXML型を使って、オブジェクトをXMLデータとして入れたいと思っています。(その逆も) XmlSerializerを使うと、オブジェクトをXMLファイルにすることができるのはわかったのですが、SQLServerのXML型のデータとして格納する方法がわかりません。 XmlSerializerのように、オブジェクトをSQLServerのXML型に変換させたり、復元したりする仕組みはないのでしょうか。 説明がヘタですいません。 よろしくお願いします。 | ||||
|
投稿日時: 2007-03-06 10:23
さよこさん、お早うございます。
出し入れは文字列として行えばOKです。 | ||||
|
投稿日時: 2007-03-06 10:32
Serialize時に、ファイルに書き出さないで、StringWriterでXML文字列を取得すればよいのではないでしょうか。SQLServerのXML型のパラメタにその文字列を渡せばOKかと思います。 | ||||
|
投稿日時: 2007-03-06 10:44
ありがとうございます。
SQLServerへの書き込みは何とかできるようになりました。 ただ、その逆ができなくて困っています。 SQL Serverから受け取ったXMLをDeserializeメソッドの引数として渡せる形に変換できればよいのだと思いますが、どうやってやればよいのかわからなくて・・・。 へなちょこな質問ですいません。 よろしくお願いします。 | ||||
|
投稿日時: 2007-03-06 11:18
SQL Serverから受け取ったXMLをStringReaderのコンストラクタで突っ込んで、そいつをDeserializeに渡すんじゃダメですか? 処理の流れを逆にしてあげるだけでいいと思うのですが・・・ | ||||
|
投稿日時: 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