C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: フォームオブジェクトをデータベースのxlm型フィールド保存


(過去ログ 122 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■73106 / inTopicNo.1)  フォームオブジェクトをデータベースのxlm型フィールド保存
  
□投稿者/ yama (8回)-(2014/08/19(Tue) 18:01:06)

分類:[.NET 全般] 

環境 VB2013 +SQLSERVER2008

いつもありがとうございます。度々申し訳ございませんが教えてください。
フォーム(Form1)にあるオブジェクト(Txtbox1、Txtbox2)をデータベースのXml型フィールドに保存、後にデータベースのXml型フィールドからフォームのオブジェクト
に復元したいのですが方法がわかりません。
@フォームのオブジェクトをシリアライズ(Dobon.Net様のサイトで確認したのですが使い方がよくわかりません)
       ↓
Aデータベースに保存(Xmlの内容をそのまま文字列として保存するのでしょうか?)

Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
me.txtbox1.text = "あいう"
me.txtbox2.text = "えお"

ここから全くわかりません

End Class

全くの無知で申し訳ございませんがご指導お願い申し上げます。

引用返信 編集キー/
■73108 / inTopicNo.2)  Re[1]: フォームオブジェクトをデータベースのxlm型フィールド保存
□投稿者/ 魔界の仮面弁士 (83回)-(2014/08/19(Tue) 18:52:39)
No73106 (yama さん) に返信
> Dobon.Net様のサイトで確認したのですが
そちらのサイトを利用されているのであれば、そこにも
 http://dobon.s7.xrea.com/bbs/cbbs.cgi
 http://dobon.net/cgi-bin/vbbbs/cbbs.cgi
といった掲示板がありますよ。


> フォーム(Form1)にあるオブジェクト(Txtbox1、Txtbox2)を

TextBox を保存するとして、保持しておきたい内容は Text プロパティのみで良いでしょうか?

文字色,背景色,フォント,サイズ/位置,Tag プロパティ,Name プロパティ等々、
いろいろな情報がありますよね。
中には Handle プロパティのように、復元が不可能な情報もありますし。



> データベースのXml型フィールドに保存、
どのようなテーブルに、どのような Xml として保持したいのか、
具体的な情報がまったく無いので回答しにくいですが、とりあえず Xml データとして

<Text TextBox1="あいうえお" TextBox2="かきくけこ" />

という形式のデータを、

CREATE TABLE [Table1] ( Id nchar(3) NOT NULL PRIMARY KEY, Data xml NOT NULL);

に対して読み書きする例を。



Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim xml = <Text
                      TextBox1=<%= TextBox1.Text %>
                      TextBox2=<%= TextBox2.Text %>
                  />

        Dim sql As String

        sql = "DELETE Table1 WHERE Id='100';INSERT INTO Table1 (Id, Data) VALUES ('100', @p);"

        Dim cn As New System.Data.SqlClient.SqlConnection(My.Settings.ConnectionString)
        cn.Open()
        Dim sc As New System.Data.SqlClient.SqlCommand(sql, cn)
        Dim p = sc.Parameters.Add("@p", SqlDbType.Xml)

        p.Value = New System.Data.SqlTypes.SqlXml(xml.CreateReader())
        sc.ExecuteNonQuery()

        cn.Close()
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Dim sql As String = "SELECT Data FROM Table1 WHERE Id = '100'"

        Dim cn As New System.Data.SqlClient.SqlConnection(My.Settings.ConnectionString)
        cn.Open()
        Dim sc As New System.Data.SqlClient.SqlCommand(sql, cn)

        Dim xml = XDocument.Parse(sc.ExecuteScalar())
        cn.Close()

        TextBox1.Text = xml.Root.@TextBox1
        TextBox2.Text = xml.Root.@TextBox2
    End Sub
End Class

引用返信 編集キー/
■73115 / inTopicNo.3)  Re[2]: フォームオブジェクトをデータベースのxlm型フィールド保存
□投稿者/ yama (9回)-(2014/08/20(Wed) 17:05:42)
魔界の仮面弁士様ありがとうございます。
>フォーム(Form1)にあるオブジェクト(Txtbox1、Txtbox2)を
> TextBox を保存するとして、保持しておきたい内容は Text プロパティのみで良いでしょうか?
> 文字色,背景色,フォント,サイズ/位置,Tag プロパティ,Name プロパティ等々、
> いろいろな情報がありますよね。
> 中には Handle プロパティのように、復元が不可能な情報もありますし。
はい。プロパティのみで良いです。

