2010-11-21 5 views
-1

XML 데이터 형식의 열인 SQL Server 2005에 C# winforms 응용 프로그램을 연결했습니다.C#에서 사용하는 XML

C# 프로그램이 ADD, DELETE, UPDATE 및 SELECT 쿼리를 올바르게 수행하고 있습니다. 이제 다음 단계는 MessageBox에서 보여준 문자열로 쿼리를 통해 데이터베이스에 저장된 XML을 가져 오는 것입니다.

내 문제는 다른 태그를 무시하면서 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

항상 ** 두 단계로 ** 처리됩니다. 먼저 데이터베이스에서 XML 열을 검색하고 XML을 특성 및 해당 값으로 구문 분석합니다. 이전 대답의 코드). 정확히 어디에서 문제가 발생합니까? –

+0

처음에 제 질문은 some1이 해결책을 알고있는 대신에 투표를하는 것을 알고 있다면 더 명확하다고 생각합니다. – salman

답변

2

하시기 바랍니다. LINQ-to-XML을 사용하여 보유한 XML에서 필요한 값을 추출하십시오.

XDocument.Parse를 사용하여 원시 데이터를 쿼리 가능한 개체로 변환 할 수 있습니다. 예를 들어

: 다음의 DataTable을 생성하는 데이터를 읽어

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

관련 문제