internal void CreateConnectionString()
        {
            SqlConnectionStringBuilder scsb = new SqlConnectionStringBuilder
            {
                ApplicationName = ApplicationName,
                DataSource      = Datasource
            };

            if (AttachDBFilename != null && AttachDBFilename.Trim().Length > 0)
            {
                scsb.AttachDBFilename = AttachDBFilename;
            }
            if (InitialCatalog != null && InitialCatalog.Trim().Length > 0)
            {
                scsb.InitialCatalog = InitialCatalog;
            }
            if (UserId != null && UserId.Trim().Length > 0)
            {
                scsb.UserID = UserId;
            }
            if (Password != null && Password.Trim().Length > 0)
            {
                scsb.Password = Password;
            }
            scsb.ConnectTimeout           = ConnectTimeout;
            scsb.ConnectRetryCount        = ConnectRetryCount;
            scsb.ConnectRetryInterval     = ConnectRetryInterval;
            scsb.MultipleActiveResultSets = MultipleActiveResultsets;
            scsb.WorkstationID            = WorkstationID;

            ConnectionString = scsb.ConnectionString;
        }
예제 #2
0
        public SqlConnectionString(string connectionString) : base(connectionString, GetParseSynonyms())
        {
            ThrowUnsupportedIfKeywordSet(KEY.AsynchronousProcessing);
            ThrowUnsupportedIfKeywordSet(KEY.Connection_Reset);
            ThrowUnsupportedIfKeywordSet(KEY.Context_Connection);

            // Network Library has its own special error message
            if (ContainsKey(KEY.Network_Library))
            {
                throw SQL.NetworkLibraryKeywordNotSupported();
            }
            ConnectionString = connectionString;

            IntegratedSecurity = ConvertValueToIntegratedSecurity();
            Encrypt            = ConvertValueToBoolean(KEY.Encrypt, DEFAULT.Encrypt);
            Enlist             = ConvertValueToBoolean(KEY.Enlist, DEFAULT.Enlist);
            MARS = ConvertValueToBoolean(KEY.MARS, DEFAULT.MARS);
            PersistSecurityInfo = ConvertValueToBoolean(KEY.Persist_Security_Info, DEFAULT.Persist_Security_Info);
            Pooling             = ConvertValueToBoolean(KEY.Pooling, DEFAULT.Pooling);
            Replication         = ConvertValueToBoolean(KEY.Replication, DEFAULT.Replication);
            UserInstance        = ConvertValueToBoolean(KEY.User_Instance, DEFAULT.User_Instance);
            MultiSubnetFailover = ConvertValueToBoolean(KEY.MultiSubnetFailover, DEFAULT.MultiSubnetFailover);

            ConnectTimeout       = ConvertValueToInt32(KEY.Connect_Timeout, DEFAULT.ConnectTimeout);
            LoadBalanceTimeout   = ConvertValueToInt32(KEY.Load_Balance_Timeout, DEFAULT.LoadBalanceTimeout);
            MaxPoolSize          = ConvertValueToInt32(KEY.Max_Pool_Size, DEFAULT.Max_Pool_Size);
            MinPoolSize          = ConvertValueToInt32(KEY.Min_Pool_Size, DEFAULT.Min_Pool_Size);
            PacketSize           = ConvertValueToInt32(KEY.Packet_Size, DEFAULT.Packet_Size);
            ConnectRetryCount    = ConvertValueToInt32(KEY.Connect_Retry_Count, DEFAULT.Connect_Retry_Count);
            ConnectRetryInterval = ConvertValueToInt32(KEY.Connect_Retry_Interval, DEFAULT.Connect_Retry_Interval);

            ApplicationIntent = ConvertValueToApplicationIntent();
            ApplicationName   = ConvertValueToString(KEY.Application_Name, DEFAULT.ApplicationName);
            AttachDBFilename  = ConvertValueToString(KEY.AttachDBFilename, DEFAULT.AttachDbFilename);
            CurrentLanguage   = ConvertValueToString(KEY.Current_Language, DEFAULT.CurrentLanguage);
            DataSource        = ConvertValueToString(KEY.Data_Source, DEFAULT.DataSource);
            //LocalDBInstance = LocalDbApi.GetLocalDbInstanceNameFromServerName(DataSource);
            FailoverPartner        = ConvertValueToString(KEY.FailoverPartner, DEFAULT.FailoverPartner);
            InitialCatalog         = ConvertValueToString(KEY.Initial_Catalog, DEFAULT.InitialCatalog);
            Password               = ConvertValueToString(KEY.Password, DEFAULT.Password);
            TrustServerCertificate = ConvertValueToBoolean(KEY.TrustServerCertificate, DEFAULT.TrustServerCertificate);

            // Temporary string - this value is stored internally as an enum.
            var typeSystemVersionString  = ConvertValueToString(KEY.Type_System_Version, null);
            var transactionBindingString = ConvertValueToString(KEY.TransactionBinding, null);

            UserID        = ConvertValueToString(KEY.User_ID, DEFAULT.User_ID);
            WorkstationId = ConvertValueToString(KEY.Workstation_Id, null);


            if (LoadBalanceTimeout < 0)
            {
                throw ADP.InvalidConnectionOptionValue(KEY.Load_Balance_Timeout);
            }

            if (ConnectTimeout < 0)
            {
                throw ADP.InvalidConnectionOptionValue(KEY.Connect_Timeout);
            }

            if (MaxPoolSize < 1)
            {
                throw ADP.InvalidConnectionOptionValue(KEY.Max_Pool_Size);
            }

            if (MinPoolSize < 0)
            {
                throw ADP.InvalidConnectionOptionValue(KEY.Min_Pool_Size);
            }
            if (MaxPoolSize < MinPoolSize)
            {
                throw ADP.InvalidMinMaxPoolSizeValues();
            }

            if (PacketSize < TdsEnums.MIN_PACKET_SIZE || TdsEnums.MAX_PACKET_SIZE < PacketSize)
            {
                throw SQL.InvalidPacketSizeValue();
            }


            ValidateValueLength(ApplicationName, TdsEnums.MAXLEN_APPNAME, KEY.Application_Name);
            ValidateValueLength(CurrentLanguage, TdsEnums.MAXLEN_LANGUAGE, KEY.Current_Language);
            ValidateValueLength(DataSource, TdsEnums.MAXLEN_SERVERNAME, KEY.Data_Source);
            ValidateValueLength(FailoverPartner, TdsEnums.MAXLEN_SERVERNAME, KEY.FailoverPartner);
            ValidateValueLength(InitialCatalog, TdsEnums.MAXLEN_DATABASE, KEY.Initial_Catalog);
            ValidateValueLength(Password, TdsEnums.MAXLEN_PASSWORD, KEY.Password);
            ValidateValueLength(UserID, TdsEnums.MAXLEN_USERNAME, KEY.User_ID);
            if (null != WorkstationId)
            {
                ValidateValueLength(WorkstationId, TdsEnums.MAXLEN_HOSTNAME, KEY.Workstation_Id);
            }

            if (!string.Equals(DEFAULT.FailoverPartner, FailoverPartner, StringComparison.OrdinalIgnoreCase))
            {
                // fail-over partner is set

                if (MultiSubnetFailover)
                {
                    throw SQL.MultiSubnetFailoverWithFailoverPartner(false, null);
                }

                if (string.Equals(DEFAULT.InitialCatalog, InitialCatalog, StringComparison.OrdinalIgnoreCase))
                {
                    throw ADP.MissingConnectionOptionValue(KEY.FailoverPartner, KEY.Initial_Catalog);
                }
            }

            if (0 <= AttachDBFilename.IndexOf('|'))
            {
                throw ADP.InvalidConnectionOptionValue(KEY.AttachDBFilename);
            }
            ValidateValueLength(AttachDBFilename, TdsEnums.MAXLEN_ATTACHDBFILE, KEY.AttachDBFilename);

            TypeSystemAssemblyVersion = constTypeSystemAsmVersion10;

            if (UserInstance && !string.IsNullOrEmpty(FailoverPartner))
            {
                throw SQL.UserInstanceFailoverNotCompatible();
            }

            if (string.IsNullOrEmpty(typeSystemVersionString))
            {
                typeSystemVersionString = DbConnectionStringDefaults.TypeSystemVersion;
            }

            if (typeSystemVersionString.Equals(TYPESYSTEMVERSION.Latest, StringComparison.OrdinalIgnoreCase))
            {
                TypeSystemVersion = TypeSystem.Latest;
            }
            else if (typeSystemVersionString.Equals(TYPESYSTEMVERSION.SQL_Server_2000, StringComparison.OrdinalIgnoreCase))
            {
                TypeSystemVersion = TypeSystem.SQLServer2000;
            }
            else if (typeSystemVersionString.Equals(TYPESYSTEMVERSION.SQL_Server_2005, StringComparison.OrdinalIgnoreCase))
            {
                TypeSystemVersion = TypeSystem.SQLServer2005;
            }
            else if (typeSystemVersionString.Equals(TYPESYSTEMVERSION.SQL_Server_2008, StringComparison.OrdinalIgnoreCase))
            {
                TypeSystemVersion = TypeSystem.SQLServer2008;
            }
            else if (typeSystemVersionString.Equals(TYPESYSTEMVERSION.SQL_Server_2012, StringComparison.OrdinalIgnoreCase))
            {
                TypeSystemVersion         = TypeSystem.SQLServer2012;
                TypeSystemAssemblyVersion = constTypeSystemAsmVersion11;
            }
            else
            {
                throw ADP.InvalidConnectionOptionValue(KEY.Type_System_Version);
            }

            if (string.IsNullOrEmpty(transactionBindingString))
            {
                transactionBindingString = DbConnectionStringDefaults.TransactionBinding;
            }

            if (transactionBindingString.Equals(TRANSACTIONBINDING.ImplicitUnbind, StringComparison.OrdinalIgnoreCase))
            {
                TransactionBinding = TransactionBindingEnum.ImplicitUnbind;
            }
            else if (transactionBindingString.Equals(TRANSACTIONBINDING.ExplicitUnbind, StringComparison.OrdinalIgnoreCase))
            {
                TransactionBinding = TransactionBindingEnum.ExplicitUnbind;
            }
            else
            {
                throw ADP.InvalidConnectionOptionValue(KEY.TransactionBinding);
            }

            if (ApplicationIntent == ApplicationIntent.ReadOnly && !string.IsNullOrEmpty(FailoverPartner))
            {
                throw SQL.ROR_FailoverNotSupportedConnString();
            }

            if (ConnectRetryCount < 0 || ConnectRetryCount > 255)
            {
                throw ADP.InvalidConnectRetryCountValue();
            }

            if (ConnectRetryInterval < 1 || ConnectRetryInterval > 60)
            {
                throw ADP.InvalidConnectRetryIntervalValue();
            }
        }