Я делаю программу, которая импортирует файл Excel в базу данных, и эта часть работает нормально. Но сейчас я работаю над тем, чтобы избежать / предотвратить вставку или импорт повторяющихся записей пользователем. Я пытался сделать составной ключ во всех столбцах, но это не сработало. Я получаю ожидание: "DBNull" ... Я думаю, что существует другой способ кодирования?
Вот мой код:
protected void Upload_Click(object sender, EventArgs e)
{
string excelPath = Server.MapPath("~/NewFolder/") + Path.GetFileName(FileUpload1.PostedFile.FileName);
string filepath = Server.MapPath("~/NewFolder/") + Path.GetFileName(FileUpload1.FileName);
string filename = Path.GetFileName(filepath);
FileUpload1.SaveAs(excelPath);
string ext = Path.GetExtension(filename);
String strConnection = @"Data Source=Ricky-PC\SQLEXPRESS;Initial Catalog=ImportHere;Persist Security Info=True;User ID=sa;Password=******";
string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filepath + ";Extended Properties=\"Excel 12.0 Xml;HDR=NO;IMEX=1;\"";
OleDbConnection excelConnection = new OleDbConnection(excelConnectionString);
excelConnection.Open();
DataTable schema = excelConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
string sheetName = schema.Rows[0]["TABLE_NAME"].ToString();
OleDbCommand cmd = new OleDbCommand("Select * from ["+sheetName+"]", excelConnection);
OleDbDataReader dReader;
dReader = cmd.ExecuteReader();
using (SqlBulkCopy sqlBulk = new SqlBulkCopy(strConnection))
{
sqlBulk.DestinationTableName = "Data";
sqlBulk.ColumnMappings.Add(0,0);
sqlBulk.ColumnMappings.Add(1,1);
sqlBulk.ColumnMappings.Add(2,2);
sqlBulk.ColumnMappings.Add(3,3);
sqlBulk.WriteToServer(dReader);
}
excelConnection.Close();
}