- PR -

DataSet は 1 つの XmlDataDocument のみに関連付けらる?

1
投稿者投稿内容
かばりん
会議室デビュー日: 2003/12/21
投稿数: 6
投稿日時: 2003-12-21 15:49
はじめまして。
他の人から引き継いだシステムでプログラムの追加/修正等を行ってます。
.netはまだまだ未熟者で分からないことを調べまくってなんとかやってます。

DataSetをXMLに変換しようとしています。
そのときに、以下のエラーが出てきています。

DataSet は 1 つの XmlDataDocument のみに関連付けられます。この DataSet は既にほかのXmlDataDocument に関連付けられているため、現在の XmlDataDocument に関連付けることはできません。

これだけ読むと、もう関連付けられているんだな。と思うのですが、初めて関連付けを行うはずなのに何でだろう。という具合です。

今のところ、DataSetとXMLやら色々と調べているのですが、どの変がポイントかがつかめません。このエラーについてどう攻めていけばいいかアドバイスお願いします。
小野@どっとねっとふぁん
ぬし
会議室デビュー日: 2001/10/30
投稿数: 402
投稿日時: 2003-12-21 16:42
DataSetをXMLに変換しようとしている部分のソースって
どうなっているのでしょう?
エラーだけではどんな処理を実際にしようとしているのかが
わからないので、答えられる人はすくないと思います。

かばりん
会議室デビュー日: 2003/12/21
投稿数: 6
投稿日時: 2003-12-22 09:41
小野@EACさんの言われるとおりです。
ソースが無ければ何も分からないです

xmlに変換する部分ですが

string xml = EventSerializer.Serialize(DataSet.DateEvent);

public static string Serialize(DataRow dataRow)
{
   EventDataSet dataSet = new EventDataSet();
   dataSet.Merge(new DataRow[]{dataRow});
   return Serialize(dataSet);
}

このようにしています。
内容としては、DatSetのうち変更のあるRowのみを変更するという感じです。
これはイベントのシリアライズ/デシリアライズを行うクラスです。そしてイベントはSystem.Data.DataSetとして表しています。

かばりん
会議室デビュー日: 2003/12/21
投稿数: 6
投稿日時: 2003-12-22 10:56
すみません、追加です。

最初に、空のDataSetオブジェクトを作成します
public static EventDataSet CreateEventDataSet()
{
  EventDataSet dataSet = new EventDataSet();
  dataSet.ReadXmlSchema(GetSchema());
  return dataSet;
}
マニフェストリソースからイベントデータセットのスキーマを取得します。
private static Stream GetSchema()
{
  string resourceName = typeof(EventDataSet).FullName + ".xsd";
  Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName);
  return stream;
}
-----------------------
このあとに

イベントをXMLに変換します。
public static string Serialize(DataRow dataRow)
{
   EventDataSet dataSet = new EventDataSet();
   dataSet.Merge(new DataRow[]{dataRow});
   return Serialize(dataSet);
}

全ての種類の全てのイベント郡をXMLに変換します。
public static string Serialize(EventDataSet dataSet)
{
  XmlDataDocument dataDoc = new XmlDataDocument(dataSet);
  XmlNodeReader xmlReader = new XmlNodeReader(dataDoc);

  StringWriter strWriter = new StringWriter();
  XmlTextWriter xmlWriter = new XmlTextWriter(strWriter);
  xmlWriter.Formatting = Formatting.Indented;
  xmlWriter.WriteNode(xmlReader, true);

  return strWriter.ToString();
}

XmlDataDocument dataDoc = new XmlDataDocument(dataSet);
の部分で、例外が発生してしまいます。

流れとしては、最初に空のデータベースオブジェクトを作成して、
それにはじめて関連付けを行おうとしているのに、既に関連付けされているというメッセージが出てきます。
debugして一つ一つ調べているのですが、関連付けするのはここが初めてなので何でだろうという感じなのです。
小野@どっとねっとふぁん
ぬし
会議室デビュー日: 2001/10/30
投稿数: 402
投稿日時: 2003-12-22 13:17
回答ではなくなってしまうのですが。。。

DataSetのシリアライズで、DataSet.WriteXmlメソッドを
利用しないのにはわけがあるのでしょうか。。。

かばりん
会議室デビュー日: 2003/12/21
投稿数: 6
投稿日時: 2003-12-22 14:22
先ず、解決しました。
何もしていないですが、理由はわかりませんが、通るようになりました。
何かあるんでしょうが、なぜだかは不明です。

DataSet.WriteXmlを使わない理由についてですが、
すいません。自分で作成したものではないのでわかりません。
1

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