2013-12-18 5 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»; 'для получения значения' USER_COMMENT' или строки 'NO DATA', если DBNull. Замена значения в фактическом datarow довольно медленная, а afaik не требуется. –

ответ

1

Нет необходимости в дополнительной функции. Вы просто не вставить «Нет данных» в петле как ниже

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, этого условия достаточно. Но если вы хотите также проверить пустое строковое значение, вам просто нужно добавить еще одно условие к if if if (row ["USER_COMMENT"] - System.DBNull || row ["USER_COMMENT"] == string.Empty). – Naveen

0

Используйте пустую строку вместо NULL

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; 
    } 
} 
Смежные вопросы