2012-02-22 40 views
1

我想將表格從MS Access數據庫複製到SQL Server數據庫中。從MS Access到SQL Server的大容量副本

這是代碼:

private static void BulkCopyAccessToSQLServer(string sql, string destinationTable,string fileName) 
{ 
    using (DataTable dt = new DataTable()) 
    { 
    using (OleDbConnection conn = new OleDbConnection(String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0}", fileName))) 
    using (OleDbCommand cmd = new OleDbCommand(sql, conn)) 
    using (OleDbDataAdapter adapter = new OleDbDataAdapter(cmd)) 
    { 
     cmd.Connection.Open(); 
     adapter.SelectCommand.CommandTimeout = 240; 
     adapter.Fill(dt); 
     adapter.Dispose(); 
    } 
    using (SqlConnection conn2 = new SqlConnection(connStr)) 
    { 
     conn2.Open(); 
     using (SqlBulkCopy copy = new SqlBulkCopy(conn2)) 
     { 
      copy.DestinationTableName = destinationTable; 
      copy.BatchSize = 1000; 
      copy.BulkCopyTimeout = 240; 
      copy.WriteToServer(dt); 
      copy.NotifyAfter = 1000; 
     } 
    } 
    } 
} 

調用這樣這個函數...

BulkCopyAccessToSQLServer("select * from Table1", "Table1", "C:\\db.‌​accdb"); 

我得到以下錯誤:

System.Data.OleDb.OleDbException: Could not find file 'C:\db.‌​accdb'.
at System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection)
at System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup)
at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
at System.Data.OleDb.OleDbConnection.Open()
at WebService.BulkCopyAccessToSQLServer(String sql, String destinationTable, String fileName)
at WebService.Import()

我在做什麼錯?

+1

確定數據庫'C:\ db.accdb'存在嗎? – Heinzi 2012-02-22 16:50:15

+0

是的,它確實做到了 – Beginner 2012-02-22 17:02:43

+0

我通過sql管理完成了這一點,但需要通過我的代碼 – Beginner 2012-02-22 17:05:26

回答

2

您正在從堆棧跟蹤的外觀中從Web服務運行批量導入。

是否Web服務處理具有足夠的權限來訪問C:\db.accdb

+0

yeh我已經將db移到了多個位置,但仍然是相同的錯誤 – Beginner 2012-02-22 17:00:45

+0

@Beginner:您需要檢查文件的ACL(訪問控制列表),並確保您包含一個用於登錄服務的條目。例如,如果你在應用程序池'Blah'下運行,它可能是'IIS AppPool \ Blah'。 – Guvante 2012-02-22 17:03:10

+0

我檢查過它看起來都很正確 – Beginner 2012-02-23 08:55:33