datatable c#中的dataRow上下文外错误

本文关键字:错误 上下文 dataRow 中的 datatable | 更新日期: 2023-09-27 18:22:42

下面是我的代码,workRow变量出现上下文外错误,请解决这个问题。那对我没有帮助。只有(reader.Name == "Result")我想创建roe,其他如果想在同一行中添加列

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;
    }
}

datatable c#中的dataRow上下文外错误

Youre workRow变量在另一个if语句中声明,这就是为什么会出现该错误。

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;
     }
 }

工作流声明为correct 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;
   }
相关文章: