Transaction (Process ID) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction

前端 未结 5 1926
耶瑟儿~
耶瑟儿~ 2020-12-30 00:47

I have a C# application which is inserting data into SQL Server (2008) table using stored procedure. I am using multi-threading to do this. The stored procedure is being cal

5条回答
  •  太阳男子
    2020-12-30 01:15

    you can use from Lock object

         static object _lock = new object();
        public static void _main()
        {
                lock (_lock)
                {
                    _bulkcopy(myData);
                }
        }
        public static void _bulkcopy(DataTable dt)
        {
            try
            {
                using (var connection = new SqlConnection(ConfigurationSettings.AppSettings.Get("DBConnection")))
                {
                    connection.Open();
                    SqlTransaction transaction = connection.BeginTransaction();
    
                    using (var bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.Default, transaction))
                    {
                        bulkCopy.BatchSize = 100;
                        bulkCopy.DestinationTableName = "dbo.MyTable";
                        try
                        {
                            bulkCopy.WriteToServer(dt);
                        }
                        catch (Exception)
                        {
                            transaction.Rollback();
                            connection.Close();
                        }
                    }
    
                    transaction.Commit();
                }
    
    
    
    
            }
            catch { }
        }
    

提交回复
热议问题