2015-01-13 154 views
0

這很奇怪,我試圖用數據讀取器訪問excel表格,並得到一個我很難弄清楚的錯誤。想知道是否有人遇到過同樣的問題。無法讀取excel表格

Microsoft Office Access數據庫引擎找不到對象'SHEETNAME'。請確保該對象存在並且,您拼寫其名稱和路徑名稱正確

var str = new StringBuilder(); 

     using (var myConnection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=foreignkeys.xlsx;Extended Properties='Excel 8.0;HDR=Yes'")) 
     { 
      using (var myCommand = new OleDbCommand()) 
      { 
       myConnection.Open(); 
       myCommand.Connection = myConnection; 
       myCommand.CommandText = "select TableName, ColumnName from [SHEETNAME]"; 

       using (var dr = myCommand.ExecuteReader()) 
       { 
        while (dr.Read()) 
        { 
         var tableName = dr["TableName"].ToString(); 
         var columnName = dr["ColumnName"].ToString(); 
         var tmp = columnName; 
         tmp = tmp.Replace("ID", "").Replace("Id", ""); 

         str.AppendLine(string.Format("IF NOT EXISTS (SELECT 1 FROM sys.foreign_keys AS FK WHERE name = 'FK_{0}_{1}' AND parent_object_id = OBJECT_ID('{2}'))", tableName, tmp, tableName)); 
         str.AppendLine("BEGIN"); 
         str.AppendLine(string.Format("ALTER TABLE dbo.{0} WITH CHECK", tableName)); 
         str.AppendLine(string.Format("ADD CONSTRAINT FK_{0}_{1} FOREIGN KEY ({2}) REFERENCES dbo.{3}({4})", tableName, tmp, columnName, tmp, columnName)); 
         str.AppendLine("END"); 
         str.AppendLine(""); 
         str.AppendLine(""); 
        } 
       }      
      } 
     } 
     return str.ToString(); 

回答

1

假設您的Excel文件包含一個名爲SHEETNAME,那麼你需要寫

myCommand.CommandText = "select TableName, ColumnName from [SHEETNAME$]"; 
                    ^
+0

你就是那人史蒂夫表!那樣做了。謝謝 :-) – user167698