2013-12-18 106 views
1

我知道這個問題已被問了很多次,但我有以下一段代碼,我試圖使用默認空值。有人可以幫幫我嗎。我試過這段代碼,但沒有給我「無數據」的空值,它不顯示任何東西。不知道我哪裏錯了。用默認文本替換空值

更多詳細信息:此代碼不會用「無數據」字符串替換空值。這裏有什麼問題?爲了顯示「無數據」,我需要更改哪些內容?

protected override void Execute(NativeActivityContext context) 
    { 
     DataSet dataset = GetDataSet.Get(context); 
     foreach (DataTable dt in dataset.Tables) 
     { 
      foreach (DataRow row in dataset.Tables[0].Rows) 
      { 
       if (row["USER_COMMENT"] is System.DBNull) 
       { 
        ConvertNullToEmptyString(dt); 
        Console.WriteLine("In if"); 
       } 
       else 
       { 
        Console.WriteLine("out if"); 
       } 
      } 
     } 
     TransformResult.Set(context, dataset); 
    } 


    private static string ConvertNullToEmptyString(DataTable element) 
    { 
     if (element.Rows[0]["USER_COMMENT"] == DBNull.Value || element.Rows[0]["USER_COMMENT"] == null) 
     { 
      return "NO DATA"; 
     } 
     else 
     { 
      return element.Rows[0]["USER_COMMENT"].ToString(); 
     } 
    } 
+0

'ConvertNullToEmptyString'貌似_returns_「NO DATA」,但是你永遠不會使用返回值。 –

+0

是的,我認爲你是對的,我應該怎麼做? – rvphx

+0

不能測試atm,但我會嘗試純'var user_comment = row.Field (「USER_COMMENT」)?? 「NO DATA」;'如果DBNull獲得'USER_COMMENT'或字符串'NO DATA'的值。替換實際數據行中的值相當慢,而且不必要。 –

回答

1

那裏不需要額外的功能。你只需要在下面的循環中插入「No DATA」

foreach (DataRow row in dataset.Tables[0].Rows) 
     { 
      if (row["USER_COMMENT"] is System.DBNull) 
      { 
       row["USER_COMMENT"] = "NO DATA"; 
       Console.WriteLine("In if"); 
      } 
      else 
      { 
       Console.WriteLine("out if"); 
      } 
     } 
+0

該解決方案運行良好。我不確定是否有任何額外的檢查需要我做,但是現在這是我需要的。謝謝。 – rvphx

+0

要檢查NULL值,這個條件就足夠了。但如果你想檢查空字符串值,你只需要添加一個條件,如果像(行[「USER_COMMENT」]是System.DBNull ||行[「USER_COMMENT」] == string.Empty)。 – Naveen

0

使用空字符串,而不是空

if(row["USER_COMMENT"] == string.Empty) 
+0

但行[「USER_COMMENT」]是對象類型。我得到一個錯誤 – rvphx

+0

對不起,但這似乎並沒有工作。它只是退出循環而沒有檢查條件 – rvphx

3

這裏是我會做什麼

String stringtocompare; 

    if(String.isnullorwhitespace(stringtocompare)){ 
     stringtocompare = "No VALUE"; 
     } 
0

你嘗試

 
private static string ConvertNullToEmptyString(DataTable element) 
    { 
     if (string.IsNullOrEmpty(element.Rows[0]["USER_COMMENT"])) 
     { 
      return "NO DATA"; 
     } 
     else 
     { 
      return element.Rows[0]["USER_COMMENT"].ToString(); 
     } 
    } 
2

一對夫婦的事情,可能會有幫助:

你可能想改變這一點:

foreach (DataTable dt in dataset.Tables) 
    { 
     foreach (DataRow row in dataset.Tables[0].Rows) 
     { 
     ... 

這樣:

foreach (DataTable dt in dataset.Tables) 
    { 
     foreach (DataRow row in dt.Rows) 
     { 
     ... 

否則你只能在你的循環中查詢1臺。

此外,我會用String.IsNullOrEmpty()詢問數據。

1

如果您不需要第二個功能做到這一點,嘗試這樣的事情:

protected override void Execute(NativeActivityContext context) { 
    DataSet dataset = GetDataSet.Get(context); 
    foreach(DataTable dt in dataset.Tables) { 
    foreach(DataRow row in dt.Rows) { 
     row["USER_COMMENT"] = String.IsNullOrEmpty(row["USER_COMMENT"].ToString()) ? "NO DATA" : row["USER_COMMENT"]; 
    } 
    } 
    TransformResult.Set(context, dataset); 
} 

但是,與第二功能轉換,它會是這個樣子:

protected override void Execute(NativeActivityContext context) { 
    DataSet dataset = GetDataSet.Get(context); 
    foreach(DataTable dt in dataset.Tables) { 
    foreach(DataRow row in dt.Rows) { 
     row["USER_COMMENT"] = ConvertNullToEmptyString(row["USER_COMMENT"]); 
    } 
    } 
    TransformResult.Set(context, dataset); 
} 

private static object ConvertNullToEmptyString(object element) { 
    if(String.IsNullOrEmpty(element.ToString())) { 
    return "NO DATA"; 
    } else { 
    return element; 
    } 
}