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}"; }