>>データベースのXml型フィールドに保存、
> どのようなテーブルに、どのような Xml として保持したいのか、
> 具体的な情報がまったく無いので回答しにくいですが、とりあえず Xml データとして
申し訳ございません。
具体的にはシリアライズしたデータを保存したいです。
(Dobon.net様からの引用で下記のようなデータ形式です)
<?xml version="1.0" encoding="utf-8"?>
<TestClass xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/">
<PrivateMessage>はじめまして。</PrivateMessage>
<Number>10</Number>
</TestClass>

上記の形でDBにxml型で保存し状況によってデシリアライズしたいです。
色々と申し訳ございませんがよろしくお願いいたします。

引用返信 編集キー/
■73116 / inTopicNo.4)  Re[3]: フォームオブジェクトをデータベースのxlm型フィールド保存
□投稿者/ 魔界の仮面弁士 (85回)-(2014/08/20(Wed) 18:35:57)
No73115 (yama さん) に返信
> はい。プロパティのみで良いです。

う〜ん。『どのプロパティ』を保存するのかを確認したかったのですけれどね。


それはさておき。そもそも何故、XML に変換してから読み書きしたいのでしょうか?

もしもデータを XML 形式のまま取り扱うつもりなのであれば、
XML パーサーによっては、CrLf が「Lf」に正規化されることがありますので、
改行データを含んだ複数行テキストを扱う場合は注意して下さいね。


> (Dobon.net様からの引用で下記のようなデータ形式です)
http://dobon.net/vb/dotnet/file/xmlserializer.html
のことですね?


> 上記の形でDBにxml型で保存し状況によってデシリアライズしたいです。

(1)XmlSerializer を使い、MemoryStream のストリームにシリアライズします。
 ファイル化する必要は無いので、StreamWriter は使いません。

(2)そのストリームを New SqlXml します。

(3) No73108 などのようにして、それを SQL Server に書き込みます。

(4) No73108 では、SQL Server からXMLデータを「文字列」として読み取っていますが、
 文字列としてではなく、XML データのまま受け取るために、
 SqlDataReader.GetSqlXml メソッドを使えます。
http://msdn.microsoft.com/ja-jp/library/zh9a9y6s.aspx
引用返信 編集キー/
■73142 / inTopicNo.5)  Re[4]: フォームオブジェクトをデータベースのxlm型フィールド保存
□投稿者/ yama (10回)-(2014/08/21(Thu) 21:55:28)
No73116 (魔界の仮面弁士 さん) に返信
> ■No73115 (yama さん) に返信
ご回答ありがとうございます。
とんちんかんな質問で本当に申し訳ありません。


> もしもデータを XML 形式のまま取り扱うつもりなのであれば、
> XML パーサーによっては、CrLf が「Lf」に正規化されることがありますので、
> 改行データを含んだ複数行テキストを扱う場合は注意して下さいね。
はい、了解いたしました。
>
>>(Dobon.net様からの引用で下記のようなデータ形式です)
> http://dobon.net/vb/dotnet/file/xmlserializer.html
> のことですね?
はい、そうです。


> (1)XmlSerializer を使い、MemoryStream のストリームにシリアライズします。
>  ファイル化する必要は無いので、StreamWriter は使いません。
了解しました。
Public Class f
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim stream As New MemoryStream()
Dim serializer As New System.Xml.Serialization.XmlSerializer( _
GetType(f)) ・・・ここはフォームを指定すればよいのでしょうか?
stream = serializer.serialize(?)・・・ここはなにを指定するのでしょうか?

End Sub
End Class




> (2)そのストリームを New SqlXml します。

> (3) No73108 などのようにして、それを SQL Server に書き込みます。
>
> (4) No73108 では、SQL Server からXMLデータを「文字列」として読み取っていますが、
>  文字列としてではなく、XML データのまま受け取るために、
>  SqlDataReader.GetSqlXml メソッドを使えます。
> http://msdn.microsoft.com/ja-jp/library/zh9a9y6s.aspx
引用返信 編集キー/
■73157 / inTopicNo.6)  Re[5]: フォームオブジェクトをデータベースのxlm型フィールド保存
□投稿者/ yama (11回)-(2014/08/22(Fri) 23:20:30)
No73142 (yama さん) に返信
> ■No73116 (魔界の仮面弁士 さん) に返信
色々とありがとうございました。

Public Class xmlクラス
Public 住所 As String

End Class
Private Sub button1_Click(sender As Object, e As EventArgs) Handles button1.Click
'保存するクラスのインスタンスを作成
Dim obj As New xmlクラス()
obj.住所 = Me.TextBox9.Text

'XmlSerializerオブジェクトを作成
'オブジェクトの型を指定する
Dim serializer As New System.Xml.Serialization.XmlSerializer( _
GetType(xmlクラス))
'書き込む
Dim ms As New MemoryStream()
'シリアル化
serializer.Serialize(ms, obj)
'閉じる
ms.Close()
End Sub

何とか上記までは考えました。この後はまた勉強させていただきます。
ありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -