2017-02-23 20 views
1
private void button5_Click(object sender, EventArgs e) 
{ 
    string filepath = textBox2.Text; 
    string connectionString_i = string.Format(@"Provider=Microsoft.Jet.OleDb.4.0; Data Source={0};Extended Properties=""Text;HDR=YES;FMT=Delimited""", 
Path.GetDirectoryName(filepath)); 

    using (OleDbConnection connection_i = new OleDbConnection(connectionString_i)) 
    { 
     connection_i.Open(); 

     OleDbCommand command = new OleDbCommand("Select * FROM [" + Path.GetFileName(filepath) +"]", connection_i); 

     using (OleDbDataReader dr = command.ExecuteReader()) 
     { 
      string sqlConnectionString = MyConString; 

      using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConnectionString)) 
      { 
       SqlBulkCopy bulkInsert = new SqlBulkCopy(sqlConnectionString); 
       bulkInsert.DestinationTableName = "Table in SQL DB"; 
       bulkInsert.WriteToServer(dr); 
       MessageBox.Show("Upload to DB Successful!"); 
      } 
     } 
     connection_i.Close(); 
    } 
} 

大きなデータのファイルを読み込んでSQLテーブルに挿入したいと考えています。問題は、SQL connetionのタイムアウトがわずか30秒であることです。 SQL接続のタイムアウトを約2〜3分に増やしたいと思います。SQL接続文字列の接続タイムアウトを増やすにはどうすればよいですか?

どうすればいいですか。お手伝いください。 csvファイルからSQLデータベースにデータをアップロードしています。

ありがとうございました。

+0

これはもっと時間が必要ではありませんが、接続自体に問題があるようです。バルクコマンドの前に読者を閉じてください。 –

+0

MySQLまたはMS SQL Serverを使用していますか? (関与していない製品にはタグを付けないでください)。 – jarlh

答えて

0

SqlBulkCopy.BulkCopyTimeoutプロパティを増やすことができます。デフォルトは30秒です。さらに、SELECTコマンドのOleDbCommand.CommandTimeoutを増やすことができます。

//set command timeout 
OleDbCommand command = 
    new OleDbCommand("Select * FROM [" + Path.GetFileName(filepath) +"]", connection_i); 
// 3 min 
command.CommandTimeout = 180; 


SqlBulkCopy bulkInsert = new SqlBulkCopy(sqlConnectionString); 
bulkInsert.BulkCopyTimeout = 180; // 3 min 
bulkInsert.DestinationTableName = "Table in SQL DB"; 
bulkInsert.WriteToServer(dr); 
0

CONNECTION STRINGに接続タイムアウトを設定するのとは別に、実際のSqlCommandに基づいてタイムアウトがあります。したがって、接続タイムアウトを3分にすることはできますが、SqlCommandの既定のタイムアウトが30秒の場合、コマンドは最初にタイムアウトになります。あなたはおそらく両方を設定したいと思うでしょう

関連する問題