none
DataTableの内容をDBに保存、またはDBからプログラムに復元したい RRS feed

  • 質問

  •  C# + SQL Server 2005の環境です。

     

    DataTableの内容をまるごと、SQL Serverで定義されたひとつのカラムに入れたり、

    またプログラム側に戻したりしたいのですが、方法がわかりません。

     

    今までやってみたことはSQL Server側のカラムの型をntext型にして、DataSet.GetXML()を行い、

    文字列として保存するというものですが、これではDataSet全体の保存になってしまいます。

    またGetXML()の反対のSetXML()のようなものがなく、どのように復元したらよいか分かりませんでした。

     

    いろいろ調べているうちにシリアライズという言葉にぶつかり、これが出来ればと思いましたが、DataTableの

    シリアライズとデシリアライズの方法がどうしてもわかりませんでした。

     

    どうかよろしくお願いいたします。

    2007年11月2日 3:37

回答

  • 復元するだけであれば、最後の「myDataSetmyTable.Merge」は不要だと思います。

    その他の部分では見た感じ特に問題ないように思います。どのようなエラー?が発生するのでしょうか?

     

     えムナウ さんからの引用

    DataTable.WriteXml メソッド

    DataTable.ReadXml メソッド

    単純にこのペアじゃ使えませんでした?

     

    よく考えると、シリアライズするより、こちらのほうが手数が少なくて楽ですね。

    2007年11月2日 14:58

すべての返信

  •  kumindaran さんからの引用

    いろいろ調べているうちにシリアライズという言葉にぶつかり、これが出来ればと思いましたが、DataTableの

    シリアライズとデシリアライズの方法がどうしてもわかりませんでした。

     

    シリアライズはバイナリ形式とXML形式があります。DBに保存するのであればXML形式のほうがらくだと思います。

    System.Xml.Serialization.XmlSerializerでシリアライズ・デシリアライズが可能です。以下シリアライズの例です。

     

        StringWriter sw = new StringWriter();
        XmlSerializer ser = new XmlSerializer(typeof(DataTable));
        ser.Serialize(sw, dt);

    2007年11月2日 3:42
  • ありがとうございます。

    シリアライズはできましたが、デシリアライズが出来ません。

    現在以下のようにしています

     

    コード ブロック
    StringReader sr = new StringReader(text);
    myDataSet.myTable.ReadXml(sr);

     

     

    コード ブロック
    StringReader sr = new StringReader(text);
    System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.XmlSerializer(typeof(MyDataSet.MyDataTable));
    myDataSetmyTable.Merge((MyDataSet.MyDataTable)ser.Deserialize(sr));

     


    間違っている点をご指摘いただければ幸いです。

    2007年11月2日 6:39
  • DataTable.WriteXml メソッド

    DataTable.ReadXml メソッド

    単純にこのペアじゃ使えませんでした?

     

    DataSetのTableを指定する形です。
    DataTableだけをnewしたら使えません。

    2007年11月2日 7:58
  • 復元するだけであれば、最後の「myDataSetmyTable.Merge」は不要だと思います。

    その他の部分では見た感じ特に問題ないように思います。どのようなエラー?が発生するのでしょうか?

     

     えムナウ さんからの引用

    DataTable.WriteXml メソッド

    DataTable.ReadXml メソッド

    単純にこのペアじゃ使えませんでした?

     

    よく考えると、シリアライズするより、こちらのほうが手数が少なくて楽ですね。

    2007年11月2日 14:58
  • SQL Server側のカラムをXML型にして以下のようにして出来ました。ありがとうございました。

     

    コード ブロック
    using (MemoryStream ms = new MemoryStream())
    {
     myDataTable.WriteXml(ms);
     string xml = Encoding.Default.GetString(ms.ToArray());
    }

     

    コード ブロック
    StringReader sr = new StringReader(xml);
    dt.ReadXml(sr);

     

     


    2007年11月3日 1:01