繁体   English   中英

数据表C#中的dataRow上下文错误

[英]dataRow out of context error in datatable c#

下面是我的代码,我无法使用workRow变量,因此请解决此问题,我尝试了一切,如编写单独的函数来添加row。 那对我没有帮助。 (reader.Name == "Result")我要创建子项,如果要在同一行中添加列, (reader.Name == "Result")其他

while (reader.Read())
{
    switch (reader.NodeType)
    {
        case XmlNodeType.Element:
           if (reader.Name == "Result")
           {
              DataRow workRow = dt.NewRow();
           }               
           if (columns.Contains(reader.Name))
           {
              //ERROR IS HERE out of context
              workRow[reader.Name] = reader.Value;
           }
           writer.WriteStartElement(reader.Name);
           break;
       case XmlNodeType.Text:
           writer.WriteString(reader.Value);
           break;
       case XmlNodeType.XmlDeclaration:
       case XmlNodeType.ProcessingInstruction:  
           writer.WriteProcessingInstruction(reader.Name, reader.Value);
           break;
       case XmlNodeType.Comment:
           writer.WriteComment(reader.Value);
           break;
       case XmlNodeType.EndElement:
           writer.WriteFullEndElement();
           break;
    }
}

您在另一个if语句中声明了workRow变量,这就是您得到该错误的原因。

DataRow workRow; // Moved the declaration here
while (reader.Read())
{
    switch (reader.NodeType)
    {
        case XmlNodeType.Element:
            if (reader.Name == "Result")
            {
                workRow = dt.NewRow(); // this is okay if Result always comes first
            }

            if (columns.Contains(reader.Name))
            {
                //ERROR IS HERE out of context
                workRow[reader.Name] = reader.Value;
            }
            writer.WriteStartElement(reader.Name);
            break;
        case XmlNodeType.Text:
            writer.WriteString(reader.Value);
            break;
        case XmlNodeType.XmlDeclaration:
        case XmlNodeType.ProcessingInstruction:
            writer.WriteProcessingInstruction(reader.Name, reader.Value);
            break;
        case XmlNodeType.Comment:
            writer.WriteComment(reader.Value);
            break;
        case XmlNodeType.EndElement:
            writer.WriteFullEndElement();
            break;
    }
}

如下所示,请在外部声明workRow,或者首先在其中添加您的workRow[reader.Name] 问题是您在if (reader.Name == "Result")内确定workRow变量的范围,因此,当您尝试在if块之外访问workRow时,将会出错。 请检查可能适合您的示例修改

 if (reader.Name == "Result")
 {
     DataRow workRow = dt.NewRow();

     //Just a suggestion
     if (columns.Contains(reader.Name))
     {
          workRow[reader.Name] = reader.Value;
     }
 }

工作流声明为正确的if语句的内部,如下所示。

if (reader.Name == "Result")
   {
       //DataRow workRow = dt.NewRow();
   }
if (columns.Contains(reader.Name))
   {
       DataRow workRow = dt.NewRow();
       //ERROR IS HERE out of context
       workRow[reader.Name] = reader.Value;
   }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM