2017-02-23 139 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連接超時只有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秒,你的命令將首先超時。你可能想設置兩個