2011-01-11 107 views
0

我有一個Excel表單,包含4列(JobCode,JobName,StartDate,EndDate)。在一個規則的基礎上,我必須驗證第1張excel表格,並將第2張excel表格中的所有記錄(第1張excel表格中存在的重複記錄除外)全部插入。 我試圖使用列表。但它按預期工作。如何使用oledb刪除excel表單中的重複記錄

List<string> JobCodeList = new List<string>(); 
for (int iRowCount = 0; iRowCount < hrms_jobdata.Tables[0].Rows.Count; iRowCount++) 
{ 
    JobCode = hrms_jobdata.Tables[0].Rows[iRowCount]["Job Code"].ToString(); 
    JobName = hrms_jobdata.Tables[0].Rows[iRowCount]["Job Name"].ToString(); 
    StartDate = hrms_jobdata.Tables[0].Rows[iRowCount]["Start Date"].ToString(); 
    EndDate = hrms_jobdata.Tables[0].Rows[iRowCount]["End Date"].ToString(); 
    JobCodeList.Add(JobCode + JobName); 
} 

connectionhrms_job.Close(); 


for (int iRowCount = 0; iRowCount < hrms_jobdata.Tables[0].Rows.Count; iRowCount++) 
{ 
    JobCode = hrms_jobdata.Tables[0].Rows[iRowCount]["Job Code"].ToString(); 
    JobName = hrms_jobdata.Tables[0].Rows[iRowCount]["Job Name"].ToString(); 
    StartDate = hrms_jobdata.Tables[0].Rows[iRowCount]["Start Date"].ToString(); 
    EndDate = hrms_jobdata.Tables[0].Rows[iRowCount]["End Date"].ToString(); 

    DateTime convertedstart = DateTime.Parse(StartDate); 
    StartDateFormated = convertedstart.ToString("dd-MM-yyyy"); 

    DateTime convertedend = DateTime.Parse(EndDate); 
    EndDateFormated = convertedend.ToString("dd-MM-yyyy"); 

    List<string> dupvalue = removeDuplicates(JobCodeList); 

    foreach (string value in dupvalue) 
    { 
     string jobcodename = value; 
    } 

    string connectionStringdest = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + pathdestination + ";Extended Properties=Excel 12.0;"; 
    DbProviderFactory factorydest = DbProviderFactories.GetFactory("System.Data.OleDb"); 
    DbConnection connectiondest = factorydest.CreateConnection(); 
    connectiondest.ConnectionString = connectionStringdest; 
    DbCommand command = connectiondest.CreateCommand(); 
    StringBuilder inserthrms_job = new StringBuilder(); 
    inserthrms_job = inserthrms_job.Append("Insert into [hrms_job$] values ('" + JobCode + "', '" + JobName + "', '" + StartDateFormated + "', '" + EndDateFormated + "','" + JobCode + " " + JobName + "') "); 
    inserthrms_job = inserthrms_job.Append(";"); 
    command.CommandText = inserthrms_job.ToString(); 
    connectiondest.Open(); 
    command.ExecuteNonQuery(); 
    connectiondest.Close(); 
} 
+0

嗯,你的代碼格式的一部分出了問題,我沒有看到你的問題是什麼。你說你想要它做什麼,然後你說列表正在按預期工作......但不是你遇到什麼麻煩。 – 2011-01-11 17:51:03

回答

0

當你查詢源電子表格,只需做一個「由字段1,字段2,字段3選擇頂層1字段1,字段2,從[表$]組字段3」。這樣你只能讀取第一條記錄,而不是重複記錄。

0

好問題 - 我不認爲通過oledbadapter中的SELECT語句,我可以看到每個答案(如果有的話,請指教)。

看到這個OleDBAdapter Excel QA我通過堆棧溢出發佈。

把你的數據集放入一個對象,就像我在帖子底部所做的一樣。

然後通過enumerable.distinct(see MSDN example)擴展對象,因此您的對象通過使用默認的相等比較器來比較值,從而從一個序列中返回不同的元素。

然後在該帖子底部:

var noduplicates = query.Distinct(); 
foreach (var rec in noduplicates) 
    Console.WriteLine(rec.ManagedLocationID + " " + rec.PartID + " " + rec.Quantity);