2014-01-10 2 views
0

У меня есть приложение C# (WinForm), которое получает некоторую информацию в несколько наборов данных. Из наборов данных я сохраняю информацию в нескольких переменных строки и int. Иногда значения являются нулевыми. Я хотел бы сделать функцию, которая проверяет наличие нулей, прежде чем пытаться хранить в переменных, поэтому я не получу никаких ошибок.Функция для проверки нулей набора данных?

Так короче я хотел бы заменить такой код (предполагая, я уже 2 DataSets называется «DataSet1» и «dataSet2»):

row1 = dataSet1.Tables[0].Rows[0]; 
if(row1.IsNull("Department")) {errorMsg} 
else if(row1.IsNull("Name")) {errorMsg} 
else 
//run code 


row2 = dataSet2.Tables[0].Rows[0]; 
if(row2.IsNull("Department")) {errorMsg} 
else if(row2.IsNull("Name")) {errorMsg} 
else 
//run code 

к чему-то более автоматизированы, как:

//the function 
bool NullChecker(string datasetName, int rowNr, string fieldName) 
{ 
if(datasetName.Tables[0].Rows[rowNr].IsNull(fieldName)) return false; 
    else return true; 
} 

//back in the code 
string[] datasetNames; int[] rowNrs; string[] fieldNames; 

for(int i=0; i<someLength; i++) 
{ NullChecker(datasetNames[i], rowNrs[i], fieldNames[i]);} 

Возможно? Как вы думаете, это может замедлить мой код?

+0

если она равна нулю, то, что вы хотите сделать? –

+0

@ Selman22 ЕСЛИ это null Я бы, вероятно, обновил базу данных с допустимым значением – Vantalk

+0

Я смущен этим вопросом, кажется, вы уже ответили на это? Я не вижу, как добавление такой функции приведет к значительному снижению производительности. –

ответ

1

Вы можете создать метод расширения для нулевой проверки

public static class Extensions 
{ 
    public static bool IsNull(this DataSet dataSet, int rowNumber, string columnName) 
    { 
     return dataSet.Tables[0].Rows[rowNumber].IsNull(columnName); 
    } 
} 

Затем вы можете использовать его как

dataSet1.IsNull(0, "column"); 

Если вы хотите печатать сообщения об ошибках, а также, просто добавьте параметр string errorMsg и перед вы возвращаетесь из вызова метода, распечатываете текст, переданный через аргумент, например, следующим образом:

public static bool IsNull(this DataSet dataSet, int rowNumber, string columnName, string errorMsg) 
{ 
    if(dataSet.Tables[0].Rows[rowNumber].IsNull(columnName)) 
    { 
     // print an error message using Console or MessageBox, or whatever you use 
     return true; 
    } 

    return false; 
} 

, а затем вы можете использовать его как

dataSet1.IsNull(0, "column", "error"); 
+0

Если я сделаю эту функцию статической, которая потребует, чтобы некоторые другие элементы в моем коде стали статическими? У меня были некоторые проблемы с чем-то вроде этого. Sry, я все еще немного незнаю при вовлечении типов данных. – Vantalk

+0

Код отлично подходит для расширения. Прочитав код ближе, я понимаю, что вы можете использовать цикл для циклического перемещения по набору данных, но вы не можете циклически перебирать массив в DataSets, если только я что-то не хватает. Тем не менее, отличный кусок кода. Помечено как полезное! – Vantalk

+0

Во-первых, это может выглядеть как статическая вещь, но это метод расширения. Он расширяет существующий класс 'DataSet' в этом случае так, как кажется, что метод является частью класса, даже если это не так. Во-вторых, вы можете циклически перемещаться по массиву наборов данных. 'for (...) {datasets [i] .IsNull (...)}' Если вы считаете, что мой ответ решает ваш вопрос, отметьте его зеленой меткой под забивкой, это правильный путь. –

0

Кажется, что код достаточно хорош, с небольшим редактированием, необходимо заменить массив данных массива array_nameName массивом Database [].

0
if (dataSet1 != null && dataSet1.Tables.Count > 0) 

further do actions ----

Смежные вопросы