1

vb.net ユーザー定義オブジェクトを SQL データベースに格納するにはどうすればよいですか。プロパティを列で複製しようとしているわけではありません。オブジェクトをバイト配列に変換またはエンコードし、それをデータベースのフィールドに格納するという行に沿った何かを意味します。オブジェクトのインスタンスをセッションに保存する場合と同様ですが、現在のセッションを過ぎても情報を保持する必要があります。


@オリオン・エドワーズ

スタンスの問題ではありません。ある日、コードを変更するからです。次に、古いオブジェクトをデシリアライズしようとすると、プログラムがクラッシュします。

私のプログラムは「クラッシュ」せず、例外をスローします。幸運なことに、.net には、そのような機会に特化した一連のクラスがあります。その時点で、古いデータを更新してデータベースに戻します。それがこの 1 つのフィールド (場合によってはスタンス) のポイントです。

4

8 に答える 8

5

シリアル化を使用できます。オブジェクトを少なくとも 3 つの形式で格納できます: バイナリ (BLOB に適しています)、XML (MSSQL の XML データ型を利用)、またはプレーン テキスト (varchar または text 列に格納)。

于 2008-09-02T23:13:34.550 に答える
3

あなた自身の最終的な狂気に向かってこの道を進む前に、これを見てください(またはいつかそれを繰り返してください):

http://thedailywtf.com/Articles/The-Mythical-Business-Layer.aspx

データベースにオブジェクトを永続化することはお勧めできません。それは、データベースが行うように設計されているすべての良いことを殺します.

于 2008-09-02T23:32:41.477 に答える
2

BinaryFormatterクラスを使用してオブジェクトをバイナリ形式にシリアル化し、結果の文字列をデータベースに保存できます。

于 2008-09-02T23:11:22.730 に答える
1

XmlSerializer または .net 3.x の DataContractSerializer がその仕事をしてくれます。

于 2008-09-02T23:23:49.737 に答える
0

私は@1800情報を支持しています。
長期保存のためにオブジェクトをシリアライズすることは決して良い考えではありません

この問題に関するあなたのスタンスに感謝しますが、これは、月に約 1 回しか更新されない Web サービスから取得したデータの特殊なケースです。

スタンスの問題じゃない。ある日、コードを変更するからです。次に、古いオブジェクトをデシリアライズしようとすると、プログラムがクラッシュします。

于 2008-09-03T04:20:14.140 に答える
0

クラッシュした場合 (または例外がスローされた場合) に残っているのは、オブジェクトを再作成するために試してふるいにかけるバイナリ データの束だけです。

バイナリのみを永続化する場合は、ディスクに直接保存しないでください。前述のように、オブジェクト定義を変更すると、苦労しないとシリアル化を解除できない場合があるため、xml などの使用を検討することもできます。

于 2008-09-03T04:32:06.623 に答える
0

@aku、lomaxx、bdukes - あなたのソリューションは私が探していたものです。

@ 1800 情報 - この件に関するあなたのスタンスには感謝していますが、これは月に 1 回程度しか更新されない Web サービスから取得したデータの特殊なケースです。それがWebサービスの目的であるため、db形式で永続化されたデータは必要ありません。以下は、最終的に動作するようになったコードです。

シリアライズ

    #'res is my object to serialize
    Dim xml_serializer As System.Xml.Serialization.XmlSerializer
    Dim string_writer As New System.IO.StringWriter()
    xml_serializer = New System.Xml.Serialization.XmlSerializer(res.GetType)
    xml_serializer.Serialize(string_writer, res)

逆シリアル化

    #'string_writer and xml_serializer from above
    Dim serialization As String = string_writer.ToString
    Dim string_reader As System.IO.StringReader
    string_reader = New System.IO.StringReader(serialization)
    Dim res2 As testsedie.EligibilityResponse
    res2 = xml_serializer.Deserialize(string_reader)
于 2008-09-03T03:18:24.820 に答える
0

あなたがしたいことは、オブジェクトの「シリアル化」と呼ばれ、.Net にはいくつかの方法があります。1 つは、System.Xml.Serialization 名前空間の XmlSerializer クラスです。

もう 1 つは System.Runtime.Serialization 名前空間にあります。これには、SOAP フォーマッタ、バイナリ フォーマッタ、および共通のインターフェイスを実装する継承可能な基本クラスがサポートされています。

あなたが話していることについては、以前に提案された BinaryFormatter がおそらく最高のパフォーマンスを発揮します。

于 2008-09-03T03:25:32.213 に答える