Witam serdecznie mam taki kod który importuje dane z xls i zapisuje je w bazie:
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.OleDb;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace MS2
{
public partial class _Default : Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
PopulateData();
lblMessage.Text = "Current Database Data!";
}
}
private void PopulateData()
{
using (BazaMSEntities dc = new BazaMSEntities())
{
gvData.DataSource = dc.TabelaImport.ToList();
gvData.DataBind();
}
}
protected void btnImport_Click(object sender, EventArgs e)
{
if (FileUpload1.PostedFile.ContentType == "application/vnd.ms-excel" ||
FileUpload1.PostedFile.ContentType == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
{
try
{
string fileName = Path.Combine(Server.MapPath("~/ImportDocument"), Guid.NewGuid().ToString() + Path.GetExtension(FileUpload1.PostedFile.FileName));
FileUpload1.PostedFile.SaveAs(fileName);
string conString = "";
string ext = Path.GetExtension(FileUpload1.PostedFile.FileName);
if (ext.ToLower() == ".xls")
{
conString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileName + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\""; ;
}
else if (ext.ToLower() == ".xlsx")
{
conString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=2\"";
}
string query = "Select [Id],[Zleceniodawca], [Odbiorca],[Material],[Ilosc],[Miesiac] from [Arkusz1$]";
OleDbConnection con = new OleDbConnection(conString);
if (con.State == ConnectionState.Closed)
{
con.Open();
}
OleDbCommand cmd = new OleDbCommand(query, con);
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
da.Dispose();
con.Close();
con.Dispose();
// Import to Database
using (BazaMSEntities dc = new BazaMSEntities())
{
foreach (DataRow dr in ds.Tables[0].Rows)
{
string empID = dr["Id"].ToString();
var v = dc.TabelaImport.Where(a => a.Id.Equals(empID)).FirstOrDefault();
if (v != null)
{
// Update here
v.Zleceniodawca = dr["Zleceniodawca"].ToString();
v.Odbiorca = dr["Odbiorca"].ToString();
v.Material = dr["Material"].ToString();
v.Ilosc = dr["Ilosc"].ToString();
v.Miesiac = dr["Miesiac"].ToString();
}
else
{
// Insert
dc.TabelaImport.Add(new TabelaImport
{
Id = dr["Id"].ToString(),
Zleceniodawca = dr["Zleceniodawca"].ToString(),
Odbiorca = dr["Odbiorca"].ToString(),
Material = dr["Material"].ToString(),
Ilosc = dr["Ilosc"].ToString(),
Miesiac = dr["Miesiac"].ToString()
});
}
}
dc.SaveChanges();
}
PopulateData();
lblMessage.Text = "Successfully data import done!";
}
catch (Exception)
{
throw;
}
}
}
}
}
I teraz tak jest to baza gdzie są zsumowane wartości w danym dla poszczególnych materiałów, odbiorców.
Mam pytanie jako że ID sam nadaje w tabeli excel chciałbym utworzyć unikalny klucz zapytania do bazy bez potrzeby jego nadawania ręcznie. Mianowice chciałbym przed dodaniem do bazy aby skrypt sprawdził mi czy w bazie znajduje się wpis który zawiera identyczne wartości zarówno w bazie i w tabeli [Zleceniodawca] AND [Odbiorca] AND [Material] AND [Ilosc] AND [Miesiac] jeśli w excelu zgadza ise to co jest w bazie nie dodaje do bazy rekordu z wierszem tylko przechodzi do następnego. Czy ktoś pomógłby mi w tym jak mam to zrobić?? Z góry dziękuję za pomoc.