diff options
Diffstat (limited to 'Software/Visual_Studio/Tango.Core/DataSource.cs')
| -rw-r--r-- | Software/Visual_Studio/Tango.Core/DataSource.cs | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/Software/Visual_Studio/Tango.Core/DataSource.cs b/Software/Visual_Studio/Tango.Core/DataSource.cs new file mode 100644 index 000000000..fb46faa2e --- /dev/null +++ b/Software/Visual_Studio/Tango.Core/DataSource.cs @@ -0,0 +1,131 @@ +using System; +using System.Collections.Generic; +using System.Data.Common; +using System.Data.SqlClient; +using System.Data.SQLite; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.Core +{ + /// <summary> + /// Represents an SQL data source. + /// </summary> + public class DataSource + { + /// <summary> + /// Gets or sets the type of source. + /// </summary> + public DataSourceType Type { get; set; } + + /// <summary> + /// Gets or sets the address. + /// </summary> + public String Address { get; set; } + + /// <summary> + /// Gets or sets the catalog name. + /// </summary> + public String Catalog { get; set; } + + /// <summary> + /// Gets or sets a value indicating whether to use integrated security. + /// </summary> + public bool IntegratedSecurity { get; set; } + + /// <summary> + /// Gets or sets the user name to use if <see cref="IntegratedSecurity"/> is false. + /// </summary> + public String UserName { get; set; } + + /// <summary> + /// Gets or sets the password to use if <see cref="IntegratedSecurity"/> is false. + /// </summary> + public String Password { get; set; } + + /// <summary> + /// Initializes a new instance of the <see cref="DataSource"/> class. + /// </summary> + public DataSource() + { + Type = DataSourceType.SQLServer; + Address = "localhost\\SQLEXPRESS"; + Catalog = "Tango"; + IntegratedSecurity = true; + UserName = String.Empty; + Password = String.Empty; + } + + /// <summary> + /// Creates a DBConnection instance which represents this data source. + /// </summary> + /// <returns></returns> + public DbConnection ToConnection() + { + switch (Type) + { + case DataSourceType.SQLite: + + var connection = new SQLiteConnection() + { + ConnectionString = new SQLiteConnectionStringBuilder() { DataSource = Path.GetFullPath(Address), ForeignKeys = true }.ConnectionString + }; + return connection; + + case DataSourceType.MDF: + + if (IntegratedSecurity) + { + return new SqlConnection(String.Format("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFileName={0};Initial Catalog={1};Integrated Security=True;MultipleActiveResultSets=True;App=EntityFramework", Path.GetFullPath(Address), Catalog)); + } + else + { + return new SqlConnection(String.Format("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFileName={0};Initial Catalog={1};Integrated Security=False;User Id={2};Password={3};MultipleActiveResultSets=True;App=EntityFramework", Path.GetFullPath(Address), Catalog, UserName, Password)); + } + + case DataSourceType.SQLServer: + + if (IntegratedSecurity) + { + return new SqlConnection(String.Format("Data Source={0};Initial Catalog={1};Integrated Security=True;", Address, Catalog)); + } + else + { + return new SqlConnection(String.Format("Data Source={0};Initial Catalog={1};Integrated Security=False;User Id={2};Password={3};", Address, Catalog, UserName, Password)); + } + + case DataSourceType.Azure: + + if (IntegratedSecurity) + { + //var provider = new Microsoft.IdentityModel.Clients(); + + SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(); + + builder.DataSource = Address; + builder.InitialCatalog = Catalog; + builder.UserID = UserName; + builder.TrustServerCertificate = true; + builder.ConnectTimeout = 15; + builder.Pooling = false; + + builder.Authentication = SqlAuthenticationMethod.ActiveDirectoryInteractive; + + SqlConnection sqlConnection = new SqlConnection(builder.ConnectionString); + + return sqlConnection; + } + else + { + return new SqlConnection(String.Format("Server=tcp:{0},1433;Initial Catalog={1};Persist Security Info=False;User ID={2};Password={3};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Authentication=\"Active Directory Password\";", Address, Catalog, UserName, Password)); + } + + default: + + return null; + } + } + } +} |
