2010-11-21 6 views
-1

C#winformsアプリケーションをXMLデータ型の列であるSQL Server 2005に接続しました。C#で使用しているXML

C#プログラムがADD、DELETE、UPDATEおよびSELECTクエリを正しく実行しています。 次のステップは、データベースを使用してデータベースに格納されたクエリを文字列で取得してMessageBoxに表示し、

私の問題は、他のタグを無視してGridViewにXMLと値の属性を表示したいのですが、関数を参照するだけでは機能しないため、ソースコードを実行するのを手伝ってください。ありがとう....私はreader.read()を実行すると仮定します。次は何ですか?

private void button2_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     // setData(); 
     qry = "select ID , Name from xmlTB"; 
     reader = db.select_data(qry); 
     while (reader.Read()) 
     { 
      MessageBox.Show((reader[0].ToString() +reader[1].ToString())); 
     } 
    } 
    catch (Exception ex) 
    { } 
} 

データベース接続が別のクラスにあるが、ただ、次のステップを必要とするすべてが動作している心配しないでくださいあなたが唯一の特定の値を選択する必要が

+1

コンテキストを表示できるようにコードを投稿できますか? – WestDiscGolf

+0

これは常に** 2ステップの**プロセスです。まずデータベースからxmlカラムを取得します(そのコードは多かれ少なかれ)。次に、XMLをあなたの属性とその値に解析します。前回の回答のコード)。だからどこに問題があるのか​​、あなたが乗り越えていない点は? –

+0

最初に私は、some1が答えを投票するのではなく解決策を知っていれば、私の質問がより明確になると思います。 – salman

答えて

2

してください。 LINQ-to-XMLを使用して、必要な値をXMLから抽出します。

XDocument.Parseを使用して、生データをクエリ可能オブジェクトに変換できます。例えば

:次に、データテーブルを作成し、データを読み出すことにより

XDocument document = XDocument.Parse(rawXmlString); 

// Iterates through each element inside the XML document 
foreach (XElement el in document.Root.Elements()) 
{ 
    // Iterates through each attribute in an element 
    foreach (XAttribute attribute in el.Attributes()) 
    { 
     // Action here 
    } 
} 
+0

ありがとうございましたが、前に私が解決策が必要になる前にいくつかのコード原因のアドバイスが私と一緒に働かなかったと言いました – salman

+0

これについてMSDNサンプルを調べましたか? http://msdn.microsoft.com/en-us/library/bb675196.aspx –

+0

はい、私はそれを今混乱していることを理解できませんでした! – salman

0

スタート。 DataTableに列がまだないXmlAttributeが見つかった場合は、それを追加してDataRowを作成し、その値を設定します。

最後に、GridViewをDataSourceにバインドします。

DataTable dt = new DataTable(); 
string qry = "select ID , Name from xmlTB"; 
SqlDataReader reader = db.select_data(qry); 
dt.Columns.Add["ID"]; 
while (reader.Read()) 
{ 
    string xmlString = reader[1].ToString(); 
    string id = reader[0].ToString(); 
    XDocument document = XDocument.Parse(xmlString); 
    //ensure datatable contains a column for each attribute: 
    foreach (XElement el in document.Root.Elements()) 
    { 
     foreach (XAttribute attribute in el.Attributes()) 
     { 
      if (!dt.Columns.Contains(attribute.Name.LocalName)) 
      { 
       dt.Columns.Add(new DataColumn(attribute.Name.LocalName, typeof(string))); 
      } 
     } 
    } 
    DataRow dr = dt.NewRow(); 
    //set each value in the datarow: 
    foreach (XElement el in document.Root.Elements()) 
    { 
     foreach (XAttribute attribute in el.Attributes()) 
     { 
      dr[attribute.Name.LocalName] = attribute.Value; 
     } 
    } 
    dr["ID"] = id; 
    dt.Rows.Add(dr); 
} 

//Bind the gridview to the datasource: 
this.dataGridView1.DataSource = dt; 
//*The above assumes your GridView is named dataGridView1. 
+0

私は既に列IDを持つDBを持っていますので、何が必要です:dt.Columns.Add ["ID"]; AND dr ["ID"] = id;テーブルにIDが存在しないというエラーが表示されます。 – salman

+0

DataTableはデータベースクライアントオブジェクトであるため、ID列を追加する必要があります.DataAdapterを使用していない限り、動的に作成する必要があります。 IDはデータベース内の列であることを確認する必要があります。その答えがあなたを正しい道に導くならば、投票することを忘れないでください。 –

+0

なぜエラーを出すのか??? – salman

関連する問題