Проверка данных файла Excel перед импортом в базу данных - PullRequest
0 голосов
/ 01 ноября 2018

Я пытаюсь прочитать данные из файла Excel в DataTable. Я знаю, что мы можем назначить разные DataTypes для DataColumn при добавлении столбцов в DataTable. До сих пор я пробовал следующее,

DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[2]
{
    new Datacolumn("column1", typeof(string)),
    new DataColumn("column2", typeof(int))
});

И мой файл Excel содержит данные в двух столбцах следующим образом:

column1 ------ column2

а ---------------- 230

Защита ---------------- 230tr

Как вы можете видеть выше, второй столбец второй строки имеет значение '230tr', которое DataTable не должно принимать исключение исключения с недопустимым полем данных и номером строки.

Praveena.

Ответы [ 3 ]

0 голосов
/ 01 ноября 2018

вы можете попробовать таким образом.

      DataTable dt = new DataTable();
        dt.Columns.AddRange(new DataColumn[2]
        {
          new DataColumn("column1", typeof(int)),
          new DataColumn("column2", typeof(string))
        });

        dt.Clear();
        try
        {
            string input = string.Empty;
            input = Console.ReadLine();
            if (Regex.IsMatch(input, @"^[a-zA-Z]+$"))
            {
                dt.Rows.Add(1, input);
            }
            Console.WriteLine(dt.Rows[0]["column2"]);
            Console.ReadKey();
        }
        catch(Exception ex)
        {
            Console.WriteLine(ex);
            Console.ReadKey();
        }
0 голосов
/ 02 ноября 2018

Спасибо всем за ответ, и я нашел простое решение для моего вопроса, работая с DataTables. Моя основная задача состояла в том, чтобы прочитать строки данных из листа файла Excel и проверить данные каждой строки перед добавлением их в мою таблицу базы данных (используя OracleBulkCopy) и уведомить пользователя о любых недопустимых полях данных в листе файла Excel.

Когда я импортировал данные в DataTable из файла Excel, используя oda.Fill(dt);, я понял, что некоторые поля DataRow пустые (нулевые) в процессе добавления данных в DataTable.

Как я упоминал выше в основном вопросе, мы можем присвоить DataType для DataColumn в DataTable следующим образом:

DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[3]
{
    new Datacolumn("column1", typeof(string)),
    new DataColumn("column2", typeof(double)),
    new DataColumn("column3", typeof(DateTime))
});

И мой файл Excel будет выглядеть следующим образом:

column1 ----------------- column2 ---------------------- колонка3

ABCD ---------------------- 20000 ----------------------- --20-Dec-2018

EFGH ----------------------- 56500,5 ---------------------- xyz17-Mar-2018

ijklm ----------------------- 67000 ---------------------- --1-Jan-2018

В приведенной выше таблице 3-й ряд 3-й столбец RowData имеет недопустимый тип даты (xyz17-Mar-2018). Во время выполнения oda.Fill (DT); для приведенной выше таблицы это поле данных добавляется как ноль RowData к DataTable. То же самое будет и для других столбцов, если поля импортируемых данных не относятся к типу определенного DataColumn типа. Таким образом, мой последний шаг заключался в проверке каждой строки данных DataTable, которая имеет нулевое поле, и выдаче пользователю сообщения об ошибке с указанием номера строки и имени столбца.

int errorRowNumber = 0;

private bool validateDataTableData(DataTable dt, string dtColumnName)
{
    Boolean isTrue = false;

    foreach (DataRow r in dt.Rows)
    {
          if(!string.IsNullOrEmpty(r[dtColumnName].ToString()))
          {
                isTrue = false;
                errorRowNumber = dt.Rows.IndexOf(r) + 2;
                break;
          }
    }
    return isTrue;
}
0 голосов
/ 01 ноября 2018

В вашем коде, где вы читаете значения Excel для вставки, вы должны использовать функцию C #: [Int32.TryParse][1] или float.Try​Parse;

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

Подробный пример / ответ можно посмотреть здесь :

...