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);