2012-02-22 17 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

+0

はい、それは挑戦 – Beginner

+0

ive SQL管理を通じてこれを行うが、私のコードを介して行う必要があります – Beginner

答えて

2

スタックトレースの外観からWebサービスからバルクインポートを実行しています。

Webサービスプロセスには、C:\db.accdbにアクセスするのに十分な権限がありますか?

+0

yeh私はいくつかの場所にデータベースを移動しましたが、同じエラー – Beginner

+0

@Beginner:ファイルのACL(アクセス制御リスト)を確認し、サービスログインのエントリが含まれていることを確認する必要があります。たとえば、アプリケーションプール 'Blah'の下で実行していた場合、' IIS AppPool \ Blah'となります。 – Guvante

+0

Iveがすべて正しいかチェックしました – Beginner

関連する問題