У меня есть кнопка в моей веб-форме, которая загружает CSV-файл с данными, вставляет данные в базу данных и отображает содержимое базы данных в виде таблицы. Я использую TextFieldParser
для чтения файла CSV. Однако я не могу понять, как добавить в него проверку.
Я хочу проверить первый столбец (это SKU в моей базе данных) загруженных данных файла CSV. Если данные имеют дубликат в базе данных, появится сообщение о невозможности завершения действия. Если нет, он продолжит вставлять данные в базу данных.
Вот как выглядят данные в загружаемом CSV-файле
Для справки. Это мой код:
protected void AddButton_Click(object sender, EventArgs e)
{
string path = @"C:\Users\hac9289\Downloads\";
//Creating object of datatable
DataTable tblcsv = new DataTable();
//creating columns
tblcsv.Columns.Add("Stock Keeping Unit");
tblcsv.Columns.Add("Universal Product Code");
tblcsv.Columns.Add("Vendor Name");
tblcsv.Columns.Add("Product Name");
tblcsv.Columns.Add("Product Description");
tblcsv.Columns.Add("Retail Price");
//getting full file path of Uploaded file
string CSVFilePath = Path.GetFullPath(path + AddFile.PostedFile.FileName);
if (!AddFile.HasFile)
{
ScriptManager.RegisterStartupScript(this, typeof(string), "Alert", "alert('File Upload Empty');", true);
}
else
{
//parse records in csv file
using (TextFieldParser parser = new TextFieldParser(CSVFilePath))
{
parser.HasFieldsEnclosedInQuotes = true;
parser.TextFieldType = FieldType.Delimited;
parser.SetDelimiters(",");
bool invalid = false;
while (!parser.EndOfData)
{
//Processing row
tblcsv.Rows.Add();
int count = 0;
string[] fields = parser.ReadFields();
/*I am trying these code for validation but it doesnt work hahaha
foreach (DataRow row in tblcsv.Rows)
{
// Check some other column is not equal to some value
if (row["StockKeepingUnit"] == fields)
{
ScriptManager.RegisterStartupScript(this, typeof(string), "Alert", "alert('Action not completed due to duplicate SKU');", true);
}
}*/
foreach (string field in fields)
{
tblcsv.Rows[tblcsv.Rows.Count - 1][count] = field;
count++;
}
}
}
InsertCSVRecords(tblcsv);
PopulateGridView();
}
}
private void InsertCSVRecords(DataTable csvdt)
{
using (SqlConnection connect = new SqlConnection(connectionString))
{
connect.Open();
//creating object of SqlBulkCopy
using (SqlBulkCopy objbulk = new SqlBulkCopy(connect))
{
//assigning Destination table name
objbulk.DestinationTableName = "RetailInfo";
//Mapping Table column
objbulk.ColumnMappings.Add(0, "StockKeepingUnit");
objbulk.ColumnMappings.Add(1, "UniversalProductCode");
objbulk.ColumnMappings.Add(2, "VendorName");
objbulk.ColumnMappings.Add(3, "ProductName");
objbulk.ColumnMappings.Add(4, "ProductDesc");
objbulk.ColumnMappings.Add(5, "RetailPrice");
//inserting Datatable Records to DataBase
objbulk.WriteToServer(csvdt);
}
}
ScriptManager.RegisterStartupScript(this, typeof(string), "Alert", "alert('CSV Data added');", true);
}
Есть идеи? Любая помощь будет оценена. Спасибо.