죄송합니다. Enghist가 좋지 않습니다! 테이블에 존재하는 행 (기존 확인되지 않음) 수입가져 오기 전에 asp.net의 SQL 서버에 파일을 가져 오려면 가져 오기 전에 테이블에있는 기존 레코드를 확인하십시오.
내 기능 작업도이 행을 가져 do'nt 경우,
string excelConnectionString = "";
string strFileName = DateTime.Now.ToString("ddMMyyyy_HHmmss");
string strFileType = System.IO.Path.GetExtension(fileuploadExcel.FileName).ToString().ToLower();
fileuploadExcel.SaveAs(Server.MapPath("~/Import/" + strFileName + strFileType));
string strNewPath = Server.MapPath("~/Import/" + strFileName + strFileType);
//Connection String to Excel Workbook
if (strFileType.Trim() == ".xls")
{
excelConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strNewPath + ";Extended Properties=Excel 8.0;Persist Security Info=False";
}
else if (strFileType.Trim() == ".xlsx")
{
excelConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strNewPath + ";Extended Properties=Excel 12.0;Persist Security Info=False";
}
//Create Connection to Excel work book
OleDbConnection excelConnection =new OleDbConnection(excelConnectionString);
//Create OleDbCommand to fetch data from Excel
OleDbCommand cmd = new OleDbCommand("Select [account_id], [type],[first_name], [last_name], [title], [birthday], [tel],[phone], [email_1],[email_2], [remark],[del_if] from [Sheet1$]",excelConnection);
excelConnection.Open();
OleDbDataReader dReader;
dReader = cmd.ExecuteReader();
SqlBulkCopy sqlBulk = new SqlBulkCopy(strConnection);
//Give your Destination table name
sqlBulk.DestinationTableName = "contact";
sqlBulk.WriteToServer(dReader);
SqlBulkCopy를 사용할 수없는 경우 다른 방법을 사용할 수 있습니다. 나는 단지 "수입 전에 점검"을 해결하기를 원합니다. 스테이징 테이블에 기록한 다음 이미 존재하지 않는 레코드를 다른 talbe에 복사하면 더 복잡해질 수도 있습니다. – Hainlp
@ Hainlp- 편집 된 게시물에 몇 가지 대안이 있습니다. 나는 그들이 어떤 용도로 사용되기를 바랍니다. 행운을 빕니다. 주요 문제는 SqlBulkCopy가 선택적 삽입에 유용하지 않다는 것입니다. 가능한 한 빨리 데이터를 채 웁니다. 문제의 핵심은 먼저 데이터베이스에 저장해야하는 데이터를 필터링하거나 SqlBulkCopy를 사용하지 않는 것입니다. –
@ Mrose Moose : 감사합니다. 내가 저장 프로 시저에 대해 더 읽고 SqlBulkCopy를 사용하지 않는 다른 방법을 가져올 필요가 있다고 생각합니다. 고마워하는 Mr Moose again :). – Hainlp