2015-11-20 42 views
2

下面是我的代碼和我得到斷章取義的錯誤爲workRow變量,請解決這個問題我想一切都像編寫單獨的函數中添加一行。 。那對我沒有幫助。 。只有(reader.Name == "Result")我想創建魚子和其他如果想同一行數據行斷章取義錯誤的數據表中的C#

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

凡申報workrow變量? –

+0

我首先在循環中聲明它。我需要它,因爲必須驗證條件。 。然後創建行 – Ajit004

+0

看到我的答案... –

回答

3

特殊照顧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; 
    } 
} 
+0

SRY基因,但我必須驗證上述條件是否創造新行。 。如何才能做到這一點 – Ajit004

+0

只有當你需要的值賦給它爲什麼不創建數據行。 – artsylar

+0

您何時需要使用workRow?有什麼條件? @ Ajit004 – artsylar

2

請在下面聲明workRow如果在第一個裏面加入workRow[reader.Name],如下所示。問題是您在if (reader.Name == "Result")劃定範圍內的workRow變量,所以當你試圖超出此訪問workRow如果塊,你會得到錯誤。請檢查樣本的修改,可能爲你工作

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

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

reader.Name ==「Result」then only i want創建該行。 。對於其他人,我想,其他如循環 – Ajit004

+0

的代碼改變我的樣品中建議之上。 –

1

聲明工作流程到內的正確的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; 
    }