取消插入命令操作如果连接超时MySQL

时间:2013-12-04 06:05:40

标签: mysql asp.net c#-4.0

我想知道如果连接超时,是否可以取消插入操作。我问这个问题的原因是因为我上传了一个blob(2-5兆字节),但我的互联网连接速度很慢,因此连接在上传完成之前超时了。这对我来说不是一个很大的问题,因为我可以简单地下次增加连接超时并再试一次。然而我的问题是,当我检查我的表时,我注意到MySQL仍然记录了我不想要的新条目的插入。

这是我正在使用的代码;

        Connection.Open();
        byte[] bytes = File.ReadAllBytes(@"C:\Users\linuxuser\Pictures\Newfolder\36.jpg");
        using (var cmd = new MySqlCommand("INSERT INTO `FileStorage` SET `File` = @image", Connection))
        {
            cmd.Parameters.Add("@image", MySqlDbType.Blob).Value = bytes;
            cmd.CommandTimeout = 180;
            cmd.ExecuteNonQuery();
        }
        Connection.Close();
        MessageBox.Show("SUccess");   

注意:表格具有自动增量主键字段。

1 个答案:

答案 0 :(得分:2)

尝试使用“交易”在表Here中插入新条目。

   MySqlTransaction trans;
   trans = connection.BeginTransaction();
   // Your Code 
   try
    {
       //By default, MySQL runs with autocommit mode enabled.
        cmd.Parameters.Add("@image", MySqlDbType.Blob).Value = bytes;            
        cmd.CommandText = "INSERT INTO `FileStorage` SET `File` = "+@image"";
        cmd.executeNonQuery();      
        trans.Commit();
    }
     catch(Exception e)
      {
         try
         {
            myTrans.Rollback();
         }
       catch (MySqlException ex)
          {
            if (trans.Connection != null)
            {
              //("An exception of type " + ex.GetType() +" was encountered while attempting to roll back the transaction.");
            }
           }
        }