[fix]修正UdpServer在接收广播时连续启动接收的错误,在StarAgent中,此时可能收到广播包,SocketFlags是Broadcast,需要清空,否则报错“参考的对象类型不支持尝试的操作”; 无需设置SocketOptionName.PacketInformation,在ReceiveMessageFromAsync时会自动设置,并且支持ipv6;
石头 编写于 2024-10-10 00:36:00 石头 提交于 2024-10-10 00:45:43
X
using System;
using System.Data;
using System.Data.Common;

namespace XCode.TDengine
{
    /// <summary>事务</summary>
    public class TDengineTransaction : DbTransaction
    {
        private TDengineConnection _connection;
        private readonly IsolationLevel _isolationLevel;
        //private Boolean _completed;

        internal TDengineTransaction(TDengineConnection connection, IsolationLevel isolationLevel)
        {
            _connection = connection;
            _isolationLevel = isolationLevel;

            Begin();
        }

        /// <summary>销毁</summary>
        /// <param name="disposing"></param>
        protected override void Dispose(Boolean disposing)
        {
            if (disposing && _connection.State == ConnectionState.Open)
            {
                if (_connection._transactionLevel > 0)
                {
                    _connection.Execute("ROLLBACK;");
                    _connection.Transaction = null;
                }
            }
        }

        /// <summary>数据库连接</summary>
        protected override DbConnection DbConnection => _connection;

        /// <summary>等级</summary>
        public override IsolationLevel IsolationLevel => _isolationLevel;

        /// <summary>开始事务</summary>
        public virtual void Begin()
        {
            if (_connection._transactionLevel++ > 0) return;

            _connection.Execute("BEGIN;");
        }

        /// <summary>提交事务</summary>
        public override void Commit()
        {
            if (--_connection._transactionLevel > 0) return;

            _connection.Execute("COMMIT;");
            _connection.Transaction = null;
        }

        /// <summary>回滚事务</summary>
        public override void Rollback()
        {
            if (--_connection._transactionLevel > 0) return;

            _connection.Execute("ROLLBACK;");
            _connection.Transaction = null;
        }
    }
}