2017-02-23 144 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秒,你的命令将首先超时。你可能想设置两个