2013-11-21 26 views
4

我想從文件中讀取數據並使用批量複製將其插入到數據庫表中。Sql批量複製無法訪問目標表

當我嘗試運行我的代碼,我得到的錯誤:「無法訪問Denstination表」

FlatTable的宣言。

System.Data.DataTable flatTableTempData = new System.Data.DataTable("FlatTable"); 

DataColumn DistrictColumn = new DataColumn(); 
DistrictColumn.ColumnName = "DistrictName"; 
// Create Column 3: TotalSales 
DataColumn TownColumn = new DataColumn(); 
TownColumn.ColumnName = "TownName"; 
DataColumn FarmerColumn = new DataColumn(); 
FarmerColumn.ColumnName = "FarmerName"; 

flatTableTempData.Columns.Add(DistrictColumn); 
flatTableTempData.Columns.Add(TownColumn); 
flatTableTempData.Columns.Add(FarmerColumn); 

這是我的代碼,以連接字符串,並使用批量複製插入:

using (SqlConnection con = new SqlConnection("Data Source=DRTARIQ-PC\\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=TestDB2")) 
{ 
    con.Open(); 

    using (SqlBulkCopy s = new SqlBulkCopy(con)) 
    { 

     s.DestinationTableName = flatTableTempData.TableName; 

     foreach (var column in flatTableTempData.Columns) 
      s.ColumnMappings.Add(column.ToString(), column.ToString()); 

     s.BulkCopyTimeout = 500; 
     s.WriteToServer(flatTableTempData); 


    } 
} 
+0

用戶執行此代碼是否具有足夠的權限在表上?我相信至少需要SELECT和INSERT。 – stuartd

+0

我讀了關於權限我們如何給用戶這樣的權限......現在我需要他插入權限 – user1056466

+0

我們可以看到「flatTableTempData」的聲明嗎? –

回答

1

我遇到了同樣的問題。表存在,SQL用戶有權訪問但SqlBulkCopy無法訪問表。我的問題原來是我關閉索引來嘗試並更快地插入(bulkcopy後的重建索引),但是這使得表無法訪問。在我再次打開索引後,SqlBulkCopy可以訪問表格。

+0

你是如何打開和關閉索引? – MaylorTaylor

+0

使用ObjectContext的ExecuteStoreCommand啓用[ALTER INDEX [IndexName] ON [Schema]。[TableName] DISABLE「並啓用索引:」ALTER INDEX [IndexName] ON [Schema]。[TableName] REBUILD「。 –

1

在WriteToServerSqlBulkCopy的的方法的表名必須以[]標誌包圍。

+0

在我的情況下,只有表名是保留字(例如'Group')時才需要'[]'符號。謝謝! – Rodolphe