2009-10-06 6 views
1

.net에서 Some XML을 반복하고 Xml 요소를 문자열 변수에 지정합니다..net에서 XML을 통해 루핑하기

이러한 변수는 세 개의 인수를 사용하는 메서드에 전달됩니다. 이 메서드는 SQL Server 2005에서 이러한 세 가지 인수를 사용하여 데이터베이스를 쿼리하는 저장 프로 시저를 실행합니다.

방법 및 SPROC 실행 미세 수동으로 인수를 전달합니다. 그러나 xml 파일에서 인수를 얻으려고하면 Visual Studio에서 "프로 시저 또는 함수 usp_CreateOrgDataSet에 인수가 너무 많습니다."라고 표시됩니다.

이이 getChartdate 방법이 주민 오류의 시점에서 XML

<?xml version="1.0" encoding="utf-8"?> 
<root> 
    <Org> 
    <OC_Ttl1>Test1</OC_Ttl1> 
    <OC_Ttl2>Test1</OC_Ttl2> 
    <OC_OL31>OrgName1</OC_OL31> 
    </Org> 
    <Org> 
    <OC_Ttl1>Test2</OC_Ttl1> 
    <OC_Ttl2>Test2</OC_Ttl2> 
    <OC_OL31>OrgName2</OC_OL31> 
    </Org> 
    <Org> 
    <OC_Ttl1>Test3</OC_Ttl1> 
    <OC_Ttl2>Test3</OC_Ttl2> 
    <OC_OL31>OrgName3</OC_OL31> 
    </Org> 
</root> 

에게 있습니다

private void GetChartData(string OC_Ttl1, string OC_Ttl2, string OC_OL31) 
    { 
     OC_Ttl_1 = OC_Ttl1; 
     OC_Ttl_2 = OC_Ttl2; 
     OC_OL3_1 = OC_OL31; 



     //Execute Stored Procedure 
     cmd_Org.Connection = conn_Org; 
     cmd_Org.CommandText = "dbo.usp_CreateOrgDataSet"; 
     cmd_Org.CommandType = CommandType.StoredProcedure; 
     cmd_Org.Parameters.AddWithValue("@OC_Ttl_1", OC_Ttl1); 
     cmd_Org.Parameters.AddWithValue("@OC_Ttl_2", OC_Ttl1); 
     cmd_Org.Parameters.AddWithValue("@OC_OL3_1", OC_OL31); 


     //Output xml 
     DataSet orgDataSet = new DataSet(); 
     orgDataSet.ReadXml(cmd_Org.ExecuteXmlReader(), XmlReadMode.Auto); 
     orgDataSet.WriteXml("InputXMLFiles/" + OC_OL3_1.Replace(" ","_") + ".xml"); 





    } 

입니다

private void GenChart_Click(object sender, EventArgs e) 
    { 


     //Open Connection 
     conn_Org.ConnectionString = Set_OrgChartConn(); 
     conn_Org.Open(); 

       //Load xml Config file 
       XmlDocument doc = new XmlDocument(); 
       doc.Load("Config.xml"); 

       XmlElement root = doc.DocumentElement; 
       XmlNodeList nodes = root.SelectNodes("/root/Org"); 

       foreach (XmlNode node in nodes) 
       { 
        string Title1 = node["OC_Ttl1"].InnerText; 
        string Title2 = node["OC_Ttl2"].InnerText; 
        string OrgName = node["OC_OL31"].InnerText; 



        //Grab Chart data 
        GetChartData(Title1, Title2, OrgName); 
       } 
     conn_Org.Close(); 


       } 

아래의 방법에 대한 코드입니다 창에 다음 값이 있습니다.

,451,515,

OC_Ttl1 "Test2를"문자열 OC_Ttl2 "Test2를"문자열 OC_OL31 "ORGNAME2"문자열

첫 번째 반복은 성공하지만 두 번째 실패합니다.

+1

성공 했습니까? –

+0

그래, 첫 번째 반복이 성공하고 질문을 편집했습니다. 고맙습니다. – MrBliz

답변

2

당신은 제 2 회 반복이 오류가 발생하는 원인이 반복 될 때마다 명령에 PARAMATERS 추가됩니다. 매개 변수를 한 번 추가 한 다음 각 반복에서 값을 설정해야합니다. cmd_Org가 GetChartData 내에서 범위가 지정되도록함으로써이 문제를 해결할 수도 있습니다. 주먹 반복

private void GetChartData(string OC_Ttl1, string OC_Ttl2, string OC_OL31) 
    { 
     OC_Ttl_1 = OC_Ttl1; 
     OC_Ttl_2 = OC_Ttl2; 
     OC_OL3_1 = OC_OL31; 


     //Execute Stored Procedure 
     SqlCommand cmd_Org.Connection = conn_Org; 
     cmd_Org.CommandText = "dbo.usp_CreateOrgDataSet"; 
     cmd_Org.CommandType = CommandType.StoredProcedure; 
     cmd_Org.Parameters.AddWithValue("@OC_Ttl_1", OC_Ttl1); 
     cmd_Org.Parameters.AddWithValue("@OC_Ttl_2", OC_Ttl1); 
     cmd_Org.Parameters.AddWithValue("@OC_OL3_1", OC_OL31); 


     //Output xml 
     DataSet orgDataSet = new DataSet(); 
     orgDataSet.ReadXml(cmd_Org.ExecuteXmlReader(), XmlReadMode.Auto); 
     orgDataSet.WriteXml("InputXMLFiles/" + OC_OL3_1.Replace(" ","_") + ".xml"); 





    } 
+0

getChartData를 질문에 추가했습니다. 고맙습니다. – MrBliz

+0

Doh! 고맙습니다. – MrBliz

2

은 한마디로 -이 당신의 XML 코드와 아무 상관이 있다고 생각하지 않으며, 게시 된 코드 의. 다른 코드 (GetChartData)가 도움을주기 위해 무엇을하는지 명확히해야 할 것으로 기대합니다. 나를 위해

음 :

foreach (XmlNode node in nodes) 
{ 
    string Title1 = node["OC_Ttl1"].InnerText; 
    string Title2 = node["OC_Ttl2"].InnerText; 
    string OrgName = node["OC_OL31"].InnerText; 

    Console.WriteLine(Title1 + "/" + Title1 + "/" + OrgName); 
} 

출력 :

Test1/Test1/OrgName1 
Test2/Test2/OrgName2 
Test3/Test3/OrgName3 

그래서 그것을 잘 작동하는 것 같다. 고비용 - XML을 확인하고보고 방법을 고음으로 점검하십시오 (GetChartData). 당신이 올린 코드에서 모두 괜찮아 보입니다.

0

실행중인 sp 및 sql의 프로토 타입은 무엇입니까?

당신은 각 반복 루프 쿼리에 추가 있습니까?

질문에 기능을 넣으십시오.

0

문서 요소를 시작할 필요가 없습니다. 실제로 노드 목록에 대한 xpath로 Org를 시도하십시오.

관련 문제