using System.Data.Common;
using System.Runtime.Serialization;
using Microsoft.Data.SqlClient;
using Umbraco.Cms.Core.Install.Models;
using Umbraco.Cms.Infrastructure.Persistence;
using Umbraco.Extensions;
namespace Umbraco.Cms.Persistence.SqlServer.Services;
///
/// Provider metadata for SQL Server
///
[DataContract]
public class SqlServerDatabaseProviderMetadata : IDatabaseProviderMetadata
{
///
public Guid Id => new("5e1ad149-1951-4b74-90bf-2ac2aada9e73");
///
public int SortOrder => 2;
///
public string DisplayName => "SQL Server";
///
public string DefaultDatabaseName => string.Empty;
///
public string ProviderName => Constants.ProviderName;
///
public bool SupportsQuickInstall => false;
///
public bool IsAvailable => true;
///
public bool RequiresServer => true;
///
public string ServerPlaceholder => "(local)\\SQLEXPRESS";
///
public bool RequiresCredentials => true;
///
public bool SupportsIntegratedAuthentication => true;
///
public bool RequiresConnectionTest => true;
///
public bool ForceCreateDatabase => false;
///
public bool CanRecognizeConnectionString(string? connectionString)
{
if (connectionString is null)
{
return false;
}
try
{
var builder = new SqlConnectionStringBuilder(connectionString);
return string.IsNullOrEmpty(builder.AttachDBFilename);
}
catch (ArgumentException)
{
return false;
}
}
///
public string GenerateConnectionString(DatabaseModel databaseModel) =>
databaseModel.IntegratedAuth
? $"Server={databaseModel.Server};Database={databaseModel.DatabaseName};Integrated Security=true"
: $"Server={databaseModel.Server};Database={databaseModel.DatabaseName};User Id={databaseModel.Login};Password={databaseModel.Password}";
}