2011-08-30 42 views
1

我想從Excel(xls)電子表格中導入數據。如果重複值出現在標題行中,我需要拋出一個錯誤。我正在使用OleDbDataReader來獲取工作表數據。我遇到的問題是.Net正在將一個唯一的整數附加到重複列的末尾,以便所有值都是唯一的。如何防止從自動追加整數OleDbDataReader.ExecuteReader複製列值

標題值在運行時將是未知的。如果找到重複的頭部值,則應該停止處理該文件。

例如,下列頭一個電子表格: 製造商,型號,年份,牌子 將顯示爲: 品牌,型號,年份,Make1

下面是一些代碼:

  string selectString = "Select * from $Sheet1"; 
      xlConnection = new OleDbConnection(connectionString); 
      OleDbCommand cmd = new OleDbCommand(selectString, xlConnection); 
      OleDbDataReader reader = cmd.ExecuteReader(); 

      while (reader.Read()) 
      { 
       for (int fieldIndex = 0; fieldIndex < reader.FieldCount; fieldIndex++) 
       { 
        string columnValue = reader.GetName(fieldIndex); 
       } 
      } 

取得名稱退回品牌,型號,年份,品牌1

有沒有辦法阻止這種行爲?

回答

2

考慮使用:代替

string selectString = "Select Make, Model, Year from $Sheet1"; 

string selectString = "Select * from $Sheet1"; 
+0

非常接近我的答案將是。確保運行時不會附加數字以防止重複列名(這實際上會導致問題)的最好方法是使用AS關鍵字明確設置要在SQL中返回的列名。 +1。 – David

+0

在運行時不會知道列名。我們使用的導入代碼允許用戶導入電子表格中最多包含255列的任何文件。 – Brian

+0

如果有重複的列,你是否還想繼續處理文件? – Arun

0

我有同樣的要求,面臨着同樣的挑戰。

我通過修改連接字符串來設置HDR = NO來解決它。然後選擇第一行並遍歷每列中的值以檢查唯一性。如果我發現匹配,我拋出DuplicatNameException與DataTable保持一致。

希望這會有所幫助。