Я импортировал данные из 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));
}
}