diff --git a/doc/snippets/Microsoft.Data.SqlClient/SqlConnectionEncryptOption.xml b/doc/snippets/Microsoft.Data.SqlClient/SqlConnectionEncryptOption.xml index f5f40255a3..6db9533606 100644 --- a/doc/snippets/Microsoft.Data.SqlClient/SqlConnectionEncryptOption.xml +++ b/doc/snippets/Microsoft.Data.SqlClient/SqlConnectionEncryptOption.xml @@ -12,6 +12,31 @@ Implicit conversions have been added to maintain backwards compatibility with bo ]]> + + + Converts the specified string representation of a logical value to its equivalent. + + A string containing the value to convert. + + An object that is equivalent to contained in . + + + Throws exception if provided is not convertible to type. + + + + + Converts the specified string representation of a logical value to its equivalent and returns a value that indicates whether the conversion succeeded. + + A string containing the value to convert. + + An object that is equivalent to contained in . if conversion fails. + + + if the parameter was converted successfully; otherwise, . + + This method does not throw an exception if conversion fails. + Specifies that TLS encryption is optional when connecting to the server. If the server requires encryption, encryption will be negotiated. diff --git a/src/Microsoft.Data.SqlClient/netcore/ref/Microsoft.Data.SqlClient.cs b/src/Microsoft.Data.SqlClient/netcore/ref/Microsoft.Data.SqlClient.cs index deb4ad0bf9..db0842d4f2 100644 --- a/src/Microsoft.Data.SqlClient/netcore/ref/Microsoft.Data.SqlClient.cs +++ b/src/Microsoft.Data.SqlClient/netcore/ref/Microsoft.Data.SqlClient.cs @@ -506,6 +506,10 @@ public enum SqlConnectionIPAddressPreference /// public sealed class SqlConnectionEncryptOption { + /// + public static SqlConnectionEncryptOption Parse(string value) => throw null; + /// + public static bool TryParse(string value, out SqlConnectionEncryptOption result) => throw null; /// public static SqlConnectionEncryptOption Optional => throw null; diff --git a/src/Microsoft.Data.SqlClient/netfx/ref/Microsoft.Data.SqlClient.cs b/src/Microsoft.Data.SqlClient/netfx/ref/Microsoft.Data.SqlClient.cs index 29cd583c94..5d78fb574e 100644 --- a/src/Microsoft.Data.SqlClient/netfx/ref/Microsoft.Data.SqlClient.cs +++ b/src/Microsoft.Data.SqlClient/netfx/ref/Microsoft.Data.SqlClient.cs @@ -923,6 +923,12 @@ public enum SqlConnectionIPAddressPreference /// public sealed class SqlConnectionEncryptOption { + /// + public static SqlConnectionEncryptOption Parse(string value) => throw null; + + /// + public static bool TryParse(string value, out SqlConnectionEncryptOption result) => throw null; + /// public static SqlConnectionEncryptOption Optional => throw null; diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionEncryptOption.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionEncryptOption.cs index 6d488ce872..fde49b3980 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionEncryptOption.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionEncryptOption.cs @@ -2,6 +2,7 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. +using System; using Microsoft.Data.Common; namespace Microsoft.Data.SqlClient @@ -29,28 +30,46 @@ private SqlConnectionEncryptOption(string value) _value = value; } - internal static SqlConnectionEncryptOption Parse(string value) + /// + public static SqlConnectionEncryptOption Parse(string value) { - switch (value.ToLower()) + if (TryParse(value, out SqlConnectionEncryptOption result)) + { + return result; + } + else + { + throw ADP.InvalidConnectionOptionValue(SqlConnectionString.KEY.Encrypt); + } + } + + /// + public static bool TryParse(string value, out SqlConnectionEncryptOption result) + { + switch (value?.ToLower()) { case TRUE_LOWER: case YES_LOWER: case MANDATORY_LOWER: { - return Mandatory; + result = Mandatory; + return true; } case FALSE_LOWER: case NO_LOWER: case OPTIONAL_LOWER: { - return Optional; + result = Optional; + return true; } case STRICT_LOWER: { - return Strict; + result = Strict; + return true; } default: - throw ADP.InvalidConnectionOptionValue(SqlConnectionString.KEY.Encrypt); + result = null; + return false; } } diff --git a/src/Microsoft.Data.SqlClient/tests/FunctionalTests/SqlConnectionStringBuilderTest.cs b/src/Microsoft.Data.SqlClient/tests/FunctionalTests/SqlConnectionStringBuilderTest.cs index 14247ac8a5..828152c4ab 100644 --- a/src/Microsoft.Data.SqlClient/tests/FunctionalTests/SqlConnectionStringBuilderTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/FunctionalTests/SqlConnectionStringBuilderTest.cs @@ -385,6 +385,47 @@ public void ConnectionBuilderEncryptBackwardsCompatibility() Assert.True(builder.Encrypt); } + [Theory] + [InlineData("true", "True")] + [InlineData("mandatory", "True")] + [InlineData("yes", "True")] + [InlineData("false", "False")] + [InlineData("optional", "False")] + [InlineData("no", "False")] + [InlineData("strict", "Strict")] + public void EncryptParserValidValuesParsesSuccessfully(string value, string expectedValue) + => Assert.Equal(expectedValue, SqlConnectionEncryptOption.Parse(value).ToString()); + + [Theory] + [InlineData("something")] + [InlineData("")] + [InlineData(null)] + [InlineData(" true ")] + public void EncryptParserInvalidValuesThrowsException(string value) + => Assert.Throws(() => SqlConnectionEncryptOption.Parse(value)); + + [Theory] + [InlineData("true", "True")] + [InlineData("mandatory", "True")] + [InlineData("yes", "True")] + [InlineData("false", "False")] + [InlineData("optional", "False")] + [InlineData("no", "False")] + [InlineData("strict", "Strict")] + public void EncryptTryParseValidValuesReturnsTrue(string value, string expectedValue) + { + Assert.True(SqlConnectionEncryptOption.TryParse(value, out var result)); + Assert.Equal(expectedValue, result.ToString()); + } + + [Theory] + [InlineData("something")] + [InlineData("")] + [InlineData(null)] + [InlineData(" true ")] + public void EncryptTryParseInvalidValuesReturnsFalse(string value) + => Assert.False(SqlConnectionEncryptOption.TryParse(value, out _)); + internal void ExecuteConnectionStringTests(string connectionString) { SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connectionString);