2012-05-04 40 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