using System.Data.Odbc; using System.Data.OleDb; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace EntityFrameworkCore.Jet.Data.Tests { [TestClass] public class ConnectionStringTest { [DataTestMethod] [DataRow(DataAccessProviderType.Odbc)] [DataRow(DataAccessProviderType.OleDb)] public void Escape_double_quoted_connection_string(DataAccessProviderType providerType) { var expectedDatabaseName = "Joe's \"Recipes\" Database.accdb"; var escapedDatabaseName = expectedDatabaseName.Replace("\"", "\"\""); var connectionString = providerType == DataAccessProviderType.Odbc ? $"DBQ=\"{escapedDatabaseName}\"" : $"Data Source=\"{escapedDatabaseName}\""; var csb = new JetConnectionStringBuilder(providerType) { ConnectionString = connectionString }; Assert.AreEqual(expectedDatabaseName, csb.DataSource); } [DataTestMethod] [DataRow(DataAccessProviderType.Odbc)] [DataRow(DataAccessProviderType.OleDb)] public void Escape_single_quoted_connection_string(DataAccessProviderType providerType) { var expectedDatabaseName = "Joe's \"Recipes\" Database.accdb"; var escapedDatabaseName = expectedDatabaseName.Replace("'", "''"); var connectionString = providerType == DataAccessProviderType.Odbc ? $"DBQ='{escapedDatabaseName}'" : $"Data Source='{escapedDatabaseName}'"; var csb = new JetConnectionStringBuilder(providerType) { ConnectionString = connectionString }; Assert.AreEqual(expectedDatabaseName, csb.DataSource); } [TestMethod] public void Odbc_read_connection_string_with_all_properties() { const string connectionString = @"driver={Microsoft Access Driver (*.mdb, *.accdb)};dbq=ConnectionStringTest.accdb;uid=Admin;pwd=hunter2;systemdb=SysDb"; var csb = new JetConnectionStringBuilder(DataAccessProviderType.Odbc) { ConnectionString = connectionString }; Assert.AreEqual(csb.Provider, @"Microsoft Access Driver (*.mdb, *.accdb)"); Assert.AreEqual(csb.DataSource, @"ConnectionStringTest.accdb"); Assert.AreEqual(csb.UserId, "Admin"); Assert.AreEqual(csb.Password, "hunter2"); Assert.AreEqual(csb.SystemDatabase, "SysDb"); Assert.IsNull(csb.DatabasePassword); } [TestMethod] public void Odbc_connection_string_with_all_properties() { var csb = new JetConnectionStringBuilder(DataAccessProviderType.Odbc) { Provider = "Microsoft Access Driver (*.mdb, *.accdb)", DataSource = @"ConnectionStringTest.accdb", UserId = "Admin", Password = "hunter2", SystemDatabase = "SysDb", DatabasePassword = "DbPwd", }; Assert.AreEqual(@"driver=""{Microsoft Access Driver (*.mdb, *.accdb)}"";dbq=ConnectionStringTest.accdb;uid=Admin;pwd=DbPwd;systemdb=SysDb", csb.ConnectionString); } [TestMethod] public void Odbc_connection_string_with_all_properties_from_factory() { var csb = new JetConnection(OdbcFactory.Instance).JetFactory.CreateConnectionStringBuilder() as JetConnectionStringBuilder; Assert.IsNotNull(csb); csb.Provider = "Microsoft Access Driver (*.mdb, *.accdb)"; csb.DataSource = @"ConnectionStringTest.accdb"; csb.UserId = "Admin"; csb.Password = "hunter2"; csb.SystemDatabase = "SysDb"; csb.DatabasePassword = "DbPwd"; Assert.AreEqual(@"driver=""{Microsoft Access Driver (*.mdb, *.accdb)}"";dbq=ConnectionStringTest.accdb;uid=Admin;pwd=DbPwd;systemdb=SysDb", csb.ConnectionString); } [TestMethod] public void OleDb_read_connection_string_with_all_properties() { const string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=ConnectionStringTest.accdb;User ID=Admin;Password=hunter2;Jet OLEDB:System Database=SysDb;Jet OLEDB:Database Password=DbPwd"; var csb = new JetConnectionStringBuilder(DataAccessProviderType.OleDb) { ConnectionString = connectionString }; Assert.AreEqual(csb.Provider, "Microsoft.ACE.OLEDB.12.0"); Assert.AreEqual(csb.DataSource, @"ConnectionStringTest.accdb"); Assert.AreEqual(csb.UserId, "Admin"); Assert.AreEqual(csb.Password, "hunter2"); Assert.AreEqual(csb.SystemDatabase, "SysDb"); Assert.AreEqual(csb.DatabasePassword, "DbPwd"); } [TestMethod] public void OleDb_connection_string_with_all_properties() { var csb = new JetConnectionStringBuilder(DataAccessProviderType.OleDb) { Provider = "Microsoft.ACE.OLEDB.12.0", DataSource = @"ConnectionStringTest.accdb", UserId = "Admin", Password = "hunter2", SystemDatabase = "SysDb", DatabasePassword = "DbPwd", }; Assert.AreEqual(@"provider=Microsoft.ACE.OLEDB.12.0;data source=ConnectionStringTest.accdb;user id=Admin;password=hunter2;jet oledb:system database=SysDb;jet oledb:database password=DbPwd", csb.ConnectionString); } [TestMethod] public void OleDb_connection_string_with_all_properties_from_factory() { var csb = new JetConnection(OleDbFactory.Instance).JetFactory.CreateConnectionStringBuilder() as JetConnectionStringBuilder; Assert.IsNotNull(csb); csb.Provider = "Microsoft.ACE.OLEDB.12.0"; csb.DataSource = @"ConnectionStringTest.accdb"; csb.UserId = "Admin"; csb.Password = "hunter2"; csb.SystemDatabase = "SysDb"; csb.DatabasePassword = "DbPwd"; Assert.IsTrue( csb.ConnectionString is @"provider=Microsoft.ACE.OLEDB.12.0;data source=ConnectionStringTest.accdb;password=hunter2;user id=Admin;jet oledb:system database=SysDb;jet oledb:database password=DbPwd" or @"provider=Microsoft.ACE.OLEDB.12.0;data source=ConnectionStringTest.accdb;user id=Admin;password=hunter2;jet oledb:system database=SysDb;jet oledb:database password=DbPwd"); } } }