c# - 在 .net 中循环遍历 xml

标签 c# .net xml

我在 .net 中遍历 Some xml 并将 Xml 元素分配给字符串变量。

这些变量被传递到一个采用三个参数的方法中。该方法在 SQL Server 2005 中运行一个存储过程,该过程使用这三个参数查询数据库。

手动传递参数时,方法和存储过程运行良好。但是当我尝试从 xml 文件中获取参数时,Visual Studio 说“过程或函数 usp_CreateOrgDataSet 指定的参数太多。”

这是下面方法的代码

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();


                }

这是 getChartdate 方法

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");





    }

这是 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>

在发生错误时,locals 窗口具有以下值:

OC_Ttl1 "Test2"字符串 OC_Ttl2 "Test2"字符串 OC_OL31 "OrgName2"字符串

第一次迭代成功,但第二次失败。

最佳答案

您在每次迭代时将参数添加到命令中,这会导致第二次迭代抛出此错误。您将需要添加一次参数,然后在每次迭代中设置值。您还可以通过确保 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");





    }

关于c# - 在 .net 中循环遍历 xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1524982/

相关文章:

c# - 我应该在每个事务中打开和关闭套接字吗?

c# - 如何在 C# 中从 API 访问和使用 XML

C#的LINQ和.NET Framework,哪个依赖?

java - 无法在屏幕右侧实现抽屉导航 - Android/Java

c# - 在代码中从 XML 创建 XSD

C# SSH.NET CreateCommand/RunCommand 不起作用

c# - Swig C++ 到 C# : How to wrap classes from C++ to make methods from template class available in derived class in C#?

c# - 使用线程池安排方法延迟执行的最佳方法?

c# - OraOLEDB.Oracle 提供程序未在本地计算机上注册

java - JAXB Fragment Marshal 不带命名空间