Я хочу проверить тип данных моего столбца базы данных с типами данных листа Excel в C #, используя openxml - PullRequest
0 голосов
/ 06 июня 2019

Я импортировал данные из Excel в базу данных, но проблема в том, что, если у меня неверные значения в листе Excel, они не будут вставлены в базу данных, и перед тем, как вставить их в базу данных, я удалил предыдущие записи в базе данных. Для вставки я использовал sqlbulkcopy, но мне нужно проверить тип данных перед удалением предыдущих значений в базе данных. Как я могу это сделать ??

например выше мой лист Excel в 1-й строке прав, а во 2-й строке в столбце Dstatus он был битовым, но в Excel это varchar, поэтому мне нужно проверить это перед удалением существующих записей в таблицах

(varchar(4))     (varchar)       (bit)         (varchar(20))
   DID            DName          DStatus      DeviceIPAdd
--------------------------------------------------------------------
   D101       test1             True         1.1.1.1  
   D102       test2             hgpl          tplsd  
 isSuccessDelete = _dbObj.DeleteDeviceRecordsForExcel();//for delete previous record of table
 if (isSuccessDelete)
    isSuccessInsert = _dbObj.InsertDeviceRecords(dtImportDevice as DataTable);

и для sqlbulkcopy

 public bool InsertDeviceRecords(DataTable table)
        {
            bool isResultAdd = false;
            bool expError = false;
            string expMessage = string.Empty;

            using (SqlBulkCopy bulkcopy = new SqlBulkCopy(_dbConn))
            {
                bulkcopy.DestinationTableName = @"DEVICEINFO";
                try
                {
                    _dbConn.Open();
                    AutoMapColumns(bulkcopy, table);
                    bulkcopy.WriteToServer(table);
                    isResultAdd = true;
                    _dbConn.Close();
                }
                catch (Exception e)
                {
                    expMessage = e.Message;
                    expError = true;
                }
                finally
                {
                    if (_dbConn.State == ConnectionState.Open)
                        _dbConn.Close();
                    if (expMessage.Length > 0 && expError)
                    {
                        DialogBox.Show(null, @"Unexpected error occured while inserting DeviceInfo in database", "", MessageBoxButtons.OK, MessageBoxIcon.Warning);

                    }
                }
            }
            return isResultAdd;
        }

   public static void AutoMapColumns(SqlBulkCopy sbc, DataTable dt)
   {
            foreach (DataColumn column in dt.Columns)
            {
                sbc.ColumnMappings.Add(
                    new SqlBulkCopyColumnMapping(column.ColumnName, column.ColumnName));
            }
    }


...