2012-05-04 41 views
2

因此,我有以下代碼來獲取Excel文件並將其寫入我的數據庫中的表格。SQLBulkCopy不會失敗,但不會插入

 string target = Server.MapPath("~/Upload"); 
     if (fupStation.HasFile) 
     { 
      fupStation.SaveAs(System.IO.Path.Combine(target, fupStation.FileName)); 

      string connectionString = String.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;""", target + "\\" + fupStation.FileName); string query = String.Format("select * from [{0}$]", "Client Station Assignments"); 
      OleDbDataAdapter dataAdapter = new OleDbDataAdapter(query, connectionString); 

      DataSet dsStation = new DataSet(); 
      dataAdapter.Fill(dsStation); 

      DataTable dtStation = new DataTable(); 
      dtStation = dsStation.Tables[0]; 

      gvOne.DataSource = dtStation; 
      gvOne.DataBind(); 

      using (SqlBulkCopy s = new SqlBulkCopy(ConfigurationManager.ConnectionStrings["cnSQL"].ConnectionString)) 
      { 
       s.DestinationTableName = "StationImport"; 
       s.NotifyAfter = 100; 
       s.WriteToServer(dtStation); 
       s.Close(); 
      } 

     } 

所以這是問題所在。它讀取文件並填充Datatable就好了(通過填充Grid來驗證)我知道SQLBulkCopy代碼正在被調用,但最終它沒有提供任何錯誤,但在我的表中沒有任何顯示!

任何人都通過這之前呢?這是我第一次使用BulkCopy(並且也閱讀文件!),所以如果我做錯了什麼,我不會被高估。

感謝

+1

是否所有的列正確映射? 「如果兩者之間有任何不匹配的列,副本將不會成功。」 (來源http://www.sqlteam.com/article/use-sqlbulkcopy-to-quickly-load-data-from-your-client-to-sql-server) –

+0

我有一個表上的標識列,當然,不是在spressheet上。它根據我刪除那列,插入時罰款。有沒有辦法在ID列中插入表格? – Limey

+0

@凱文:好的,映射是解決方案!它似乎是因爲我有身份列,插入發生需要映射(雖然它不奇怪,它沒有給我一個錯誤)確保給和答覆,所以我可以接受。 – Limey

回答

2

我的代碼工作在vb.net

記住,數據表和SQL表需要在野外數據類型和列順序相匹配。

Using connection As SqlConnection = New SqlConnection(conn) 
     connection.Open() 
     Using bulkCopy As SqlBulkCopy = New SqlBulkCopy(connection, SqlBulkCopyOptions.TableLock, Nothing) 
      bulkCopy.DestinationTableName = "TableName" 
      bulkCopy.BulkCopyTimeout = 60000 
      bulkCopy.BatchSize = 0 
      bulkCopy.WriteToServer(MyDataTable) 
      bulkCopy.Close() 
     End Using 
     connection.Close() 
    End Using