diff --git a/docs/guide/jsonrpc_protocol.md b/docs/guide/jsonrpc_protocol.md
index b78d2eaa..c4033dcd 100644
--- a/docs/guide/jsonrpc_protocol.md
+++ b/docs/guide/jsonrpc_protocol.md
@@ -532,7 +532,11 @@ Get a connection string for the provided connection.
///
public string OwnerUri { get; set; }
+ /// Connection info of the connection
+ ///
+ public ConnectionDetails ConnectionDetails { get; set; }
///
+
/// Indicates whether the password should be return in the connection string. Default is false.
///
public bool IncludePassword { get; set; }
diff --git a/src/Microsoft.SqlTools.ServiceLayer/Connection/ConnectionService.cs b/src/Microsoft.SqlTools.ServiceLayer/Connection/ConnectionService.cs
index f30fc5a6..1be5e7db 100644
--- a/src/Microsoft.SqlTools.ServiceLayer/Connection/ConnectionService.cs
+++ b/src/Microsoft.SqlTools.ServiceLayer/Connection/ConnectionService.cs
@@ -1317,27 +1317,34 @@ namespace Microsoft.SqlTools.ServiceLayer.Connection
{
string connectionString = string.Empty;
ConnectionInfo info;
- if (TryFindConnection(connStringParams.OwnerUri, out info))
+ SqlConnectionStringBuilder connStringBuilder;
+ try
+ {
+ // set connection string using connection uri if connection details are undefined
+ if (connStringParams.ConnectionDetails == null)
+ {
+ TryFindConnection(connStringParams.OwnerUri, out info);
+ connStringBuilder = CreateConnectionStringBuilder(info.ConnectionDetails);
+ }
+ // set connection string using connection details
+ else
+ {
+ connStringBuilder = CreateConnectionStringBuilder(connStringParams.ConnectionDetails as ConnectionDetails);
+ }
+ if (!connStringParams.IncludePassword)
+ {
+ connStringBuilder.Password = ConnectionService.PasswordPlaceholder;
+ }
+ // default connection string application name to always be included unless set to false
+ if (!connStringParams.IncludeApplicationName.HasValue || connStringParams.IncludeApplicationName.Value == true)
+ {
+ connStringBuilder.ApplicationName = "sqlops-connection-string";
+ }
+ connectionString = connStringBuilder.ConnectionString;
+ }
+ catch (Exception e)
{
- try
- {
- SqlConnectionStringBuilder connStringBuilder = CreateConnectionStringBuilder(info.ConnectionDetails);
-
- if (!connStringParams.IncludePassword)
- {
- connStringBuilder.Password = ConnectionService.PasswordPlaceholder;
- }
- // default connection string application name to always be included unless set to false
- if (!connStringParams.IncludeApplicationName.HasValue || connStringParams.IncludeApplicationName.Value == true)
- {
- connStringBuilder.ApplicationName = "sqlops-connection-string";
- }
- connectionString = connStringBuilder.ConnectionString;
- }
- catch (Exception e)
- {
- await requestContext.SendError(e.ToString());
- }
+ await requestContext.SendError(e.ToString());
}
await requestContext.SendResult(connectionString);
diff --git a/src/Microsoft.SqlTools.ServiceLayer/Connection/Contracts/GetConnectionStringParams.cs b/src/Microsoft.SqlTools.ServiceLayer/Connection/Contracts/GetConnectionStringParams.cs
index 8d151405..e5d944f5 100644
--- a/src/Microsoft.SqlTools.ServiceLayer/Connection/Contracts/GetConnectionStringParams.cs
+++ b/src/Microsoft.SqlTools.ServiceLayer/Connection/Contracts/GetConnectionStringParams.cs
@@ -15,6 +15,11 @@ namespace Microsoft.SqlTools.ServiceLayer.Connection.Contracts
///
public string OwnerUri { get; set; }
+ ///
+ /// Connection information of the connection
+ ///
+ public ConnectionDetails ConnectionDetails { get; set; }
+
///
/// Indicates whether the password should be return in the connection string
/// default is set to false
@@ -25,6 +30,6 @@ namespace Microsoft.SqlTools.ServiceLayer.Connection.Contracts
/// Indicates whether the application name should be return in the connection string
/// default is set to true
///
- public bool? IncludeApplicationName { get; set;}
+ public bool? IncludeApplicationName { get; set; }
}
}
diff --git a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/Connection/ConnectionServiceTests.cs b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/Connection/ConnectionServiceTests.cs
index a8f3d568..8267c1b1 100644
--- a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/Connection/ConnectionServiceTests.cs
+++ b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/Connection/ConnectionServiceTests.cs
@@ -124,6 +124,7 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.Connection
var requestParams = new GetConnectionStringParams()
{
OwnerUri = result.ConnectionInfo.OwnerUri,
+ ConnectionDetails = null,
IncludePassword = false,
IncludeApplicationName = true
};
@@ -154,11 +155,12 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.Connection
var resultApplicationName = result.ConnectionInfo.ConnectionDetails.ApplicationName;
var requestContext = new Mock>();
- requestContext.Setup(x => x.SendResult(It.Is((connectionString) => !connectionString.Contains("Application Name="+ resultApplicationName))))
+ requestContext.Setup(x => x.SendResult(It.Is((connectionString) => !connectionString.Contains("Application Name=" + resultApplicationName))))
.Returns(Task.FromResult(new object()));
var requestParams = new GetConnectionStringParams()
{
OwnerUri = result.ConnectionInfo.OwnerUri,
+ ConnectionDetails = null,
IncludePassword = false,
IncludeApplicationName = false
};
@@ -166,5 +168,32 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.Connection
await service.HandleGetConnectionStringRequest(requestParams, requestContext.Object);
requestContext.VerifyAll();
}
+
+ ///
+ /// Test HandleGetConnectionStringRequest
+ /// Using connection details to build connection string
+ ///
+ [Test]
+ public async Task GetCurrentConnectionStringTestwithConnectionDetails()
+ {
+ // If we make a connection to a live database
+ ConnectionService service = ConnectionService.Instance;
+ var result = LiveConnectionHelper.InitLiveConnectionInfo();
+ var resultConnectionDetails = result.ConnectionInfo.ConnectionDetails;
+ var requestContext = new Mock>();
+
+ requestContext.Setup(x => x.SendResult(It.Is((connectionString) => connectionString.Contains(resultConnectionDetails.ToString()))))
+ .Returns(Task.FromResult(new object()));
+ var requestParams = new GetConnectionStringParams()
+ {
+ OwnerUri = null,
+ ConnectionDetails = {ServerName = "testServer", DatabaseName = "testDatabase", UserName = "sa", Password = "password", ApplicationName = "TestApp"},
+ IncludePassword = true,
+ IncludeApplicationName = true
+ };
+
+ await service.HandleGetConnectionStringRequest(requestParams, requestContext.Object);
+ requestContext.VerifyAll();
+ }
}
}