Browse Source

[System.Data] Integration tests (#4538)

Egor Bogatov 8 years ago
parent
commit
2115cd7394
34 changed files with 712 additions and 841 deletions
  1. 1 0
      mcs/class/System.Data/Makefile
  2. 26 0
      mcs/class/System.Data/System.Data_test.dll.sources
  3. 1 1
      mcs/class/System.Data/Test/ProviderTests/Common/ConnectionConfig.cs
  4. 157 45
      mcs/class/System.Data/Test/ProviderTests/Common/ConnectionManager.cs
  5. 1 6
      mcs/class/System.Data/Test/ProviderTests/Common/DBHelper.cs
  6. 2 2
      mcs/class/System.Data/Test/ProviderTests/Common/DataProvider.cs
  7. 2 2
      mcs/class/System.Data/Test/ProviderTests/Common/EngineConfig.cs
  8. 1 1
      mcs/class/System.Data/Test/ProviderTests/Common/EngineType.cs
  9. 1 1
      mcs/class/System.Data/Test/ProviderTests/Common/ProviderTestsConfigurationHandler.cs
  10. 15 21
      mcs/class/System.Data/Test/ProviderTests/ProviderIndependant/DataReaderTest.cs
  11. 5 11
      mcs/class/System.Data/Test/ProviderTests/ProviderIndependant/DbDataReaderTest.cs
  12. 8 13
      mcs/class/System.Data/Test/ProviderTests/ProviderIndependant/IDbCommandTest.cs
  13. 3 0
      mcs/class/System.Data/Test/ProviderTests/System.Data.Connected.Tests.dll.sources
  14. 46 45
      mcs/class/System.Data/Test/ProviderTests/System.Data.Odbc/OdbcCommandBuilderTest.cs
  15. 7 9
      mcs/class/System.Data/Test/ProviderTests/System.Data.Odbc/OdbcCommandTest.cs
  16. 10 9
      mcs/class/System.Data/Test/ProviderTests/System.Data.Odbc/OdbcDataAdapterTest.cs
  17. 31 35
      mcs/class/System.Data/Test/ProviderTests/System.Data.Odbc/OdbcDataReaderTest.cs
  18. 79 118
      mcs/class/System.Data/Test/ProviderTests/System.Data.Odbc/OdbcParameterCollectionTest.cs
  19. 70 118
      mcs/class/System.Data/Test/ProviderTests/System.Data.Odbc/OdbcParameterTest.cs
  20. 2 1
      mcs/class/System.Data/Test/ProviderTests/System.Data.SqlClient/SqlClientFactoryTest.cs
  21. 20 26
      mcs/class/System.Data/Test/ProviderTests/System.Data.SqlClient/SqlCommandBuilderTest.cs
  22. 46 75
      mcs/class/System.Data/Test/ProviderTests/System.Data.SqlClient/SqlCommandTest.cs
  23. 4 5
      mcs/class/System.Data/Test/ProviderTests/System.Data.SqlClient/SqlConnectionStringBuilderTest.cs
  24. 20 17
      mcs/class/System.Data/Test/ProviderTests/System.Data.SqlClient/SqlConnectionTest.cs
  25. 24 19
      mcs/class/System.Data/Test/ProviderTests/System.Data.SqlClient/SqlDataAdapterTest.cs
  26. 72 209
      mcs/class/System.Data/Test/ProviderTests/System.Data.SqlClient/SqlDataReaderTest.cs
  27. 2 4
      mcs/class/System.Data/Test/ProviderTests/System.Data.SqlClient/SqlParameterCollectionTest.cs
  28. 7 7
      mcs/class/System.Data/Test/ProviderTests/System.Data.SqlClient/SqlParameterTest.cs
  29. 4 4
      mcs/class/System.Data/Test/ProviderTests/System.Data.SqlClient/SqlTransactionTest.cs
  30. 1 1
      mcs/class/System.Data/Test/ProviderTests/app-net_1_1.config
  31. 1 1
      mcs/class/System.Data/Test/ProviderTests/app-net_2_0.config
  32. 2 10
      mcs/class/System.Data/Test/ProviderTests/sql/MySQL_5.sql
  33. 1 25
      mcs/class/System.Data/Test/ProviderTests/sql/sqlserver.sql
  34. 40 0
      mcs/class/System.Data/Test/test-config-file

+ 1 - 0
mcs/class/System.Data/Makefile

@@ -53,6 +53,7 @@ EXTRA_DISTFILES = \
 	$(wildcard Test/System.Data/schemas/*.xsd)		\
 	Test/test-config-file			\
 	Test/System.Data/binserialize/*.bin	\
+	Test/ProviderTests/sql/*.sql	\
 	SqliteTest.db	\
 	corefx.common.sources
 

+ 26 - 0
mcs/class/System.Data/System.Data_test.dll.sources

@@ -126,3 +126,29 @@ System.Data.SqlClient/SqlBulkCopyTest.cs
 Mono.Data.SqlExpressions/DataColumnExpressionTest.cs
 Mono.Data.SqlExpressions/DateComparisonTest.cs
 
+ProviderTests/Common/ConnectionConfig.cs
+ProviderTests/Common/ConnectionManager.cs
+ProviderTests/Common/DBHelper.cs
+ProviderTests/Common/DataProvider.cs
+ProviderTests/Common/EngineConfig.cs
+ProviderTests/Common/EngineType.cs
+ProviderTests/Common/ProviderTestsConfigurationHandler.cs
+ProviderTests/System.Data.Odbc/OdbcCommandBuilderTest.cs
+ProviderTests/System.Data.Odbc/OdbcCommandTest.cs
+ProviderTests/System.Data.Odbc/OdbcDataReaderTest.cs
+ProviderTests/System.Data.Odbc/OdbcDataAdapterTest.cs
+ProviderTests/System.Data.Odbc/OdbcParameterTest.cs
+ProviderTests/System.Data.Odbc/OdbcParameterCollectionTest.cs
+ProviderTests/ProviderIndependant/DataReaderTest.cs
+ProviderTests/ProviderIndependant/DbDataReaderTest.cs
+ProviderTests/ProviderIndependant/IDbCommandTest.cs
+ProviderTests/System.Data.SqlClient/SqlClientFactoryTest.cs
+ProviderTests/System.Data.SqlClient/SqlCommandBuilderTest.cs
+ProviderTests/System.Data.SqlClient/SqlCommandTest.cs
+ProviderTests/System.Data.SqlClient/SqlDataReaderTest.cs
+ProviderTests/System.Data.SqlClient/SqlDataAdapterTest.cs
+ProviderTests/System.Data.SqlClient/SqlTransactionTest.cs
+ProviderTests/System.Data.SqlClient/SqlConnectionStringBuilderTest.cs
+ProviderTests/System.Data.SqlClient/SqlConnectionTest.cs
+ProviderTests/System.Data.SqlClient/SqlParameterTest.cs
+ProviderTests/System.Data.SqlClient/SqlParameterCollectionTest.cs

+ 1 - 1
mcs/class/System.Data/Test/ProviderTests/Common/ConnectionConfig.cs

@@ -33,7 +33,7 @@ using System.Configuration;
 using System.Globalization;
 using System.Xml;
 
-namespace MonoTests.System.Data
+namespace MonoTests.System.Data.Connected
 {
 	internal sealed class ConnectionConfig
 	{

+ 157 - 45
mcs/class/System.Data/Test/ProviderTests/Common/ConnectionManager.cs

@@ -29,80 +29,192 @@
 // SOFTWARE.
 
 using System;
+using System.Collections.Generic;
 using System.Configuration;
 using System.Data;
 using System.Data.Common;
+using System.Data.Odbc;
+using System.Data.SqlClient;
+using System.IO;
+using System.Linq;
+using System.Text.RegularExpressions;
+using NUnit.Framework;
 
-
-namespace MonoTests.System.Data
+namespace MonoTests.System.Data.Connected
 {
 	public class ConnectionManager
 	{
-		private static ConnectionManager Instance;
-		private DbConnection _connection;
-		private string _connectionString;
-		private EngineConfig _engine;
+		private static ConnectionManager instance;
+		private ConnectionHolder<OdbcConnection> odbc;
+		private ConnectionHolder<SqlConnection> sql;
+
+		private const string OdbcEnvVar = "SYSTEM_DATA_ODBC";
+		private const string SqlEnvVar = "SYSTEM_DATA_MSSQL";
 
-		static ConnectionManager () 
+		private ConnectionManager ()
 		{
-			Instance = new ConnectionManager ();
+			//Environment.SetEnvironmentVariable(OdbcEnvVar, @"mysql-odbc|Driver={MySQL ODBC 5.3 Unicode Driver};server=127.0.0.1;uid=sa;pwd=qwerty123;");
+			//Environment.SetEnvironmentVariable(SqlEnvVar, @"sqlserver-tds|server=127.0.0.1;database=master;user id=sa;password=qwerty123");
+
+			// Generate a random db name
+			DatabaseName = "monotest" + Guid.NewGuid().ToString().Substring(0, 7);
+
+			sql = ConnectionHolder<SqlConnection>.FromEnvVar(SqlEnvVar);
+			if (sql != null)
+				CreateMssqlDatabase();
+			
+			odbc = ConnectionHolder<OdbcConnection>.FromEnvVar(OdbcEnvVar);
+			if (odbc != null)
+				CreateMysqlDatabase();
 		}
 
-		private ConnectionManager ()
+		private void CreateMssqlDatabase()
 		{
-			string connection_name = Environment.GetEnvironmentVariable ("PROVIDER_TESTS_CONNECTION");
-			if (connection_name == null || connection_name.Length == 0)
-				throw new ArgumentException ("PROVIDER_TESTS_CONNECTION environment variable is not set.");
-
-			ConnectionConfig [] connections = (ConnectionConfig [])
-				ConfigurationManager.GetSection ("providerTests");
-			foreach (ConnectionConfig connConfig in connections) {
-				if (connConfig.Name != connection_name)
-					continue;
+			DBHelper.ExecuteNonQuery(sql.Connection, $"CREATE DATABASE [{DatabaseName}]");
+			sql.Connection.ChangeDatabase(DatabaseName);
+
+			string query = File.ReadAllText(@"Test/ProviderTests/sql/sqlserver.sql");
+
+			var queries = SplitSqlStatements(query);
+			foreach (var subQuery in queries)
+			{
+				DBHelper.ExecuteNonQuery(sql.Connection, subQuery);
+			}
+		}
+
+		private void CreateMysqlDatabase()
+		{
+			DBHelper.ExecuteNonQuery(odbc.Connection, $"CREATE DATABASE {DatabaseName}");
+			odbc.Connection.ChangeDatabase(DatabaseName);
+			odbc.ConnectionString += $"database={DatabaseName}";
+
+			string query = File.ReadAllText("Test/ProviderTests/sql/MySQL_5.sql");
+
+			var groups = query.Replace("delimiter ", "")
+				.Split(new[] { "//\n" }, StringSplitOptions.RemoveEmptyEntries);
 
-				_connectionString = connConfig.ConnectionString;
-				DbProviderFactory factory = DbProviderFactories.GetFactory (
-					connConfig.Factory);
-				_connection = factory.CreateConnection ();
-				_connection.ConnectionString = _connectionString;
-				_connectionString = _connection.ConnectionString;
-				_engine = connConfig.Engine;
-				return;
+			foreach (var subQuery in groups[0].Split(new[] { ";" }, StringSplitOptions.RemoveEmptyEntries).Concat(groups.Skip(1)))
+			{
+				DBHelper.ExecuteNonQuery(odbc.Connection, subQuery);
 			}
+		}
+
+		private void DropMssqlDatabase()
+		{
+			sql.Connection.ChangeDatabase("master");
+			string query = $"ALTER DATABASE [{DatabaseName}] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;\nDROP DATABASE [{DatabaseName}]";
+			DBHelper.ExecuteNonQuery(sql.Connection, query);
+		}
+
+		private void DropMysqlDatabase()
+		{
+			string query = $"DROP DATABASE [{DatabaseName}]";
+			DBHelper.ExecuteNonQuery(odbc.Connection, query);
+		}
+
+		// Split SQL script by "GO" statements
+		private static IEnumerable<string> SplitSqlStatements(string sqlScript)
+		{
+			var statements = Regex.Split(sqlScript,
+					$@"^[\t ]*GO[\t ]*\d*[\t ]*(?:--.*)?$",
+					RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace | RegexOptions.IgnoreCase);
+			return statements.Where(x => !string.IsNullOrWhiteSpace(x)).Select(x => x.Trim(' ', '\r', '\n'));
+		}
+
+		public static ConnectionManager Instance => instance ?? (instance = new ConnectionManager());
+
+		public string DatabaseName { get; }
 
-			throw new ArgumentException ("Connection '" + connection_name + "' not found.");
+		public ConnectionHolder<OdbcConnection> Odbc
+		{
+			get
+			{
+				if (odbc == null)
+					Assert.Ignore($"{OdbcEnvVar} environment variable is not set");
+				return odbc;
+			}
 		}
 
-		public static ConnectionManager Singleton {
-			get {return Instance;}
+		public ConnectionHolder<SqlConnection> Sql
+		{
+			get
+			{
+				if (sql == null)
+					Assert.Ignore($"{SqlEnvVar} environment variable is not set");
+				return sql;
+			}
 		}
 
-		public
-		DbConnection
-		Connection {
-			get {return _connection;}
+		public void Close()
+		{
+			sql?.CloseConnection();
+			odbc?.CloseConnection();
 		}
+	}
+
+	public class ConnectionHolder<TConnection> where TConnection : DbConnection
+	{
+		private TConnection connection;
+
+		public EngineConfig EngineConfig { get; }
 
-		public string ConnectionString {
-			get {return _connectionString;}
+		public TConnection Connection
+		{
+			get
+			{
+				if (!(connection.State == ConnectionState.Closed || 
+					connection.State == ConnectionState.Broken))
+					connection.Close();
+				connection.ConnectionString = ConnectionString;
+				connection.Open();
+				return connection;
+			}
 		}
 
-		internal EngineConfig Engine {
-			get { return _engine; }
+		public void CloseConnection()
+		{
+			if (connection != null && connection.State != ConnectionState.Closed)
+				connection.Close();
 		}
 
-		public void OpenConnection ()
+		public string ConnectionString { get; set; }
+
+		public ConnectionHolder(EngineConfig engineConfig, DbProviderFactory dbProviderFactory, string connectionString)
 		{
-			if (!(_connection.State == ConnectionState.Closed || _connection.State == ConnectionState.Broken))
-				_connection.Close ();
-			_connection.ConnectionString = _connectionString;
-			_connection.Open ();
+			EngineConfig = engineConfig;
+			connection = (TConnection)dbProviderFactory.CreateConnection();
+			ConnectionString = connectionString;
 		}
 
-		public void CloseConnection ()
+		public static ConnectionHolder<TConnection> FromEnvVar(string envVarName)
 		{
-			if (_connection != null && _connection.State != ConnectionState.Closed)
-				_connection.Close ();
+			string variable = Environment.GetEnvironmentVariable(envVarName) ?? string.Empty;
+			var envParts = variable.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
+			if (envParts.Length == 0 || string.IsNullOrEmpty(envParts[0]))
+				return null;
+
+			string connectionName = envParts[0];
+			string connectionString = variable.Remove(0, envParts[0].Length + 1);
+
+			ConnectionConfig[] connections = null;
+			try
+			{
+				connections = (ConnectionConfig[]) ConfigurationManager.GetSection("providerTests");
+			}
+			catch
+			{
+				return null;
+			}
+
+			foreach (ConnectionConfig connConfig in connections)
+			{
+				if (connConfig.Name != connectionName)
+					continue;
+
+				DbProviderFactory factory = DbProviderFactories.GetFactory(connConfig.Factory);
+				return new ConnectionHolder<TConnection>(connConfig.Engine, factory, connectionString);
+			}
+			throw new InvalidOperationException($"Connection {connectionName} not found");
 		}
 	}
 }

+ 1 - 6
mcs/class/System.Data/Test/ProviderTests/Common/DBHelper.cs

@@ -29,14 +29,9 @@
 
 using System;
 using System.Data;
-using System.Data.Common;
 using System.Text;
 
-using Mono.Data;
-
-using NUnit.Framework;
-
-namespace MonoTests.System.Data
+namespace MonoTests.System.Data.Connected
 {
 	public sealed class DBHelper
 	{

+ 2 - 2
mcs/class/System.Data/Test/ProviderTests/Common/DataProvider.cs

@@ -30,7 +30,7 @@ using System;
 using System.Data;
 using System.Data.SqlClient;
 
-namespace MonoTests.System.Data
+namespace MonoTests.System.Data.Connected
 {
 	public class DataProvider
 	{
@@ -47,7 +47,7 @@ namespace MonoTests.System.Data
 			query += "Select * from datetime_family order by id ASC;";
 
 			SqlDataAdapter adapter = new SqlDataAdapter (query,
-				ConnectionManager.Singleton.ConnectionString);
+				ConnectionManager.Instance.Sql.ConnectionString);
 			adapter.TableMappings.Add ("Table", "numeric_family");
 			adapter.TableMappings.Add ("Table1", "string_family");
 			adapter.TableMappings.Add ("Table2", "binary_family");

+ 2 - 2
mcs/class/System.Data/Test/ProviderTests/Common/EngineConfig.cs

@@ -32,9 +32,9 @@ using System.Configuration;
 using System.Globalization;
 using System.Xml;
 
-namespace MonoTests.System.Data
+namespace MonoTests.System.Data.Connected
 {
-	internal sealed class EngineConfig
+	public sealed class EngineConfig
 	{
 		private string name;
 		private string quoteCharacter;

+ 1 - 1
mcs/class/System.Data/Test/ProviderTests/Common/EngineType.cs

@@ -26,7 +26,7 @@
 // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 // SOFTWARE.
 
-namespace MonoTests.System.Data
+namespace MonoTests.System.Data.Connected
 {
 	public enum EngineType
 	{

+ 1 - 1
mcs/class/System.Data/Test/ProviderTests/Common/ProviderTestsConfigurationHandler.cs

@@ -34,7 +34,7 @@ using System.Globalization;
 using System.Text;
 using System.Xml;
 
-namespace MonoTests.System.Data
+namespace MonoTests.System.Data.Connected
 {
 	class ProviderTestsConfigurationHandler : IConfigurationSectionHandler
 	{

+ 15 - 21
mcs/class/System.Data/Test/ProviderTests/ProviderIndependant/DataReaderTest.cs

@@ -37,12 +37,9 @@ using System.Data.SqlClient;
 using System.Data.SqlTypes;
 using System.Globalization;
 using System.Text;
-
-using Mono.Data;
-
 using NUnit.Framework;
 
-namespace MonoTests.System.Data
+namespace MonoTests.System.Data.Connected
 {
 	[TestFixture]
 	[Category ("odbc")]
@@ -88,17 +85,15 @@ namespace MonoTests.System.Data
 		[SetUp]
 		public void SetUp ()
 		{
-			conn = ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			conn = ConnectionManager.Instance.Sql.Connection;
 			cmd = conn.CreateCommand ();
 		}
 
 		[TearDown]
 		public void TearDown ()
 		{
-			if (cmd != null)
-				cmd.Dispose ();
-			ConnectionManager.Singleton.CloseConnection ();
+			cmd?.Dispose ();
+			ConnectionManager.Instance.Close();
 		}
 
 		[Test]
@@ -252,6 +247,7 @@ namespace MonoTests.System.Data
 		}
 
 		[Test]
+		[Category("NotWorking")]
 		public void GetChars_Reader_NoData ()
 		{
 			//Console.WriteLine ("GetChars_Reader_NoData - first_executereader");
@@ -261,9 +257,8 @@ namespace MonoTests.System.Data
 				try {
 					rdr.GetChars (-1, 0, (char []) null, 0, 0);
 					Assert.Fail ("#A1");
-				} catch (InvalidOperationException ex) {
+				} catch (IndexOutOfRangeException ex) {
 					// No data exists for the row/column
-					Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#A2");
 					Assert.IsNull (ex.InnerException, "#A3");
 					Assert.IsNotNull (ex.Message, "#A4");
 				}
@@ -273,9 +268,8 @@ namespace MonoTests.System.Data
 				try {
 					rdr.GetChars (-1, 0, (char []) null, 0, 0);
 					Assert.Fail ("#C1");
-				} catch (InvalidOperationException ex) {
+				} catch (IndexOutOfRangeException ex) {
 					// No data exists for the row/column
-					Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#C2");
 					Assert.IsNull (ex.InnerException, "#C3");
 					Assert.IsNotNull (ex.Message, "#C4");
 				}
@@ -291,7 +285,7 @@ namespace MonoTests.System.Data
 				cmd.CommandText = "SELECT * FROM employee WHERE lname='kumar'";
 				reader = cmd.ExecuteReader ();
 
-				switch (ConnectionManager.Singleton.Engine.Type) {
+				switch (ConnectionManager.Instance.Sql.EngineConfig.Type) {
 				case EngineType.SQLServer:
 					Assert.AreEqual ("int", reader.GetDataTypeName (0), "#1");
 					break;
@@ -1007,7 +1001,7 @@ namespace MonoTests.System.Data
 				cmd.CommandText = "select id, fname, id + 20 as plustwenty from employee";
 				reader = cmd.ExecuteReader (CommandBehavior.SchemaOnly | CommandBehavior.KeyInfo);
 				Assert.IsFalse (reader.IsClosed, "#1");
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Sql.CloseConnection ();
 				Assert.IsTrue (reader.IsClosed, "#2");
 			} finally {
 				if (reader != null)
@@ -2405,6 +2399,7 @@ namespace MonoTests.System.Data
 		}
 
 		[Test]
+		[Category("NotWorking")]
 		public void GetBytes_DataIndex_Overflow ()
 		{
 			cmd.CommandText = "SELECT type_blob FROM binary_family where id = 2";
@@ -2586,6 +2581,7 @@ namespace MonoTests.System.Data
 		}
 
 		[Test]
+		[Category("NotWorking")]
 		public void GetValues_Reader_Closed ()
 		{
 			//Console.WriteLine ("GetValues_Reader_Closed - first_executereader");
@@ -2598,9 +2594,8 @@ namespace MonoTests.System.Data
 				try {
 					rdr.GetValues ((object []) null);
 					Assert.Fail ("#1");
-				} catch (InvalidOperationException ex) {
+				} catch (ArgumentNullException ex) {
 					// No data exists for the row/column
-					Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#2");
 					Assert.IsNull (ex.InnerException, "#3");
 					Assert.IsNotNull (ex.Message, "#4");
 				}
@@ -2608,6 +2603,7 @@ namespace MonoTests.System.Data
 		}
 
 		[Test]
+		[Category("NotWorking")]
 		public void GetValues_Reader_NoData ()
 		{
 			//Console.WriteLine ("GetValues_Reader_NoData - first_executereader");			
@@ -2617,9 +2613,8 @@ namespace MonoTests.System.Data
 				try {
 					rdr.GetValues ((object []) null);
 					Assert.Fail ("#A1");
-				} catch (InvalidOperationException ex) {
+				} catch (ArgumentNullException ex) {
 					// No data exists for the row/column
-					Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#A2");
 					Assert.IsNull (ex.InnerException, "#A3");
 					Assert.IsNotNull (ex.Message, "#A4");
 				}
@@ -2629,9 +2624,8 @@ namespace MonoTests.System.Data
 				try {
 					rdr.GetValues ((object []) null);
 					Assert.Fail ("#C1");
-				} catch (InvalidOperationException ex) {
+				} catch (ArgumentNullException ex) {
 					// No data exists for the row/column
-					Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#C2");
 					Assert.IsNull (ex.InnerException, "#C3");
 					Assert.IsNotNull (ex.Message, "#C4");
 				}

+ 5 - 11
mcs/class/System.Data/Test/ProviderTests/ProviderIndependant/DbDataReaderTest.cs

@@ -34,12 +34,9 @@ using System.Data.Odbc;
 using System.Data.SqlClient;
 using System.Data.SqlTypes;
 using System.Globalization;
-
-using Mono.Data;
-
 using NUnit.Framework;
 
-namespace MonoTests.System.Data
+namespace MonoTests.System.Data.Connected
 {
 	[TestFixture]
 	[Category ("odbc")]
@@ -53,19 +50,16 @@ namespace MonoTests.System.Data
 		[SetUp]
 		public void SetUp ()
 		{
-			conn = ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			conn = ConnectionManager.Instance.Sql.Connection;
 			cmd = conn.CreateCommand ();
 		}
 
 		[TearDown]
 		public void TearDown ()
 		{
-			if (cmd != null)
-				cmd.Dispose ();
-			if (rdr != null)
-				rdr.Dispose ();
-			ConnectionManager.Singleton.CloseConnection ();
+			cmd?.Dispose ();
+			rdr?.Dispose ();
+			ConnectionManager.Instance.Close ();
 		}
 
 		[Test]

+ 8 - 13
mcs/class/System.Data/Test/ProviderTests/ProviderIndependant/IDbCommandTest.cs

@@ -31,12 +31,9 @@
 using System;
 using System.Data;
 using System.Data.Common;
-
-using Mono.Data;
-
 using NUnit.Framework;
 
-namespace MonoTests.System.Data
+namespace MonoTests.System.Data.Connected
 {
 	[TestFixture]
 	[Category ("odbc"), Category ("sqlserver")]
@@ -48,8 +45,7 @@ namespace MonoTests.System.Data
 		[SetUp]
 		public void SetUp ()
 		{
-			conn = ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			conn = ConnectionManager.Instance.Sql.Connection;
 			cmd = conn.CreateCommand ();
 		}
 
@@ -58,7 +54,7 @@ namespace MonoTests.System.Data
 		{
 			if (cmd != null)
 				cmd.Dispose ();
-			ConnectionManager.Singleton.CloseConnection ();
+			ConnectionManager.Instance.Close ();
 		}
 
 		[Test]
@@ -167,9 +163,8 @@ namespace MonoTests.System.Data
 				Assert.AreEqual (new byte [] { 0x32, 0x56, 0x00, 0x44, 0x22 }, val, "#A3");
 			}
 
-			ConnectionManager.Singleton.CloseConnection ();
-			conn = ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			ConnectionManager.Instance.Sql.CloseConnection ();
+			conn = ConnectionManager.Instance.Sql.Connection;
 
 			using (IDataReader reader = cmd.ExecuteReader (behavior)) {
 				Assert.IsTrue (reader.Read (), "#B1");
@@ -185,9 +180,9 @@ namespace MonoTests.System.Data
 				Assert.IsTrue (reader.Read (), "#C");
 			}
 
-			ConnectionManager.Singleton.CloseConnection ();
-			conn = ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			ConnectionManager.Instance.Sql.CloseConnection ();
+			conn = ConnectionManager.Instance.Sql.Connection;
+
 
 			using (IDataReader reader = cmd.ExecuteReader (behavior)) {
 				Assert.IsTrue (reader.Read (), "#D");

+ 3 - 0
mcs/class/System.Data/Test/ProviderTests/System.Data.Connected.Tests.dll.sources

@@ -14,10 +14,13 @@ System.Data.Odbc/OdbcParameterCollectionTest.cs
 ProviderIndependant/DataReaderTest.cs
 ProviderIndependant/DbDataReaderTest.cs
 ProviderIndependant/IDbCommandTest.cs
+System.Data.SqlClient/SqlClientFactoryTest.cs
 System.Data.SqlClient/SqlCommandBuilderTest.cs
 System.Data.SqlClient/SqlCommandTest.cs
 System.Data.SqlClient/SqlDataReaderTest.cs
 System.Data.SqlClient/SqlDataAdapterTest.cs
 System.Data.SqlClient/SqlTransactionTest.cs
+System.Data.SqlClient/SqlConnectionStringBuilderTest.cs
 System.Data.SqlClient/SqlConnectionTest.cs
 System.Data.SqlClient/SqlParameterTest.cs
+System.Data.SqlClient/SqlParameterCollectionTest.cs

+ 46 - 45
mcs/class/System.Data/Test/ProviderTests/System.Data.Odbc/OdbcCommandBuilderTest.cs

@@ -32,11 +32,10 @@ using System;
 using System.Data;
 using System.Data.Common;
 using System.Data.Odbc;
-using Mono.Data;
 
 using NUnit.Framework;
 
-namespace MonoTests.System.Data
+namespace MonoTests.System.Data.Connected.Odbc
 {
 	[TestFixture]
 	[Category ("odbc")]
@@ -45,7 +44,7 @@ namespace MonoTests.System.Data
 		[Test]
 		public void GetInsertCommandTest ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 			OdbcCommand cmd = null;
 
 			try {
@@ -94,17 +93,17 @@ namespace MonoTests.System.Data
 			} finally {
 				if (cmd != null)
 					cmd.Dispose ();
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
 		[Test]
 		public void GetInsertCommandTestWithExpression ()
 		{
-			if (ConnectionManager.Singleton.Engine.Type == EngineType.MySQL)
+			if (ConnectionManager.Instance.Odbc.EngineConfig.Type == EngineType.MySQL)
 				Assert.Ignore ("Schema info from MySQL is incomplete");
 
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 			OdbcCommand cmd = null;
 
 			try {
@@ -123,14 +122,14 @@ namespace MonoTests.System.Data
 			} finally {
 				if (cmd != null)
 					cmd.Dispose ();
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
 		[Test]
 		public void GetUpdateCommandTest ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 			OdbcCommand cmd = null;
 
 			try {
@@ -177,7 +176,7 @@ namespace MonoTests.System.Data
 			} finally {
 				if (cmd != null)
 					cmd.Dispose ();
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
@@ -185,7 +184,7 @@ namespace MonoTests.System.Data
 		[Ignore ("FIXME: Auto SQL generation during Update requires a valid SelectCommand")]
 		public void GetUpdateCommandDBConcurrencyExceptionTest ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 			try {
 				string selectQuery = "select id, lname from employee where id = 3";
 				OdbcDataAdapter da = new OdbcDataAdapter (selectQuery, conn);
@@ -214,14 +213,15 @@ namespace MonoTests.System.Data
 					Assert.AreEqual (1, ex.RowCount, "#6");
 				}
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
 		[Test]
+		[Category("NotWorking")]
 		public void GetInsertCommandTest_option_true ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 			try {
 				string selectQuery = "select id, lname from employee where id = 3";
 				OdbcDataAdapter da = new OdbcDataAdapter (selectQuery, conn);
@@ -236,14 +236,14 @@ namespace MonoTests.System.Data
 				Assert.AreSame (conn, cmd.Connection, "#2");
 				AssertInsertParameters (cmd, "#3:");
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
 		[Test]
 		public void GetInsertCommandTest_option_false ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 			try {
 				string selectQuery = "select id, lname from employee where id = 3";
 				OdbcDataAdapter da = new OdbcDataAdapter (selectQuery, conn);
@@ -258,14 +258,15 @@ namespace MonoTests.System.Data
 				Assert.AreSame (conn, cmd.Connection, "#2");
 				AssertInsertParameters (cmd, "#3:");
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
 		[Test]
+		[Category("NotWorking")]
 		public void GetUpdateCommandTest_option_true ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 			try {
 				string selectQuery = "select id, lname, id+1 as next_id from employee where id = 3";
 				OdbcDataAdapter da = new OdbcDataAdapter (selectQuery, conn);
@@ -280,14 +281,14 @@ namespace MonoTests.System.Data
 				Assert.AreSame (conn, cmd.Connection, "#2");
 				AssertUpdateParameters (cmd, "#3:");
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
 		[Test]
 		public void GetUpdateCommandTest_option_false ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 			try {
 				string selectQuery = "select id, lname, id+1 as next_id from employee where id = 3";
 				OdbcDataAdapter da = new OdbcDataAdapter (selectQuery, conn);
@@ -302,14 +303,15 @@ namespace MonoTests.System.Data
 				Assert.AreSame (conn, cmd.Connection, "#2");
 				AssertUpdateParameters (cmd, "#3:");
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
 		[Test]
+		[Category("NotWorking")]
 		public void GetDeleteCommandTest_option_true ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 			try {
 				string selectQuery = "select id, lname, id+1 as next_id from employee where id = 3";
 				OdbcDataAdapter da = new OdbcDataAdapter (selectQuery, conn);
@@ -324,14 +326,14 @@ namespace MonoTests.System.Data
 				Assert.AreSame (conn, cmd.Connection, "#2");
 				AssertDeleteParameters (cmd, "#3:");
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
 		[Test]
 		public void GetDeleteCommandTest_option_false ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 			try {
 				string selectQuery = "select id, lname, id+1 as next_id from employee where id = 3";
 				OdbcDataAdapter da = new OdbcDataAdapter (selectQuery, conn);
@@ -346,14 +348,14 @@ namespace MonoTests.System.Data
 				Assert.AreSame (conn, cmd.Connection, "#2");
 				AssertDeleteParameters (cmd, "#3:");
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
 		[Test]
 		public void GetDeleteCommandTest ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 			OdbcCommand cmd = null;
 
 			try {
@@ -401,7 +403,7 @@ namespace MonoTests.System.Data
 			} finally {
 				if (cmd != null)
 					cmd.Dispose ();
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
@@ -409,7 +411,7 @@ namespace MonoTests.System.Data
 		[Ignore ("QuoteSuffix and QuotePrefix are now in DbCommandBuilder, while commands are in implementation classes. Result: we cannot perform this check until we refactor this.")]
 		public void QuotePrefix_DeleteCommand_Generated ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			OdbcCommand cmd = null;
 
@@ -439,7 +441,7 @@ namespace MonoTests.System.Data
 			} finally {
 				if (cmd != null)
 					cmd.Dispose ();
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
@@ -447,7 +449,7 @@ namespace MonoTests.System.Data
 		[Ignore ("QuoteSuffix and QuotePrefix are now in DbCommandBuilder, while commands are in implementation classes. Result: we cannot perform this check until we refactor this.")]
 		public void QuotePrefix_InsertCommand_Generated ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			OdbcCommand cmd = null;
 
@@ -477,7 +479,7 @@ namespace MonoTests.System.Data
 			} finally {
 				if (cmd != null)
 					cmd.Dispose ();
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
@@ -485,7 +487,7 @@ namespace MonoTests.System.Data
 		[Ignore ("QuoteSuffix and QuotePrefix are now in DbCommandBuilder, while commands are in implementation classes. Result: we cannot perform this check until we refactor this.")]
 		public void QuotePrefix_UpdateCommand_Generated ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			OdbcCommand cmd = null;
 
@@ -515,7 +517,7 @@ namespace MonoTests.System.Data
 			} finally {
 				if (cmd != null)
 					cmd.Dispose ();
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
@@ -523,7 +525,7 @@ namespace MonoTests.System.Data
 		[Ignore ("QuoteSuffix and QuotePrefix are now in DbCommandBuilder, while commands are in implementation classes. Result: we cannot perform this check until we refactor this.")]
 		public void QuoteSuffix_DeleteCommand_Generated ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			OdbcCommand cmd = null;
 
@@ -553,7 +555,7 @@ namespace MonoTests.System.Data
 			} finally {
 				if (cmd != null)
 					cmd.Dispose ();
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
@@ -561,7 +563,7 @@ namespace MonoTests.System.Data
 		[Ignore ("QuoteSuffix and QuotePrefix are now in DbCommandBuilder, while commands are in implementation classes. Result: we cannot perform this check until we refactor this.")]
 		public void QuoteSuffix_InsertCommand_Generated ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			OdbcCommand cmd = null;
 
@@ -591,7 +593,7 @@ namespace MonoTests.System.Data
 			} finally {
 				if (cmd != null)
 					cmd.Dispose ();
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
@@ -599,7 +601,7 @@ namespace MonoTests.System.Data
 		[Ignore ("QuoteSuffix and QuotePrefix are now in DbCommandBuilder, while commands are in implementation classes. Result: we cannot perform this check until we refactor this.")]
 		public void QuoteSuffix_UpdateCommand_Generated ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			OdbcCommand cmd = null;
 
@@ -629,7 +631,7 @@ namespace MonoTests.System.Data
 			} finally {
 				if (cmd != null)
 					cmd.Dispose ();
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
@@ -637,10 +639,9 @@ namespace MonoTests.System.Data
 		public void QuoteIdentifier2 ()
 		{
 			OdbcCommandBuilder cb;
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
-			string quote_char = ConnectionManager.Singleton.Engine.QuoteCharacter;
+			string quote_char = ConnectionManager.Instance.Odbc.EngineConfig.QuoteCharacter;
 
 			try {
 				cb = new OdbcCommandBuilder ();
@@ -708,7 +709,7 @@ namespace MonoTests.System.Data
 				Assert.AreEqual (" ", cb.QuoteIdentifier (" ", conn), "#E11");
 				Assert.AreEqual ("\r", cb.QuoteIdentifier ("\r", conn), "#E12");
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
@@ -719,7 +720,7 @@ namespace MonoTests.System.Data
 			Assert.AreEqual ("p1", cmd.Parameters [0].ParameterName, prefix + "ParameterName (0)");
 			Assert.AreEqual ("id", cmd.Parameters [0].SourceColumn, prefix + "SourceColumn (0)");
 			Assert.IsNull (cmd.Parameters [0].Value, prefix + "Value (0)");
-			Assert.AreEqual (DbType.AnsiString, cmd.Parameters [1].DbType, prefix + "DbType (1)");
+			Assert.AreEqual (DbType.String, cmd.Parameters [1].DbType, prefix + "DbType (1)");
 			Assert.AreEqual ("p2", cmd.Parameters [1].ParameterName, prefix + "ParameterName (1)");
 			Assert.AreEqual ("lname", cmd.Parameters [1].SourceColumn, prefix + "SourceColumn (1)");
 			Assert.IsNull (cmd.Parameters [1].Value, prefix + "Value (1)");
@@ -732,7 +733,7 @@ namespace MonoTests.System.Data
 			Assert.AreEqual ("p1", cmd.Parameters [0].ParameterName, prefix + "ParameterName (0)");
 			Assert.AreEqual ("id", cmd.Parameters [0].SourceColumn, prefix + "SourceColumn (0)");
 			Assert.IsNull (cmd.Parameters [0].Value, prefix + "Value (0)");
-			Assert.AreEqual (DbType.AnsiString, cmd.Parameters [1].DbType, prefix + "DbType (1)");
+			Assert.AreEqual (DbType.String, cmd.Parameters [1].DbType, prefix + "DbType (1)");
 			Assert.AreEqual ("p2", cmd.Parameters [1].ParameterName, prefix + "ParameterName (1)");
 			Assert.AreEqual ("lname", cmd.Parameters [1].SourceColumn, prefix + "SourceColumn (1)");
 			Assert.IsNull (cmd.Parameters [1].Value, prefix + "Value (1)");
@@ -744,7 +745,7 @@ namespace MonoTests.System.Data
 			Assert.AreEqual ("p4", cmd.Parameters [3].ParameterName, prefix + "ParameterName (3)");
 			Assert.AreEqual ("lname", cmd.Parameters [3].SourceColumn, prefix + "SourceColumn (3)");
 			Assert.AreEqual (1, cmd.Parameters [3].Value, prefix + "Value (3)");
-			Assert.AreEqual (DbType.AnsiString, cmd.Parameters [4].DbType, prefix + "DbType (4)");
+			Assert.AreEqual (DbType.String, cmd.Parameters [4].DbType, prefix + "DbType (4)");
 			Assert.AreEqual ("p5", cmd.Parameters [4].ParameterName, prefix + "ParameterName (4)");
 			Assert.AreEqual ("lname", cmd.Parameters [4].SourceColumn, prefix + "SourceColumn (4)");
 			Assert.IsNull (cmd.Parameters [4].Value, prefix + "Value (4)");
@@ -761,7 +762,7 @@ namespace MonoTests.System.Data
 			Assert.AreEqual ("p2", cmd.Parameters [1].ParameterName, prefix + "ParameterName (1)");
 			Assert.AreEqual ("lname", cmd.Parameters [1].SourceColumn, prefix + "SourceColumn (1)");
 			Assert.AreEqual (1, cmd.Parameters [1].Value, prefix + "Value (1)");
-			Assert.AreEqual (DbType.AnsiString, cmd.Parameters [2].DbType, prefix + "DbType (2)");
+			Assert.AreEqual (DbType.String, cmd.Parameters [2].DbType, prefix + "DbType (2)");
 			Assert.AreEqual ("p3", cmd.Parameters [2].ParameterName, prefix + "ParameterName (2)");
 			Assert.AreEqual ("lname", cmd.Parameters [2].SourceColumn, prefix + "SourceColumn (2)");
 			Assert.IsNull (cmd.Parameters [2].Value, prefix + "Value (2)");

+ 7 - 9
mcs/class/System.Data/Test/ProviderTests/System.Data.Odbc/OdbcCommandTest.cs

@@ -32,11 +32,10 @@ using System;
 using System.Data;
 using System.Data.Common;
 using System.Data.Odbc;
-using Mono.Data;
-
 using NUnit.Framework;
 
-namespace MonoTests.System.Data
+
+namespace MonoTests.System.Data.Connected.Odbc
 {
 	[TestFixture]
 	[Category ("odbc")]
@@ -48,8 +47,7 @@ namespace MonoTests.System.Data
 		[SetUp]
 		public void SetUp ()
 		{
-			conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			conn = ConnectionManager.Instance.Odbc.Connection;
 			cmd = conn.CreateCommand ();
 		}
 
@@ -58,7 +56,7 @@ namespace MonoTests.System.Data
 		{
 			if (cmd != null)
 				cmd.Dispose ();
-			ConnectionManager.Singleton.CloseConnection ();
+			ConnectionManager.Instance.Close ();
 		}
 
 		[Test]
@@ -150,7 +148,7 @@ namespace MonoTests.System.Data
 			cmd.CommandText = "select count(*) from employee where id <= ?;";
 			cmd.Parameters.Add ("@un", OdbcType.Int).Value = 3;
 			ret = cmd.ExecuteNonQuery ();
-			switch (ConnectionManager.Singleton.Engine.Type) {
+			switch (ConnectionManager.Instance.Odbc.EngineConfig.Type) {
 			case EngineType.SQLServer:
 				Assert.AreEqual (-1, ret, "#1");
 				break;
@@ -167,7 +165,7 @@ namespace MonoTests.System.Data
 			cmd.CommandText = "select * from employee where id <= ?;";
 			cmd.Parameters.Add ("@un", OdbcType.Int).Value = 3;
 			ret = cmd.ExecuteNonQuery ();
-			switch (ConnectionManager.Singleton.Engine.Type) {
+			switch (ConnectionManager.Instance.Odbc.EngineConfig.Type) {
 			case EngineType.SQLServer:
 				Assert.AreEqual (-1, ret, "#2");
 				break;
@@ -183,7 +181,7 @@ namespace MonoTests.System.Data
 			cmd.CommandType = CommandType.Text;
 			cmd.CommandText = "select * from employee where id <= 3;";
 			ret = cmd.ExecuteNonQuery ();
-			switch (ConnectionManager.Singleton.Engine.Type) {
+			switch (ConnectionManager.Instance.Odbc.EngineConfig.Type) {
 			case EngineType.SQLServer:
 				Assert.AreEqual (-1, ret, "#3");
 				break;

+ 10 - 9
mcs/class/System.Data/Test/ProviderTests/System.Data.Odbc/OdbcDataAdapterTest.cs

@@ -32,7 +32,7 @@ using System.Data.Odbc;
 
 using NUnit.Framework;
 
-namespace MonoTests.System.Data.Odbc
+namespace MonoTests.System.Data.Connected.Odbc
 {
 	[TestFixture]
 	[Category ("odbc")]
@@ -41,9 +41,9 @@ namespace MonoTests.System.Data.Odbc
 		[Test]
 		public void FillTest ()
 		{
-			IDbConnection conn = ConnectionManager.Singleton.Connection;
-			try {
-				ConnectionManager.Singleton.OpenConnection ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
+			try
+			{
 				// For this Test, you must create sample table
 				// called person-age, with a non-zero number of rows
 				// and non-zero number of columns
@@ -70,16 +70,17 @@ namespace MonoTests.System.Data.Odbc
 								 "#4 column values must not be of size 0");
 				}
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
 		[Test]
+		[Ignore]
 		public void InsertUtf8Test ()
 		{
-			IDbConnection conn = ConnectionManager.Singleton.Connection;
-			try {
-				ConnectionManager.Singleton.OpenConnection ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
+			try
+			{
 				DoExecuteNonQuery ((OdbcConnection) conn,
 						   "CREATE TABLE odbc_ins_utf8_test(ival int not null, sval varchar(20))");
 				Assert.AreEqual (DoExecuteNonQuery ((OdbcConnection) conn,
@@ -97,7 +98,7 @@ namespace MonoTests.System.Data.Odbc
 						 3);
 			} finally {
 				DoExecuteNonQuery ((OdbcConnection) conn, "DROP TABLE odbc_ins_utf8_test");
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 

+ 31 - 35
mcs/class/System.Data/Test/ProviderTests/System.Data.Odbc/OdbcDataReaderTest.cs

@@ -34,12 +34,10 @@ using System.Data.Common;
 using System.Data.Odbc;
 using System.Globalization;
 using System.Text;
-
-using Mono.Data;
-
 using NUnit.Framework;
 
-namespace MonoTests.System.Data
+
+namespace MonoTests.System.Data.Connected.Odbc
 {
 	[TestFixture]
 	[Category ("odbc")]
@@ -84,8 +82,7 @@ namespace MonoTests.System.Data
 		[SetUp]
 		public void SetUp ()
 		{
-			conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			conn = ConnectionManager.Instance.Odbc.Connection;
 			cmd = conn.CreateCommand ();
 		}
 
@@ -94,7 +91,7 @@ namespace MonoTests.System.Data
 		{
 			if (cmd != null)
 				cmd.Dispose ();
-			ConnectionManager.Singleton.CloseConnection ();
+			ConnectionManager.Instance.Close ();
 		}
 
 		[Test]
@@ -198,7 +195,7 @@ namespace MonoTests.System.Data
 				Assert.AreEqual (totalsize, ret, "#C1");
 			}
 
-			ConnectionManager.Singleton.CloseConnection ();
+			ConnectionManager.Instance.Odbc.CloseConnection ();
 		}
 
 		[Test]
@@ -323,7 +320,7 @@ namespace MonoTests.System.Data
 				Assert.IsTrue (pkRow.IsNull ("BaseSchemaName"), "#A:BaseSchemaName_IsNull");
 				Assert.AreEqual (DBNull.Value, pkRow ["BaseSchemaName"], "#A:BaseSchemaName_Value");
 				Assert.IsFalse (pkRow.IsNull ("BaseCatalogName"), "#A:BaseCatalogName_IsNull");
-				Assert.AreEqual ("monotest", pkRow ["BaseCatalogName"], "#A:BaseCatalogName_Value");
+				Assert.AreEqual (ConnectionManager.Instance.DatabaseName, pkRow ["BaseCatalogName"], "#A:BaseCatalogName_Value");
 				Assert.IsFalse (pkRow.IsNull ("BaseTableName"), "#A:BaseTableName_IsNull");
 				Assert.AreEqual ("employee", pkRow ["BaseTableName"], "#A:BaseTableName_Value");
 				Assert.IsFalse (pkRow.IsNull ("BaseColumnName"), "#A:BaseColumnName_IsNull");
@@ -411,7 +408,7 @@ namespace MonoTests.System.Data
 				Assert.IsTrue (pkRow.IsNull ("BaseSchemaName"), "#C:BaseSchemaName_IsNull");
 				Assert.AreEqual (DBNull.Value, pkRow ["BaseSchemaName"], "#C:BaseSchemaName_Value");
 				Assert.IsFalse (pkRow.IsNull ("BaseCatalogName"), "#C:BaseCatalogName_IsNull");
-				Assert.AreEqual ("monotest", pkRow ["BaseCatalogName"], "#C:BaseCatalogName_Value");
+				Assert.AreEqual (ConnectionManager.Instance.DatabaseName, pkRow ["BaseCatalogName"], "#C:BaseCatalogName_Value");
 				Assert.IsFalse (pkRow.IsNull ("BaseTableName"), "#C:BaseTableName_IsNull");
 				Assert.AreEqual ("employee", pkRow ["BaseTableName"], "#C:BaseTableName_Value");
 				Assert.IsFalse (pkRow.IsNull ("BaseColumnName"), "#C:BaseColumnName_IsNull");
@@ -502,7 +499,7 @@ namespace MonoTests.System.Data
 				Assert.IsTrue (pkRow.IsNull ("BaseSchemaName"), "#E:BaseSchemaName_IsNull");
 				Assert.AreEqual (DBNull.Value, pkRow ["BaseSchemaName"], "#E:BaseSchemaName_Value");
 				Assert.IsFalse (pkRow.IsNull ("BaseCatalogName"), "#E:BaseCatalogName_IsNull");
-				Assert.AreEqual ("monotest", pkRow ["BaseCatalogName"], "#E:BaseCatalogName_Value");
+				Assert.AreEqual (ConnectionManager.Instance.DatabaseName, pkRow ["BaseCatalogName"], "#E:BaseCatalogName_Value");
 				Assert.IsFalse (pkRow.IsNull ("BaseTableName"), "#E:BaseTableName_IsNull");
 				Assert.AreEqual ("employee", pkRow ["BaseTableName"], "#E:BaseTableName_Value");
 				Assert.IsFalse (pkRow.IsNull ("BaseColumnName"), "#E:BaseColumnName_IsNull");
@@ -590,7 +587,7 @@ namespace MonoTests.System.Data
 				Assert.IsTrue (pkRow.IsNull ("BaseSchemaName"), "#G:BaseSchemaName_IsNull");
 				Assert.AreEqual (DBNull.Value, pkRow ["BaseSchemaName"], "#G:BaseSchemaName_Value");
 				Assert.IsFalse (pkRow.IsNull ("BaseCatalogName"), "#G:BaseCatalogName_IsNull");
-				Assert.AreEqual ("monotest", pkRow ["BaseCatalogName"], "#G:BaseCatalogName_Value");
+				Assert.AreEqual (ConnectionManager.Instance.DatabaseName, pkRow ["BaseCatalogName"], "#G:BaseCatalogName_Value");
 				Assert.IsFalse (pkRow.IsNull ("BaseTableName"), "#G:BaseTableName_IsNull");
 				Assert.AreEqual ("employee", pkRow ["BaseTableName"], "#G:BaseTableName_Value");
 				Assert.IsFalse (pkRow.IsNull ("BaseColumnName"), "#G:BaseColumnName_IsNull");
@@ -683,7 +680,7 @@ namespace MonoTests.System.Data
 				Assert.IsTrue (pkRow.IsNull ("BaseSchemaName"), "#I:BaseSchemaName_IsNull");
 				Assert.AreEqual (DBNull.Value, pkRow ["BaseSchemaName"], "#I:BaseSchemaName_Value");
 				Assert.IsFalse (pkRow.IsNull ("BaseCatalogName"), "#I:BaseCatalogName_IsNull");
-				Assert.AreEqual ("monotest", pkRow ["BaseCatalogName"], "#I:BaseCatalogName_Value");
+				Assert.AreEqual (ConnectionManager.Instance.DatabaseName, pkRow ["BaseCatalogName"], "#I:BaseCatalogName_Value");
 				Assert.IsFalse (pkRow.IsNull ("BaseTableName"), "#I:BaseTableName_IsNull");
 				Assert.AreEqual ("employee", pkRow ["BaseTableName"], "#I:BaseTableName_Value");
 				Assert.IsFalse (pkRow.IsNull ("BaseColumnName"), "#I:BaseColumnName_IsNull");
@@ -771,7 +768,7 @@ namespace MonoTests.System.Data
 				Assert.IsTrue (pkRow.IsNull ("BaseSchemaName"), "#K:BaseSchemaName_IsNull");
 				Assert.AreEqual (DBNull.Value, pkRow ["BaseSchemaName"], "#K:BaseSchemaName_Value");
 				Assert.IsFalse (pkRow.IsNull ("BaseCatalogName"), "#K:BaseCatalogName_IsNull");
-				Assert.AreEqual ("monotest", pkRow ["BaseCatalogName"], "#K:BaseCatalogName_Value");
+				Assert.AreEqual (ConnectionManager.Instance.DatabaseName, pkRow ["BaseCatalogName"], "#K:BaseCatalogName_Value");
 				Assert.IsFalse (pkRow.IsNull ("BaseTableName"), "#K:BaseTableName_IsNull");
 				Assert.AreEqual ("employee", pkRow ["BaseTableName"], "#K:BaseTableName_Value");
 				Assert.IsFalse (pkRow.IsNull ("BaseColumnName"), "#K:BaseColumnName_IsNull");
@@ -832,7 +829,7 @@ namespace MonoTests.System.Data
 			// MySQL currently does not support output parameters
 			// in its ODBC connector:
 			// http://www.paragon-cs.com/mag/issue3.pdf
-			if (ConnectionManager.Singleton.Engine.Type != EngineType.SQLServer)
+			if (ConnectionManager.Instance.Odbc.EngineConfig.Type != EngineType.SQLServer)
 				Assert.Ignore ("MySQL does not (yet) support output parameters using ODBC.");
 
 			IDataReader reader = null;
@@ -923,7 +920,7 @@ namespace MonoTests.System.Data
 		[Test]
 		public void FindZeroInToStringTest ()
 		{
-			if (ConnectionManager.Singleton.Engine.Type != EngineType.MySQL)
+			if (ConnectionManager.Instance.Odbc.EngineConfig.Type != EngineType.MySQL)
 				Assert.Ignore ("Only applies to MySQL.");
 
 			IDataReader reader = null;
@@ -999,7 +996,7 @@ namespace MonoTests.System.Data
 		[Test]
 		public void Bug332404Test ()
 		{
-			if (ConnectionManager.Singleton.Engine.Type != EngineType.MySQL)
+			if (ConnectionManager.Instance.Odbc.EngineConfig.Type != EngineType.MySQL)
 				Assert.Ignore ("Only applies to MySQL.");
 
 			cmd = new OdbcCommand ("DROP TABLE IF EXISTS odbc_test");
@@ -1026,7 +1023,7 @@ namespace MonoTests.System.Data
 		[Test]
 		public void Bug332400Test ()
 		{
-			if (ConnectionManager.Singleton.Engine.Type != EngineType.MySQL)
+			if (ConnectionManager.Instance.Odbc.EngineConfig.Type != EngineType.MySQL)
 				Assert.Ignore ("Only applies to MySQL.");
 
 			cmd = new OdbcCommand ("DROP TABLE IF EXISTS blob_test");
@@ -1051,37 +1048,36 @@ namespace MonoTests.System.Data
 		[Test]
 		public void Bug419224Test () 
 		{
-			cmd = new OdbcCommand ("DROP TABLE IF EXISTS bug419224test");
+			cmd = new OdbcCommand ("DROP TABLE IF EXISTS odbc_test");
 			cmd.Connection = conn;
 			cmd.ExecuteNonQuery ();
 
-			cmd = new OdbcCommand ("CREATE TABLE bug419224test (id_test INTEGER NOT NULL, payload TINYBLOB NOT NULL)");
+			cmd = new OdbcCommand ("CREATE TABLE odbc_test (id_test INTEGER NOT NULL, payload TINYBLOB NOT NULL)");
 			cmd.Connection = conn;
 			cmd.ExecuteNonQuery ();
 
-			cmd = new OdbcCommand ("INSERT INTO odbc_test (id_test, payload) VALUES (1, 'test for bug419224)");
+			cmd = new OdbcCommand ("INSERT INTO odbc_test (id_test, payload) VALUES (1, 'test for bug419224')");
 			cmd.Connection = conn;
 			cmd.ExecuteNonQuery ();
 
-			OdbcDataAdapter Adaptador = new OdbcDataAdapter ();
-
-			DataSet Lector = new DataSet ();
-
-			Adaptador.SelectCommand = new OdbcCommand ("SELECT * FROM odbc_test WHERE id_test=1", (OdbcConnection) conn);
-			Adaptador.Fill (Lector);
-			Assert.AreEqual (Lector.Tables[0].Rows[0]["payload"], 1.2346);
+			OdbcDataAdapter adaptador = new OdbcDataAdapter ();
+			DataSet lector = new DataSet ();
 
+			adaptador.SelectCommand = new OdbcCommand ("SELECT * FROM odbc_test WHERE id_test=1", (OdbcConnection) conn);
+			adaptador.Fill (lector);
+			var payload = (byte[])lector.Tables[0].Rows[0]["payload"];
+			Assert.AreEqual ("test for bug419224", Encoding.UTF8.GetString(payload));
 
-  			OdbcDataReader NewRdr = cmd.ExecuteReader();
+			OdbcDataReader newRdr = cmd.ExecuteReader();
 
-  			// tinyblob column index:
-  			int TinyblobIdx = 1;
+			// tinyblob column index:
+			int TinyblobIdx = 1;
 
-  			bool read = NewRdr.Read();
+			bool read = newRdr.Read();
 
-  			if (read)
-  			{
-    				bool ret = NewRdr.IsDBNull(TinyblobIdx); 
+			if (read)
+			{
+					bool ret = newRdr.IsDBNull(TinyblobIdx); 
 				Assert.AreEqual (ret, false);
 			}
 		}

+ 79 - 118
mcs/class/System.Data/Test/ProviderTests/System.Data.Odbc/OdbcParameterCollectionTest.cs

@@ -35,7 +35,7 @@ using System.Data.Odbc;
 
 using NUnit.Framework;
 
-namespace MonoTests.System.Data.Odbc
+namespace MonoTests.System.Data.Connected.Odbc
 {
 	[TestFixture]
 	[Category ("odbc")]
@@ -48,8 +48,7 @@ namespace MonoTests.System.Data.Odbc
 		[Test]
 		public void ParameterLengthTrimTest ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			try {
 				OdbcCommand cmd = conn.CreateCommand ();
@@ -61,15 +60,14 @@ namespace MonoTests.System.Data.Odbc
 				Assert.AreEqual (15, param.Size, "#1");
 				Assert.AreEqual (0, cmd.ExecuteScalar(), "#2");
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
 		[Test]
 		public void InsertTest ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			try {
 				OdbcCommand OdbcCmd = conn.CreateCommand ();
@@ -105,7 +103,7 @@ namespace MonoTests.System.Data.Odbc
 				Assert.AreEqual (OdbcType.NVarChar,OdbcCmd.Parameters[1].OdbcType, "#13 Parameters with null value must be of type NVarChar");
 				Assert.AreEqual (OdbcType.Text,OdbcCmd.Parameters[0].OdbcType, "#14 Parameter at index 0 is of type Text");
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
@@ -116,8 +114,7 @@ namespace MonoTests.System.Data.Odbc
 		[Test]
 		public void InsertNoOverwriteTest ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			try {
 				OdbcCommand OdbcCmd = conn.CreateCommand ();
@@ -144,15 +141,14 @@ namespace MonoTests.System.Data.Odbc
 				Assert.AreEqual ("Parameter1", OdbcCmd.Parameters[1].ParameterName, "#8 Parameters inserted without any name must get a default name");
 				Assert.AreEqual (null, OdbcCmd.Parameters[1].Value, "#9 Parameters inserted without any value must have null value");
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
 		[Test]
 		public void InsertNullTest ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			try {
 				OdbcCommand OdbcCmd = conn.CreateCommand ();
@@ -169,15 +165,14 @@ namespace MonoTests.System.Data.Odbc
 					Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 The collection must contain only one parameter after Insert failed");
 				}
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
 		[Test]
 		public void InsertEmptyTest ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			try {
 				OdbcCommand OdbcCmd = conn.CreateCommand ();
@@ -195,15 +190,14 @@ namespace MonoTests.System.Data.Odbc
 				}
 					
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
 		[Test]
 		public void InsertAlreadyContainedParameterTest ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			try {
 				OdbcCommand OdbcCmd = conn.CreateCommand ();
@@ -223,15 +217,14 @@ namespace MonoTests.System.Data.Odbc
 					Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#3 The collection must contain 2 parameters after Insert failed");
 				}
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
 		[Test]
 		public void InsertArgumentGreaterThanCountTest ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			try {
 				OdbcCommand OdbcCmd = conn.CreateCommand ();
@@ -248,15 +241,14 @@ namespace MonoTests.System.Data.Odbc
 					Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 The collection must contain only 1 parameter after Insert failed");
 				}
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
 		[Test]
 		public void InsertNegativeArgumentTest ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			try {
 				OdbcCommand OdbcCmd = conn.CreateCommand ();
@@ -273,15 +265,14 @@ namespace MonoTests.System.Data.Odbc
 					Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 The collection must contain only 1 parameter after Insert failed");
 				}
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
 		[Test]
 		public void InsertNonOdbcParameterTest ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			try {
 				OdbcCommand OdbcCmd = conn.CreateCommand ();
@@ -298,7 +289,7 @@ namespace MonoTests.System.Data.Odbc
 					Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 The collection must contain only 1 parameter after Insert failed");
 				}
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
@@ -306,8 +297,7 @@ namespace MonoTests.System.Data.Odbc
 		[Test]
 		public void AddRangeTest ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			try {
 				OdbcCommand OdbcCmd = conn.CreateCommand ();
@@ -332,7 +322,7 @@ namespace MonoTests.System.Data.Odbc
 				Assert.AreEqual ("Parameter1", OdbcCmd.Parameters[1].ParameterName, "#5 Parameters added without any name must get a default name");
 				Assert.AreEqual (OdbcType.NVarChar,OdbcCmd.Parameters[1].OdbcType, "#6 Parameters with null value must be of type NVarChar");
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
@@ -343,8 +333,7 @@ namespace MonoTests.System.Data.Odbc
 		[Test]
 		public void AddRangeParameterAlreadyContainedTest ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			try {
 				OdbcCommand OdbcCmd = conn.CreateCommand ();
@@ -366,7 +355,7 @@ namespace MonoTests.System.Data.Odbc
 					Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#2 The collection must contain excatly 2 elements after AddRange failed for the third element");
 				}
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
@@ -376,8 +365,7 @@ namespace MonoTests.System.Data.Odbc
 		[Test]
 		public void AddRangeArgumentNullExceptionTest ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			try {
 				OdbcCommand OdbcCmd = conn.CreateCommand ();
@@ -399,15 +387,14 @@ namespace MonoTests.System.Data.Odbc
 					Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 If any of the parameters in the range is null, none of them should be added");
 				}
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
 		[Test]
 		public void AddRangeParameterContainedInAnotherCollTest ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			try {
 				OdbcCommand OdbcCmd = conn.CreateCommand ();
@@ -436,15 +423,14 @@ namespace MonoTests.System.Data.Odbc
 					Assert.AreEqual (1, OdbcCmd2.Parameters.Count, "#4 All the elements before the invalid element must be added to the collection of OdbcCmd2");
 				}
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
 		[Test]
 		public void AddRangeMultiDimensionalArrayTest ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			try {
 				OdbcCommand OdbcCmd = conn.CreateCommand ();
@@ -468,15 +454,14 @@ namespace MonoTests.System.Data.Odbc
 				Assert.AreEqual (4, OdbcCmd.Parameters.IndexOf (p5Tmp), "#4 Not all elements are added");
 				Assert.AreEqual (OdbcType.NVarChar,OdbcCmd.Parameters[4].OdbcType, "#5 Parameters with null value must be of type NVarChar");
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
 		[Test]
 		public void AddRangeArrayValuesArgumentNullExceptionTest ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			try {
 				OdbcCommand OdbcCmd = conn.CreateCommand ();
@@ -500,7 +485,7 @@ namespace MonoTests.System.Data.Odbc
 					Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 None of the elememts must be added if any one of them is null");
 				}
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
@@ -510,8 +495,7 @@ namespace MonoTests.System.Data.Odbc
 		[Test]
 		public void ContainsTest ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			try {
 				OdbcCommand OdbcCmd = conn.CreateCommand ();
@@ -531,15 +515,14 @@ namespace MonoTests.System.Data.Odbc
 				Assert.IsFalse (OdbcCmd.Parameters.Contains ((Object)null), "#6 Contains must return false for empty string");
 				Assert.IsFalse (OdbcCmd.Parameters.Contains ((String)null), "#6 Contains must return false for empty string");
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
 		[Test]
 		public void ContainsNonOdbcParameterTest ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			try {
 				OdbcCommand OdbcCmd = conn.CreateCommand ();
@@ -555,15 +538,14 @@ namespace MonoTests.System.Data.Odbc
 					Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#3 The collection must contain only one parameter");
 				}
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
 		[Test]
 		public void ContainsCaseSensitivityTest ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			try {
 				OdbcCommand OdbcCmd = conn.CreateCommand ();
@@ -578,15 +560,14 @@ namespace MonoTests.System.Data.Odbc
 				Assert.AreEqual (true, OdbcCmd.Parameters.Contains ("@LNAME"), "#3 Case sensitivity failed for Contains, should be case insensitive");
 				Assert.AreEqual (true, OdbcCmd.Parameters.Contains ("@LnAmE"), "#4 Case sensitivity failed for Contains, should be case insensitive");
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
 		[Test]
 		public void ContainsNotMineTest ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			try {
 				OdbcCommand OdbcCmd1 = conn.CreateCommand ();
@@ -602,15 +583,14 @@ namespace MonoTests.System.Data.Odbc
 				Assert.IsTrue (OdbcCmd1.Parameters.Contains (p1));
 				Assert.IsFalse (OdbcCmd1.Parameters.Contains (p2));
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
 		[Test]
 		public void IndexOfTest ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			try {
 				OdbcCommand OdbcCmd = conn.CreateCommand ();
@@ -632,15 +612,14 @@ namespace MonoTests.System.Data.Odbc
 				Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf ((Object)p3Tmp), "#9 non-existing parameter passed as Object did not return index -1");
 				Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf ((Object)null), "#10 null parameter passed as Object should return index -1");
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
 		[Test]
 		public void IndexOfCaseSensitivityTest ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			try {
 				OdbcCommand OdbcCmd = conn.CreateCommand ();
@@ -655,15 +634,14 @@ namespace MonoTests.System.Data.Odbc
 				Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf ("@AGE"), "#4 Case sensitivity failed for IndexOf, should be case insensitive");
 				Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf ("@age"), "#5 Case sensitivity failed for IndexOf, should be case insensitive");
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
 		[Test]
 		public void IndexOfNonOdbcParameterTest ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			try {
 				OdbcCommand OdbcCmd = conn.CreateCommand ();
@@ -679,15 +657,14 @@ namespace MonoTests.System.Data.Odbc
 					Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#3 The collection must contain only one parameter");
 				}
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
 		[Test]
 		public void CopyToTest ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			try {
 				OdbcCommand OdbcCmd = conn.CreateCommand ();
@@ -707,15 +684,14 @@ namespace MonoTests.System.Data.Odbc
 				Assert.AreEqual (null, DestinationParamArray [0], "#5 The remaining elements must remain un-initialized");
 				Assert.AreEqual (null, DestinationParamArray [3], "#6 The remaining elements must remain un-initialized");
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
 		[Test]
 		public void CopyToArgumentExceptionTest ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			try {
 				OdbcCommand OdbcCmd = conn.CreateCommand ();
@@ -736,15 +712,14 @@ namespace MonoTests.System.Data.Odbc
 					Assert.AreEqual (null, DestinationParamArray [3], "#5 The DestinationParamArray must remain un-initialized");
 				}
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
 		[Test]
 		public void CopyToMultiDimensionalArrayTest ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			try {
 				OdbcCommand OdbcCmd = conn.CreateCommand ();
@@ -766,15 +741,14 @@ namespace MonoTests.System.Data.Odbc
 					Assert.AreEqual (null, DestinationParamArray [1, 3], "#5 The DestinationParamArray must remain un-initialized");
 				}
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
 		[Test]
 		public void CopyToLowerBoundCheckTest ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			try {
 				OdbcCommand OdbcCmd = conn.CreateCommand ();
@@ -795,15 +769,14 @@ namespace MonoTests.System.Data.Odbc
 					Assert.AreEqual (null, DestinationParamArray [3], "#5 The DestinationParamArray must remain un-initialized");
 				}
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
 		[Test]
 		public void DuplicateParameterNameTest ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			try {
 				OdbcCommand OdbcCmd = conn.CreateCommand ();
@@ -827,15 +800,14 @@ namespace MonoTests.System.Data.Odbc
 				Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf ((object) p1Lname));
 				Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf ((object) p2Lname));
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
 		[Test]
 		public void RemoveTest ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			try {
 				OdbcCommand OdbcCmd = conn.CreateCommand ();
@@ -848,15 +820,14 @@ namespace MonoTests.System.Data.Odbc
 				OdbcCmd.Parameters.Remove (p1Lname);
 				Assert.AreEqual (0, OdbcCmd.Parameters.Count, "#2 Collection should not contain any parameters");
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
 		[Test]
 		public void RemoveNullTest ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			try {
 				OdbcCommand OdbcCmd = conn.CreateCommand ();
@@ -873,15 +844,14 @@ namespace MonoTests.System.Data.Odbc
 					Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 The collection must contain only one parameter");
 				}
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 		
 		[Test]
 		public void RemoveEmptyTest ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			try {
 				OdbcCommand OdbcCmd = conn.CreateCommand ();
@@ -898,15 +868,14 @@ namespace MonoTests.System.Data.Odbc
 					Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 The collection must contain only one parameter");
 				}
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
 		[Test]
 		public void RemoveNonOdbcParameterTest ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			try {
 				OdbcCommand OdbcCmd = conn.CreateCommand ();
@@ -923,15 +892,14 @@ namespace MonoTests.System.Data.Odbc
 					Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 The collection must contain only one parameter");
 				}
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
 		[Test]
 		public void RemoveNonExistingParameterTest ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			try {
 				OdbcCommand OdbcCmd = conn.CreateCommand ();
@@ -951,15 +919,14 @@ namespace MonoTests.System.Data.Odbc
 					Assert.AreEqual (0, OdbcCmd.Parameters.Count, "#3 The collection should not contain any parameters");
 				}
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
 		[Test]
 		public void RemoveParameterContainedInAnotherCollTest ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			try {
 				OdbcCommand OdbcCmd = conn.CreateCommand ();
@@ -986,15 +953,14 @@ namespace MonoTests.System.Data.Odbc
 					Assert.AreEqual (2, OdbcCmd2.Parameters.Count, "#6 The parameter collection of OdbcCmd2 should contain 2 parameters");
 				}
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 		
 		[Test]
 		public void RemoveAtTest ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			try {
 				OdbcCommand OdbcCmd = conn.CreateCommand ();
@@ -1028,15 +994,14 @@ namespace MonoTests.System.Data.Odbc
 				Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf(p2Age), "#13 p2Age should be at index 0");
 				Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf(p3Tmp), "#14 p3Tmp should be at index 1");				
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
 		[Test]
 		public void RemoveAtOutOfRangeIndexTest ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			try {
 				OdbcCommand OdbcCmd = conn.CreateCommand ();
@@ -1055,15 +1020,14 @@ namespace MonoTests.System.Data.Odbc
 					Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf(p1Lname), "#4 p1Lname is not at index 0");
 				}
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 		
 		[Test]
 		public void RemoveAtNegativeIndexTest ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			try {
 				OdbcCommand OdbcCmd = conn.CreateCommand ();
@@ -1082,15 +1046,14 @@ namespace MonoTests.System.Data.Odbc
 					Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf(p1Lname), "#4 p1Lname is not at index 0");
 				}
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 		
 		[Test]
 		public void RemoveAtBoundaryTest ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			try {
 				OdbcCommand OdbcCmd = conn.CreateCommand ();
@@ -1109,15 +1072,14 @@ namespace MonoTests.System.Data.Odbc
 					Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf(p1Lname), "#4 p1Lname is not at index 0");
 				}
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
 		[Test]
 		public void AddWithValueTest ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			try {
 				OdbcCommand OdbcCmd = conn.CreateCommand ();
@@ -1201,15 +1163,14 @@ namespace MonoTests.System.Data.Odbc
 				Assert.AreEqual (2,OdbcCmd.Parameters[8].Value, "#50 The parameter at index 8 must have value as 2");                                                    
 				Assert.AreEqual (OdbcType.NVarChar,OdbcCmd.Parameters[8].OdbcType, "#51 Parameter must be of type NVarChar");
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
 		[Test]
 		public void DefaultNamesAndValuesTest ()
 		{
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			try {
 				OdbcCommand OdbcCmd = conn.CreateCommand ();
@@ -1238,7 +1199,7 @@ namespace MonoTests.System.Data.Odbc
 				Assert.AreEqual ("Parameter2",OdbcCmd.Parameters[2].ParameterName, "#12 The parameter must have a default name");
 				Assert.AreEqual (OdbcType.NVarChar,OdbcCmd.Parameters[2].OdbcType, "#13 Parameters with null value must be of type NVarChar");
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 	}

+ 70 - 118
mcs/class/System.Data/Test/ProviderTests/System.Data.Odbc/OdbcParameterTest.cs

@@ -35,12 +35,10 @@ using System.Data.Odbc;
 using System.Globalization;
 using System.Text;
 using System.Threading;
-
-using Mono.Data;
-
 using NUnit.Framework;
 
-namespace MonoTests.System.Data
+
+namespace MonoTests.System.Data.Connected.Odbc
 {
 	[TestFixture]
 	[Category ("odbc")]
@@ -69,8 +67,7 @@ namespace MonoTests.System.Data
 			string select_by_id = "select id, type_int from numeric_family where id = ?";
 			string delete_data = "delete from numeric_family where id = 6000";
 
-			IDbConnection conn = ConnectionManager.Singleton.Connection;
-			conn.Open ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			IDataReader dr = null;
 			OdbcCommand cmd = null;
@@ -248,8 +245,7 @@ namespace MonoTests.System.Data
 			string select_by_id = "select id, type_bigint from numeric_family where id = ?";
 			string delete_data = "delete from numeric_family where id = 6000";
 
-			IDbConnection conn = ConnectionManager.Singleton.Connection;
-			conn.Open ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			IDataReader dr = null;
 			OdbcCommand cmd = null;
@@ -433,8 +429,7 @@ namespace MonoTests.System.Data
 			string select_by_id = "select id, type_binary from binary_family where id = ?";
 			string delete_data = "delete from binary_family where id = 6000";
 
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			conn.Open ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			IDataReader dr = null;
 			OdbcCommand cmd = null;
@@ -651,8 +646,7 @@ namespace MonoTests.System.Data
 			string select_by_id = "select id, type_smallint from numeric_family where id = ?";
 			string delete_data = "delete from numeric_family where id = 6000";
 
-			IDbConnection conn = ConnectionManager.Singleton.Connection;
-			conn.Open ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			IDataReader dr = null;
 			OdbcCommand cmd = null;
@@ -833,15 +827,14 @@ namespace MonoTests.System.Data
 			string select_by_id = "select id, type_timestamp from binary_family where id = ?";
 			string delete_data = "delete from binary_family where id = 6000";
 
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			conn.Open ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			IDataReader dr = null;
 			OdbcCommand cmd = null;
 			OdbcParameter param;
 
 			try {
-				if (!ConnectionManager.Singleton.Engine.SupportsTimestamp)
+				if (!ConnectionManager.Instance.Odbc.EngineConfig.SupportsTimestamp)
 					Assert.Ignore ("Timestamp test does not apply to the current driver (" + conn.Driver + ").");
 
 				cmd = conn.CreateCommand ();
@@ -895,8 +888,7 @@ namespace MonoTests.System.Data
 			string select_by_id = "select id, type_tinyint from numeric_family where id = ?";
 			string delete_data = "delete from numeric_family where id = 6000";
 
-			IDbConnection conn = ConnectionManager.Singleton.Connection;
-			conn.Open ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			IDataReader dr = null;
 			OdbcCommand cmd = null;
@@ -1070,9 +1062,8 @@ namespace MonoTests.System.Data
 		public void StringParamTest ()
 		{
 			string query = "select id, fname from employee where fname = ?";
-			IDbConnection conn = ConnectionManager.Singleton.Connection;
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 			try {
-				ConnectionManager.Singleton.OpenConnection ();
 				OdbcCommand cmd = (OdbcCommand) conn.CreateCommand ();
 				cmd.CommandText = query;
 
@@ -1082,7 +1073,7 @@ namespace MonoTests.System.Data
 				Assert.IsTrue (dr.Read (), "#1 no data to test");
 				Assert.AreEqual (1, (int) dr [0], "#2 value not matching");
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 
@@ -1095,8 +1086,7 @@ namespace MonoTests.System.Data
 			string select_by_id = "select id, type_bit from numeric_family where id = ?";
 			string delete_data = "delete from numeric_family where id = 6000";
 
-			IDbConnection conn = ConnectionManager.Singleton.Connection;
-			conn.Open ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			IDataReader dr = null;
 			OdbcCommand cmd = null;
@@ -1130,11 +1120,7 @@ namespace MonoTests.System.Data
 				Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#B2");
 				Assert.AreEqual (2, dr.GetValue (0), "#B2");
 				Assert.AreEqual (typeof (bool), dr.GetFieldType (1), "#B3");
-				if (ConnectionManager.Singleton.Engine.Type == EngineType.MySQL)
-					// MySQL does not support true BIT type
-					Assert.AreEqual (true, dr.GetValue (1), "#B4");
-				else
-					Assert.AreEqual (false, dr.GetValue (1), "#B4");
+				Assert.AreEqual (false, dr.GetValue (1), "#B4");
 				Assert.IsFalse (dr.Read (), "#B5");
 				dr.Close ();
 				cmd.Dispose ();
@@ -1196,11 +1182,7 @@ namespace MonoTests.System.Data
 				Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#E2");
 				Assert.AreEqual (6000, dr.GetValue (0), "#E3");
 				Assert.AreEqual (typeof (bool), dr.GetFieldType (1), "#E4");
-				if (ConnectionManager.Singleton.Engine.Type == EngineType.MySQL)
-					// MySQL does not support true BIT type
-					Assert.AreEqual (true, dr.GetValue (1), "#E5");
-				else
-					Assert.AreEqual (false, dr.GetValue (1), "#E5");
+				Assert.AreEqual (false, dr.GetValue (1), "#E5");
 				Assert.IsFalse (dr.Read (), "#E6");
 				dr.Close ();
 				cmd.Dispose ();
@@ -1247,8 +1229,7 @@ namespace MonoTests.System.Data
 			string select_by_id = "select id, type_char from string_family where id = ?";
 			string delete_data = "delete from string_family where id = 6000";
 
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			conn.Open ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			IDataReader dr = null;
 			OdbcCommand cmd = null;
@@ -1266,7 +1247,7 @@ namespace MonoTests.System.Data
 				Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#A2");
 				Assert.AreEqual (1, dr.GetValue (0), "#A3");
 				Assert.AreEqual (typeof (string), dr.GetFieldType (1), "#A4");
-				if (ConnectionManager.Singleton.Engine.RemovesTrailingSpaces)
+				if (ConnectionManager.Instance.Odbc.EngineConfig.RemovesTrailingSpaces)
 					Assert.AreEqual ("char", dr.GetValue (1), "#A5");
 				else
 					Assert.AreEqual ("char      ", dr.GetValue (1), "#A5");
@@ -1301,7 +1282,7 @@ namespace MonoTests.System.Data
 				Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#C2");
 				Assert.AreEqual (3, dr.GetValue (0), "#C3");
 				Assert.AreEqual (typeof (string), dr.GetFieldType (1), "#C4");
-				if (ConnectionManager.Singleton.Engine.RemovesTrailingSpaces)
+				if (ConnectionManager.Instance.Odbc.EngineConfig.RemovesTrailingSpaces)
 					Assert.AreEqual (string.Empty, dr.GetValue (1), "#C5");
 				else
 					Assert.AreEqual ("          ", dr.GetValue (1), "#C5");
@@ -1341,7 +1322,7 @@ namespace MonoTests.System.Data
 				Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#E2");
 				Assert.AreEqual (6000, dr.GetValue (0), "#E3");
 				Assert.AreEqual (typeof (string), dr.GetFieldType (1), "#E4");
-				if (ConnectionManager.Singleton.Engine.RemovesTrailingSpaces)
+				if (ConnectionManager.Instance.Odbc.EngineConfig.RemovesTrailingSpaces)
 					Assert.AreEqual ("ABC", dr.GetValue (1), "#E5");
 				else
 					Assert.AreEqual ("ABC       ", dr.GetValue (1), "#E5");
@@ -1394,7 +1375,7 @@ namespace MonoTests.System.Data
 				Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#G2");
 				Assert.AreEqual (6000, dr.GetValue (0), "#G3");
 				Assert.AreEqual (typeof (string), dr.GetFieldType (1), "#G4");
-				if (ConnectionManager.Singleton.Engine.RemovesTrailingSpaces)
+				if (ConnectionManager.Instance.Odbc.EngineConfig.RemovesTrailingSpaces)
 					Assert.AreEqual (string.Empty, dr.GetValue (1), "#G5");
 				else
 					Assert.AreEqual ("          ", dr.GetValue (1), "#G5");
@@ -1445,8 +1426,7 @@ namespace MonoTests.System.Data
 			string insert_data = "insert into numeric_family (id, type_decimal1, type_decimal2) values (6000, ?, ?)";
 			string delete_data = "delete from numeric_family where id = 6000";
 
-			IDbConnection conn = ConnectionManager.Singleton.Connection;
-			conn.Open ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			IDataReader dr = null;
 			OdbcCommand cmd = null;
@@ -1649,7 +1629,7 @@ namespace MonoTests.System.Data
 				Assert.AreEqual (typeof (decimal), dr.GetFieldType (1), "#L4");
 				Assert.AreEqual (56789m, dr.GetValue (1), "#L5");
 				Assert.AreEqual (typeof (decimal), dr.GetFieldType (2), "#L6");
-				if (ConnectionManager.Singleton.Engine.Type == EngineType.MySQL)
+				if (ConnectionManager.Instance.Odbc.EngineConfig.Type == EngineType.MySQL)
 					Assert.AreEqual (9876556.780m, dr.GetValue (2), "#L7");
 				else
 					Assert.AreEqual (98765.570m, dr.GetValue (2), "#L7");
@@ -1677,16 +1657,11 @@ namespace MonoTests.System.Data
 				Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#M2");
 				Assert.AreEqual (6000, dr.GetValue (0), "#M3");
 				Assert.AreEqual (typeof (decimal), dr.GetFieldType (1), "#M4");
-				if (ConnectionManager.Singleton.Engine.Type == EngineType.MySQL)
-					Assert.AreEqual (0m, dr.GetValue (1), "#M5");
-				else
-					Assert.AreEqual (DBNull.Value, dr.GetValue (1), "#M5");
+				Assert.AreEqual (DBNull.Value, dr.GetValue (1), "#M5");
 				Assert.AreEqual (typeof (decimal), dr.GetFieldType (2), "#M6");
-				if (ConnectionManager.Singleton.Engine.Type == EngineType.MySQL)
-					Assert.AreEqual (0m, dr.GetValue (1), "#M7");
-				else
-					Assert.AreEqual (DBNull.Value, dr.GetValue (2), "#M7");
-				Assert.IsFalse (dr.Read (), "#M8");
+				Assert.AreEqual (DBNull.Value, dr.GetValue(1), "#M7");
+				Assert.AreEqual (DBNull.Value, dr.GetValue (2), "#M8");
+				Assert.IsFalse (dr.Read (), "#M9");
 				dr.Close ();
 				cmd.Dispose ();
 			} finally {
@@ -1709,8 +1684,7 @@ namespace MonoTests.System.Data
 			string select_by_id = "select id, type_double from numeric_family where id = ?";
 			string delete_data = "delete from numeric_family where id = 6000";
 
-			IDbConnection conn = ConnectionManager.Singleton.Connection;
-			conn.Open ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			IDataReader dr = null;
 			OdbcCommand cmd = null;
@@ -1893,8 +1867,7 @@ namespace MonoTests.System.Data
 			string select_data = "select type_blob from binary_family where id = ?";
 			string delete_data = "delete from binary_family where id = 6000";
 
-			IDbConnection conn = ConnectionManager.Singleton.Connection;
-			conn.Open ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			IDataReader dr = null;
 			OdbcCommand cmd = null;
@@ -2124,9 +2097,8 @@ namespace MonoTests.System.Data
 			string select_data = "select type_nchar from string_family where type_nchar = ? and id = ?";
 			string select_by_id = "select type_nchar from string_family where id = ?";
 			string delete_data = "delete from string_family where id = 6000";
-			
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			conn.Open ();
+
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			IDataReader dr = null;
 			OdbcCommand cmd = null;
@@ -2142,7 +2114,7 @@ namespace MonoTests.System.Data
 				dr = cmd.ExecuteReader ();
 				Assert.IsTrue (dr.Read (), "#A1");
 				Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#A2");
-				if (ConnectionManager.Singleton.Engine.RemovesTrailingSpaces)
+				if (ConnectionManager.Instance.Odbc.EngineConfig.RemovesTrailingSpaces)
 					Assert.AreEqual ("nch\u092d\u093er", dr.GetValue (0), "#A3");
 				else
 					Assert.AreEqual ("nch\u092d\u093er    ", dr.GetValue (0), "#A3");
@@ -2173,7 +2145,7 @@ namespace MonoTests.System.Data
 				dr = cmd.ExecuteReader ();
 				Assert.IsTrue (dr.Read (), "#C1");
 				Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#C2");
-				if (ConnectionManager.Singleton.Engine.RemovesTrailingSpaces)
+				if (ConnectionManager.Instance.Odbc.EngineConfig.RemovesTrailingSpaces)
 					Assert.AreEqual (string.Empty, dr.GetValue (0), "#C3");
 				else
 					Assert.AreEqual ("          ", dr.GetValue (0), "#C3");
@@ -2209,7 +2181,7 @@ namespace MonoTests.System.Data
 				dr = cmd.ExecuteReader ();
 				Assert.IsTrue (dr.Read (), "#E1");
 				Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#E2");
-				if (ConnectionManager.Singleton.Engine.RemovesTrailingSpaces)
+				if (ConnectionManager.Instance.Odbc.EngineConfig.RemovesTrailingSpaces)
 					Assert.AreEqual ("nchar", dr.GetValue (0), "#E3");
 				else
 					Assert.AreEqual ("nchar     ", dr.GetValue (0), "#E3");
@@ -2235,7 +2207,7 @@ namespace MonoTests.System.Data
 				dr = cmd.ExecuteReader ();
 				Assert.IsTrue (dr.Read (), "#F1");
 				Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#F2");
-				if (ConnectionManager.Singleton.Engine.RemovesTrailingSpaces)
+				if (ConnectionManager.Instance.Odbc.EngineConfig.RemovesTrailingSpaces)
 					Assert.AreEqual ("nch\u0488", dr.GetValue (0), "#F3");
 				else
 					Assert.AreEqual ("nch\u0488      ", dr.GetValue (0), "#F3");
@@ -2261,7 +2233,7 @@ namespace MonoTests.System.Data
 				dr = cmd.ExecuteReader ();
 				Assert.IsTrue (dr.Read (), "#G1");
 				Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#G2");
-				if (ConnectionManager.Singleton.Engine.RemovesTrailingSpaces)
+				if (ConnectionManager.Instance.Odbc.EngineConfig.RemovesTrailingSpaces)
 					Assert.AreEqual ("ch\u0488r", dr.GetValue (0), "#G3");
 				else
 					Assert.AreEqual ("ch\u0488r      ", dr.GetValue (0), "#G3");
@@ -2310,7 +2282,7 @@ namespace MonoTests.System.Data
 				dr = cmd.ExecuteReader ();
 				Assert.IsTrue (dr.Read (), "#I1");
 				Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#I2");
-				if (ConnectionManager.Singleton.Engine.RemovesTrailingSpaces)
+				if (ConnectionManager.Instance.Odbc.EngineConfig.RemovesTrailingSpaces)
 					Assert.AreEqual (string.Empty, dr.GetValue (0), "#I3");
 				else
 					Assert.AreEqual ("          ", dr.GetValue (0), "#I3");
@@ -2357,8 +2329,7 @@ namespace MonoTests.System.Data
 			string select_by_id = "select type_ntext from string_family where id = ?";
 			string delete_data = "delete from string_family where id = 6000";
 
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			conn.Open ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			IDataReader dr = null;
 			OdbcCommand cmd = null;
@@ -2513,8 +2484,7 @@ namespace MonoTests.System.Data
 			string select_by_id = "select type_text from string_family where id = ?";
 			string delete_data = "delete from string_family where id = 6000";
 
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			conn.Open ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			IDataReader dr = null;
 			OdbcCommand cmd = null;
@@ -2674,9 +2644,8 @@ namespace MonoTests.System.Data
 			string select_by_id = "select id, type_numeric1, type_numeric2 from numeric_family where id = ?";
 			string insert_data = "insert into numeric_family (id, type_numeric1, type_numeric2) values (6000, ?, ?)";
 			string delete_data = "delete from numeric_family where id = 6000";
-
-			IDbConnection conn = ConnectionManager.Singleton.Connection;
-			conn.Open ();
+			
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			IDataReader dr = null;
 			OdbcCommand cmd = null;
@@ -2879,7 +2848,7 @@ namespace MonoTests.System.Data
 				Assert.AreEqual (typeof (decimal), dr.GetFieldType (1), "#L4");
 				Assert.AreEqual (56789m, dr.GetValue (1), "#L5");
 				Assert.AreEqual (typeof (decimal), dr.GetFieldType (2), "#L6");
-				if (ConnectionManager.Singleton.Engine.Type == EngineType.MySQL)
+				if (ConnectionManager.Instance.Odbc.EngineConfig.Type == EngineType.MySQL)
 					Assert.AreEqual (9876556.780m, dr.GetValue (2), "#L7");
 				else
 					Assert.AreEqual (98765.570m, dr.GetValue (2), "#L7");
@@ -2907,15 +2876,10 @@ namespace MonoTests.System.Data
 				Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#M2");
 				Assert.AreEqual (6000, dr.GetValue (0), "#M3");
 				Assert.AreEqual (typeof (decimal), dr.GetFieldType (1), "#M4");
-				if (ConnectionManager.Singleton.Engine.Type == EngineType.MySQL)
-					Assert.AreEqual (0m, dr.GetValue (1), "#M5");
-				else
-					Assert.AreEqual (DBNull.Value, dr.GetValue (1), "#M5");
+				Assert.AreEqual (DBNull.Value, dr.GetValue (1), "#M5");
 				Assert.AreEqual (typeof (decimal), dr.GetFieldType (2), "#M6");
-				if (ConnectionManager.Singleton.Engine.Type == EngineType.MySQL)
-					Assert.AreEqual (0m, dr.GetValue (1), "#M7");
-				else
-					Assert.AreEqual (DBNull.Value, dr.GetValue (2), "#M7");
+				Assert.AreEqual (DBNull.Value, dr.GetValue(1), "#M7");
+				Assert.AreEqual (DBNull.Value, dr.GetValue (2), "#M7");
 				Assert.IsFalse (dr.Read (), "#M8");
 				dr.Close ();
 				cmd.Dispose ();
@@ -2939,8 +2903,7 @@ namespace MonoTests.System.Data
 			string select_by_id = "select type_nvarchar from string_family where id = ?";
 			string delete_data = "delete from string_family where id = 6000";
 
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			conn.Open ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			IDataReader dr = null;
 			OdbcCommand cmd = null;
@@ -3131,8 +3094,7 @@ namespace MonoTests.System.Data
 			string select_by_id = "select id, type_varbinary from binary_family where id = ?";
 			string delete_data = "delete from binary_family where id = 6000";
 
-			IDbConnection conn = ConnectionManager.Singleton.Connection;
-			conn.Open ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			IDataReader dr = null;
 			OdbcCommand cmd = null;
@@ -3362,8 +3324,7 @@ namespace MonoTests.System.Data
 			string select_by_id = "select type_varchar from string_family where id = ?";
 			string delete_data = "delete from string_family where id = 6000";
 
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			conn.Open ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			IDataReader dr = null;
 			OdbcCommand cmd = null;
@@ -3531,8 +3492,7 @@ namespace MonoTests.System.Data
 			string select_by_id = "select id, type_float from numeric_family where id = ?";
 			string delete_data = "delete from numeric_family where id = 6000";
 
-			IDbConnection conn = ConnectionManager.Singleton.Connection;
-			conn.Open ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			IDataReader dr = null;
 			OdbcCommand cmd = null;
@@ -3549,7 +3509,7 @@ namespace MonoTests.System.Data
 				Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#D2");
 				Assert.AreEqual (1, dr.GetValue (0), "#D3");
 				Assert.AreEqual (typeof (float), dr.GetFieldType (1), "#D4");
-				Assert.AreEqual (3.40E+38, dr.GetValue (1), "#D5");
+				Assert.AreEqual (3.39999995E+38f, dr.GetValue (1), "#D5");
 				Assert.IsFalse (dr.Read (), "#D6");
 				dr.Close ();
 				cmd.Dispose ();
@@ -3566,7 +3526,7 @@ namespace MonoTests.System.Data
 				Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#A2");
 				Assert.AreEqual (1, dr.GetValue (0), "#A2");
 				Assert.AreEqual (typeof (float), dr.GetFieldType (1), "#A3");
-				Assert.AreEqual (3.40E+38, dr.GetValue (1), "#A4");
+				Assert.AreEqual (3.40E+38f, (float)dr.GetValue (1), 0.0000001f, "#A4");
 				Assert.IsFalse (dr.Read (), "#A5");
 				dr.Close ();
 				cmd.Dispose ();
@@ -3582,7 +3542,7 @@ namespace MonoTests.System.Data
 				Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#B2");
 				Assert.AreEqual (2, dr.GetValue (0), "#B2");
 				Assert.AreEqual (typeof (float), dr.GetFieldType (1), "#B3");
-				Assert.AreEqual (-3.40E+38, dr.GetValue (1), "#B4");
+				Assert.AreEqual(-3.40E+38f, (float)dr.GetValue(1), 0.0000001f, "#B4");
 				Assert.IsFalse (dr.Read (), "#B5");
 				dr.Close ();
 				cmd.Dispose ();
@@ -3633,7 +3593,7 @@ namespace MonoTests.System.Data
 				Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#E2");
 				Assert.AreEqual (6000, dr.GetValue (0), "#E3");
 				Assert.AreEqual (typeof (float), dr.GetFieldType (1), "#E4");
-				Assert.AreEqual (3.40E+38, dr.GetValue (1), "#E5");
+				Assert.AreEqual(3.40E+38f, (float)dr.GetValue(1), 0.0000001f, "#E4");
 				Assert.IsFalse (dr.Read (), "#E6");
 				dr.Close ();
 				cmd.Dispose ();
@@ -3656,7 +3616,7 @@ namespace MonoTests.System.Data
 				Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#F2");
 				Assert.AreEqual (6000, dr.GetValue (0), "#F3");
 				Assert.AreEqual (typeof (float), dr.GetFieldType (1), "#F4");
-				Assert.AreEqual (-3.40E+38, dr.GetValue (1), "#F5");
+				Assert.AreEqual (-3.40E+38f, (float)dr.GetValue(1), 0.0000001f, "#F4");
 				Assert.IsFalse (dr.Read (), "#F6");
 				dr.Close ();
 				cmd.Dispose ();
@@ -3726,8 +3686,7 @@ namespace MonoTests.System.Data
 			string select_by_id = "select id, type_smalldatetime from datetime_family where id = ?";
 			string delete_data = "delete from datetime_family where id = 6000";
 
-			IDbConnection conn = ConnectionManager.Singleton.Connection;
-			conn.Open ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			IDataReader dr = null;
 			OdbcCommand cmd = null;
@@ -3834,16 +3793,15 @@ namespace MonoTests.System.Data
 			string select_by_id = "select id, type_datetime from datetime_family where id = ?";
 			string delete_data = "delete from datetime_family where id = 6000";
 
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			conn.Open ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			IDataReader dr = null;
 			OdbcCommand cmd = null;
 			OdbcParameter param;
 
 			try {
-				DateTime date = DateTime.ParseExact ("9999-12-31 23:59:59.997",
-					"yyyy-MM-dd HH:mm:ss.fff", CultureInfo.InvariantCulture);
+				DateTime date = DateTime.ParseExact ("9999-12-31 23:59:59",
+					"yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture);
 
 				cmd = conn.CreateCommand ();
 				cmd.CommandText = select_data;
@@ -3856,7 +3814,7 @@ namespace MonoTests.System.Data
 				Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#A2");
 				Assert.AreEqual (1, dr [0], "#A3");
 				Assert.AreEqual (typeof (DateTime), dr.GetFieldType (1), "#A4");
-				if (ConnectionManager.Singleton.Engine.SupportsMicroseconds)
+				if (ConnectionManager.Instance.Odbc.EngineConfig.SupportsMicroseconds)
 					Assert.AreEqual (date, dr [1], "#A5");
 				else
 					Assert.AreEqual (new DateTime (9999, 12, 31, 23, 59, 59), dr [1], "#A5");
@@ -3878,7 +3836,7 @@ namespace MonoTests.System.Data
 				dr.Close ();
 				cmd.Dispose ();
 
-				date = new DateTime (1973, 8, 13, 17, 54, 33, 953);
+				date = new DateTime (1973, 8, 13, 17, 54, 34);
 
 				cmd = conn.CreateCommand ();
 				cmd.CommandText = insert_data;
@@ -3898,10 +3856,7 @@ namespace MonoTests.System.Data
 				Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#C2");
 				Assert.AreEqual (6000, dr.GetValue (0), "#C3");
 				Assert.AreEqual (typeof (DateTime), dr.GetFieldType (1), "#C4");
-				if (ConnectionManager.Singleton.Engine.SupportsMicroseconds)
-					Assert.AreEqual (date, dr.GetValue (1), "#C5");
-				else
-					Assert.AreEqual (new DateTime (1973, 8, 13, 17, 54, 33), dr.GetValue (1), "#C5");
+				Assert.AreEqual (new DateTime (1973, 8, 13, 17, 54, 34), dr.GetValue (1), "#C5");
 				Assert.IsFalse (dr.Read (), "#C6");
 				dr.Close ();
 				cmd.Dispose ();
@@ -3948,15 +3903,14 @@ namespace MonoTests.System.Data
 			string select_by_id = "select type_date from datetime_family where id = ?";
 			string delete_data = "delete from datetime_family where id = 6000";
 
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			conn.Open ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			IDataReader dr = null;
 			OdbcCommand cmd = null;
 			OdbcParameter param;
 
 			try {
-				if (!ConnectionManager.Singleton.Engine.SupportsDate)
+				if (!ConnectionManager.Instance.Odbc.EngineConfig.SupportsDate)
 					Assert.Ignore ("Date test does not apply to the current driver (" + conn.Driver + ").");
 
 				DateTime date = new DateTime (9999, 12, 31);
@@ -4048,18 +4002,17 @@ namespace MonoTests.System.Data
 			string select_by_id = "select type_time from datetime_family where id = ?";
 			string delete_data = "delete from datetime_family where id = 6000";
 
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			conn.Open ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			IDataReader dr = null;
 			OdbcCommand cmd = null;
 			OdbcParameter param;
 
 			try {
-				if (!ConnectionManager.Singleton.Engine.SupportsTime)
+				if (!ConnectionManager.Instance.Odbc.EngineConfig.SupportsTime)
 					Assert.Ignore ("Time test does not apply to the current driver (" + conn.Driver + ").");
 
-				TimeSpan time = ConnectionManager.Singleton.Engine.SupportsMicroseconds ?
+				TimeSpan time = ConnectionManager.Instance.Odbc.EngineConfig.SupportsMicroseconds ?
 					new TimeSpan (23, 58, 59, 953) : new TimeSpan (23, 58, 59);
 
 				cmd = conn.CreateCommand ();
@@ -4149,15 +4102,14 @@ namespace MonoTests.System.Data
 			string select_by_id = "select id, type_guid from string_family where id = ?";
 			string delete_data = "delete from string_family where id = 6000";
 
-			OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
-			conn.Open ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
 
 			IDataReader dr = null;
 			OdbcCommand cmd = null;
 			OdbcParameter param;
 
 			try {
-				if (!ConnectionManager.Singleton.Engine.SupportsUniqueIdentifier)
+				if (!ConnectionManager.Instance.Odbc.EngineConfig.SupportsUniqueIdentifier)
 					Assert.Ignore ("UniqueIdentifier test does not apply to the current driver (" + conn.Driver + ").");
 
 				cmd = conn.CreateCommand ();
@@ -4243,9 +4195,9 @@ namespace MonoTests.System.Data
 		[Test]
 		public void DBNullParameterTest()
 		{
-			IDbConnection conn = ConnectionManager.Singleton.Connection;
-			try {
-				ConnectionManager.Singleton.OpenConnection ();
+			OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
+			try
+			{
 				OdbcDataAdapter Adaptador = new OdbcDataAdapter ();
 				DataSet Lector = new DataSet ();
 
@@ -4254,7 +4206,7 @@ namespace MonoTests.System.Data
 				Adaptador.Fill (Lector);
 				Assert.AreEqual (Lector.Tables[0].Rows[0][0], DBNull.Value, "#1 DBNull parameter not passed correctly");
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Odbc.CloseConnection ();
 			}
 		}
 

+ 2 - 1
mcs/class/System.Data/Test/ProviderTests/System.Data.SqlClient/SqlClientFactoryTest.cs

@@ -35,9 +35,10 @@ using System.Net;
 using NUnit.Framework;
 using System.Collections;
 using System.Security.Permissions;
+
 using System.Security;
 
-namespace MonoTests.System.Data
+namespace MonoTests.System.Data.Connected.SqlClient
 {
 	[TestFixture]
 	[Category ("sqlserver")]

+ 20 - 26
mcs/class/System.Data/Test/ProviderTests/System.Data.SqlClient/SqlCommandBuilderTest.cs

@@ -34,11 +34,10 @@ using System.Data;
 using System.Data.Common;
 using System.Data.SqlClient;
 using System.Data.SqlTypes;
-using Mono.Data;
 
 using NUnit.Framework;
 
-namespace MonoTests.System.Data
+namespace MonoTests.System.Data.Connected.SqlClient
 {
 	[TestFixture]
 	[Category ("sqlserver")]
@@ -50,8 +49,8 @@ namespace MonoTests.System.Data
 		[TestFixtureSetUp]
 		public void init ()
 		{
-			conn = new SqlConnection (ConnectionManager.Singleton.ConnectionString);
-			engine = ConnectionManager.Singleton.Engine;
+			conn = new SqlConnection (ConnectionManager.Instance.Sql.ConnectionString);
+			engine = ConnectionManager.Instance.Sql.EngineConfig;
 		}
 
 		private static EngineConfig Engine {
@@ -65,13 +64,15 @@ namespace MonoTests.System.Data
 		{
 			conn.Open ();
 		}
+
 		[TearDown]
 		public void TearDown ()
 		{
-			conn.Close ();
+			conn?.Close ();
 		}
 		
 		[Test]
+		[Category("NotWorking")]
 		public void GetInsertCommand1 ()
 		{
 			SqlCommand cmd = null;
@@ -121,6 +122,7 @@ namespace MonoTests.System.Data
 		}
 
 		[Test]
+		[Category("NotWorking")]
 		public void GetInsertCommand1_Expression ()
 		{
 			SqlCommand cmd = null;
@@ -148,6 +150,7 @@ namespace MonoTests.System.Data
 		}
 
 		[Test] // GetInsertCommand (Boolean)
+		[Category("NotWorking")]
 		public void GetInsertCommand2 ()
 		{
 			SqlCommand cmd = null;
@@ -198,6 +201,7 @@ namespace MonoTests.System.Data
 		}
 
 		[Test] // GetUpdateCommand ()
+		[Category("NotWorking")]
 		public void GetUpdateCommand1 ()
 		{
 			SqlCommand cmd = null;
@@ -311,6 +315,7 @@ namespace MonoTests.System.Data
 		}
 
 		[Test] // GetUpdateCommand (Boolean)
+		[Category("NotWorking")]
 		public void GetUpdateCommand2 ()
 		{
 			SqlCommand cmd = null;
@@ -474,6 +479,7 @@ namespace MonoTests.System.Data
 		}
 
 		[Test]
+		[Category("NotWorking")]
 		public void GetUpdateCommandDBConcurrencyExceptionTest ()
 		{
 			string selectQuery = "select id, fname from employee where id = 1";
@@ -504,6 +510,7 @@ namespace MonoTests.System.Data
 		}
 
 		[Test]
+		[Category("NotWorking")]
 		public void GetDeleteCommandDBConcurrencyExceptionTest ()
 		{
 			string selectQuery = "select id, fname from employee where id = 1";
@@ -534,6 +541,7 @@ namespace MonoTests.System.Data
 		}
 
 		[Test] // GetDeleteCommand ()
+		[Category("NotWorking")]
 		public void GetDeleteCommand1 ()
 		{
 			SqlCommand cmd = null;
@@ -641,6 +649,7 @@ namespace MonoTests.System.Data
 		}
 
 		[Test] // GetDeleteCommand ()
+		[Category("NotWorking")]
 		public void GetDeleteCommand2 ()
 		{
 			SqlCommand cmd = null;
@@ -759,6 +768,7 @@ namespace MonoTests.System.Data
 		}
 
 		[Test]
+		[Category("NotWorking")]
 		public void DefaultProperties ()
 		{
 			SqlCommandBuilder cb = new SqlCommandBuilder ();
@@ -855,10 +865,7 @@ namespace MonoTests.System.Data
 				Assert.IsFalse (param.IsNullable, "#D:IsNullable");
 				Assert.AreEqual ("@param1", param.ParameterName, "#D:ParameterName");
 				Assert.AreEqual (5, param.Precision, "#D:Precision");
-				if (ClientVersion == 7)
-					Assert.AreEqual (2, param.Scale, "#D:Scale");
-				else
-					Assert.AreEqual (3, param.Scale, "#D:Scale");
+				Assert.AreEqual (2, param.Scale, "#D:Scale");
 				//Assert.AreEqual (0, param.Size, "#D:Size");
 				Assert.AreEqual (SqlDbType.Decimal, param.SqlDbType, "#D:SqlDbType");
 				Assert.IsNull (param.Value, "#D:Value");
@@ -1110,11 +1117,7 @@ namespace MonoTests.System.Data
 			else
 				Assert.AreEqual ("@p1", param.ParameterName, prefix + "ParameterName (0)");
 
-			if (ClientVersion > 7)
-			   	Assert.AreEqual (0, param.Precision, prefix + "Precision (0)");
-			else
-				Assert.AreEqual (10, param.Precision, prefix + "Precision (0)");
-
+			Assert.AreEqual (10, param.Precision, prefix + "Precision (0)");
 			Assert.AreEqual (0, param.Scale, prefix + "Scale (0)");
 			//Assert.AreEqual (0, param.Size, prefix + "Size (0)");
 			Assert.AreEqual ("id", param.SourceColumn, prefix + "SourceColumn (0)");
@@ -1215,10 +1218,7 @@ namespace MonoTests.System.Data
 			else
 				Assert.AreEqual ("@p1", param.ParameterName, prefix + "ParameterName (0)");
 
-			if (ClientVersion > 7)
-			   	Assert.AreEqual (0, param.Precision, prefix + "Precision (0)");
-			else
-				Assert.AreEqual (10, param.Precision, prefix + "Precision (0)");
+			Assert.AreEqual (10, param.Precision, prefix + "Precision (0)");
 
 			Assert.AreEqual (0, param.Scale, prefix + "Scale (0)");
 			//Assert.AreEqual (0, param.Size, prefix + "Size (0)");
@@ -1296,10 +1296,7 @@ namespace MonoTests.System.Data
 			else
 				Assert.AreEqual ("@p1", param.ParameterName, prefix + "ParameterName (0)");
 
-			if (ClientVersion > 7)
-				Assert.AreEqual (0, param.Precision, prefix + "Precision (0)");
-			else
-				Assert.AreEqual (10, param.Precision, prefix + "Precision (0)");
+			Assert.AreEqual (10, param.Precision, prefix + "Precision (0)");
 
 			Assert.AreEqual (0, param.Scale, prefix + "Scale (0)");
 			//Assert.AreEqual (0, param.Size, prefix + "Size (0)");
@@ -1370,10 +1367,7 @@ namespace MonoTests.System.Data
 			else
 				Assert.AreEqual ("@p4", param.ParameterName, prefix + "ParameterName (3)");
 
-			if (ClientVersion > 7)
-				Assert.AreEqual (0, param.Precision, prefix + "Precision (0)");
-			else
-				Assert.AreEqual (10, param.Precision, prefix + "Precision (0)");
+			Assert.AreEqual (10, param.Precision, prefix + "Precision (0)");
 
 			Assert.AreEqual (0, param.Scale, prefix + "Scale (3)");
 			//Assert.AreEqual (0, param.Size, prefix + "Size (3)");

+ 46 - 75
mcs/class/System.Data/Test/ProviderTests/System.Data.SqlClient/SqlCommandTest.cs

@@ -39,7 +39,7 @@ using System.Xml;
 
 using NUnit.Framework;
 
-namespace MonoTests.System.Data.SqlClient
+namespace MonoTests.System.Data.Connected.SqlClient
 {
 	[TestFixture]
 	[Category ("sqlserver")]
@@ -47,7 +47,7 @@ namespace MonoTests.System.Data.SqlClient
 	{
 		SqlConnection conn;
 		SqlCommand cmd;
-		string connectionString = ConnectionManager.Singleton.ConnectionString;
+		string connectionString = ConnectionManager.Instance.Sql.ConnectionString;
 		EngineConfig engine;
 
 		static readonly decimal SMALLMONEY_MAX = 214748.3647m;
@@ -56,7 +56,7 @@ namespace MonoTests.System.Data.SqlClient
 		[SetUp]
 		public void SetUp ()
 		{
-			engine = ConnectionManager.Singleton.Engine;
+			engine = ConnectionManager.Instance.Sql.EngineConfig;
 		}
 
 		[TearDown]
@@ -144,8 +144,7 @@ namespace MonoTests.System.Data.SqlClient
 		[Test] // bug #341743
 		public void Dispose_Connection_Disposed ()
 		{
-			conn = (SqlConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			conn = ConnectionManager.Instance.Sql.Connection;
 
 			cmd = conn.CreateCommand ();
 			cmd.CommandText = "SELECT 'a'";
@@ -159,6 +158,7 @@ namespace MonoTests.System.Data.SqlClient
 		}
 
 		[Test]
+		[Category("NotWorking")]
 		public void ExecuteScalar ()
 		{
 			conn = new SqlConnection (connectionString);
@@ -269,8 +269,7 @@ namespace MonoTests.System.Data.SqlClient
 		[Test]
 		public void ExecuteScalar_CommandText_Empty ()
 		{
-			conn = (SqlConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			conn = ConnectionManager.Instance.Sql.Connection;
 
 			cmd = conn.CreateCommand ();
 
@@ -448,6 +447,7 @@ namespace MonoTests.System.Data.SqlClient
 		}
 
 		[Test]
+		[Category("NotWorking")]
 		public void ExecuteNonQuery ()
 		{
 			conn = new SqlConnection (connectionString);
@@ -1106,6 +1106,7 @@ namespace MonoTests.System.Data.SqlClient
 		}
 
 		[Test]
+		[Category("NotWorking")]
 		public void Prepare_Transaction_Only ()
 		{
 			SqlTransaction trans = null;
@@ -1117,53 +1118,33 @@ namespace MonoTests.System.Data.SqlClient
 			// Text, without parameters
 			cmd = new SqlCommand ("select count(*) from whatever");
 			cmd.Transaction = trans;
-			try {
-				cmd.Prepare ();
-				Assert.Fail ("#A1");
-			} catch (NullReferenceException) {
-			}
+			cmd.Prepare();
 
 			// Text, with parameters
 			cmd = new SqlCommand ("select count(*) from whatever");
 			cmd.Parameters.Add ("@TestPar1", SqlDbType.Int);
 			cmd.Transaction = trans;
-			try {
-				cmd.Prepare ();
-				Assert.Fail ("#B1");
-			} catch (NullReferenceException) {
-			}
+			Assert.Throws<InvalidOperationException>(() => cmd.Prepare());
 
 			// Text, parameters cleared
 			cmd = new SqlCommand ("select count(*) from whatever");
 			cmd.Parameters.Add ("@TestPar1", SqlDbType.Int);
 			cmd.Parameters.Clear ();
 			cmd.Transaction = trans;
-			try {
-				cmd.Prepare ();
-				Assert.Fail ("#C1");
-			} catch (NullReferenceException) {
-			}
+			cmd.Prepare();
 
 			// StoredProcedure, without parameters
 			cmd = new SqlCommand ("FindCustomer");
 			cmd.CommandType = CommandType.StoredProcedure;
 			cmd.Transaction = trans;
-			try {
-				cmd.Prepare ();
-				Assert.Fail ("#D1");
-			} catch (NullReferenceException) {
-			}
+			cmd.Prepare();
 
 			// StoredProcedure, with parameters
 			cmd = new SqlCommand ("FindCustomer");
 			cmd.CommandType = CommandType.StoredProcedure;
 			cmd.Parameters.Add ("@TestPar1", SqlDbType.Int);
 			cmd.Transaction = trans;
-			try {
-				cmd.Prepare ();
-				Assert.Fail ("#E1");
-			} catch (NullReferenceException) {
-			}
+			cmd.Prepare();
 		}
 
 		[Test] // bug #412576
@@ -1357,8 +1338,7 @@ namespace MonoTests.System.Data.SqlClient
 			SqlParameter idParam;
 			SqlParameter dojParam;
 
-			conn = (SqlConnection) ConnectionManager.Singleton.Connection;
-			conn.Open ();
+			conn = ConnectionManager.Instance.Sql.Connection;
 
 			// parameters with leading '@'
 			try {
@@ -1475,6 +1455,7 @@ namespace MonoTests.System.Data.SqlClient
 		}
 
 		[Test] // bug #319598
+		[Category("NotWorking")]
 		public void LongStoredProcTest ()
 		{
 			if (ClientVersion == 7)
@@ -1559,9 +1540,8 @@ namespace MonoTests.System.Data.SqlClient
 		[Test]
 		public void EnumParameterTest ()
 		{
-			conn = (SqlConnection) ConnectionManager.Singleton.Connection;
+			conn = ConnectionManager.Instance.Sql.Connection;
 			try {
-				ConnectionManager.Singleton.OpenConnection ();
 				// create temp sp here, should normally be created in Setup of test 
 				// case, but cannot be done right now because of ug #68978
 				DBHelper.ExecuteNonQuery (conn, "CREATE PROCEDURE #Bug66630 ("
@@ -1594,7 +1574,7 @@ namespace MonoTests.System.Data.SqlClient
 				DBHelper.ExecuteNonQuery (conn, "if exists (select name from sysobjects " +
 							  " where name like '#temp_Bug66630' and type like 'P') " +
 							  " drop procedure #temp_Bug66630; ");
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Sql.CloseConnection ();
 			}
 		}
 
@@ -1638,6 +1618,7 @@ namespace MonoTests.System.Data.SqlClient
 		}
 
 		[Test]
+		[Category("NotWorking")]
 		public void StoredProc_ParameterTest ()
 		{
 			string create_query = CREATE_TMP_SP_PARAM_TEST;
@@ -2208,8 +2189,7 @@ namespace MonoTests.System.Data.SqlClient
 		[Test]
 		public void OutputParamSizeTest1 ()
 		{
-			conn = (SqlConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			conn = ConnectionManager.Instance.Sql.Connection;
 			cmd = new SqlCommand ();
 			cmd.Connection = conn;
 
@@ -2242,8 +2222,7 @@ namespace MonoTests.System.Data.SqlClient
 		[Test]
 		public void OutputParamSizeTest2 ()
 		{
-			conn = (SqlConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			conn = ConnectionManager.Instance.Sql.Connection;
 			cmd = new SqlCommand ();
 			cmd.Connection = conn;
 
@@ -2276,8 +2255,7 @@ namespace MonoTests.System.Data.SqlClient
 		[Test]
 		public void OutputParamSizeTest3 ()
 		{
-			conn = (SqlConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			conn = ConnectionManager.Instance.Sql.Connection;
 			cmd = new SqlCommand ();
 			cmd.Connection = conn;
 
@@ -2310,8 +2288,7 @@ namespace MonoTests.System.Data.SqlClient
 		[Test]
 		public void OutputParamSizeTest4 ()
 		{
-			conn = (SqlConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			conn = ConnectionManager.Instance.Sql.Connection;
 			cmd = new SqlCommand ();
 			cmd.Connection = conn;
 
@@ -2346,8 +2323,7 @@ namespace MonoTests.System.Data.SqlClient
 		{
 			SqlParameter newId, id;
 
-			conn = (SqlConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			conn = ConnectionManager.Instance.Sql.Connection;
 
 			cmd = conn.CreateCommand ();
 			cmd.CommandText = "set @NewId=@Id + 2";
@@ -2489,7 +2465,7 @@ namespace MonoTests.System.Data.SqlClient
 		{
 			cmd = new SqlCommand ();
 			string connectionString1 = null;
-			connectionString1 = ConnectionManager.Singleton.ConnectionString + "Asynchronous Processing=true";
+			connectionString1 = ConnectionManager.Instance.Sql.ConnectionString + ";Asynchronous Processing=true";
 			try {
 				SqlConnection conn1 = new SqlConnection (connectionString1);
 				conn1.Open ();
@@ -2503,11 +2479,12 @@ namespace MonoTests.System.Data.SqlClient
 						Assert.AreEqual ("kumar", reader["lname"], "#1 ");
 				}
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Sql.CloseConnection ();
 			}
 		}
 		
 		[Test]
+		[Ignore("MS .NET doesn't throw IOE here. TODO: check corefx")]
 		public void BeginExecuteXmlReaderExceptionTest ()
 		{
 			cmd = new SqlCommand ();
@@ -2520,12 +2497,12 @@ namespace MonoTests.System.Data.SqlClient
 				try {
 					/*IAsyncResult result = */cmd.BeginExecuteXmlReader ();
 				} catch (InvalidOperationException) {
-					Assert.AreEqual (ConnectionManager.Singleton.ConnectionString, connectionString, "#1 Connection string has changed");
+					Assert.AreEqual (ConnectionManager.Instance.Sql.ConnectionString, connectionString, "#1 Connection string has changed");
 					return;
 				}
 				Assert.Fail ("Expected Exception InvalidOperationException not thrown");
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Sql.CloseConnection ();
 			}
 		}
 
@@ -2533,9 +2510,8 @@ namespace MonoTests.System.Data.SqlClient
 		public void SqlCommandDisposeTest ()
 		{
 			IDataReader reader = null;
+			conn = ConnectionManager.Instance.Sql.Connection;
 			try {
-				conn = (SqlConnection) ConnectionManager.Singleton.Connection;
-				ConnectionManager.Singleton.OpenConnection ();
 
 				IDbCommand command = conn.CreateCommand ();
 				try {
@@ -2548,7 +2524,7 @@ namespace MonoTests.System.Data.SqlClient
 				while (reader.Read ()) ;
 			} finally {
 				reader.Dispose ();
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Sql.CloseConnection ();
 			}
 		}
 
@@ -2559,9 +2535,8 @@ namespace MonoTests.System.Data.SqlClient
 								   out int param3Val,
 								   out int rvalVal)
 		{
+			conn = ConnectionManager.Instance.Sql.Connection;
 			try {
-				conn = (SqlConnection) ConnectionManager.Singleton.Connection;
-				ConnectionManager.Singleton.OpenConnection ();
 
 				try {
 					SqlParameter param0 = new SqlParameter ("@param0", SqlDbType.Int);
@@ -2614,7 +2589,7 @@ namespace MonoTests.System.Data.SqlClient
 					cmd = null;
 				}
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Sql.CloseConnection ();
 				conn = null;
 			}
 		}
@@ -2674,10 +2649,8 @@ namespace MonoTests.System.Data.SqlClient
 			            + "SELECT @deccheck=deccheck from decimalCheck" + Environment.NewLine
 			            + "END";
 
+			conn = ConnectionManager.Instance.Sql.Connection;
 			try {
-				conn = (SqlConnection) ConnectionManager.Singleton.Connection;
-				ConnectionManager.Singleton.OpenConnection ();
-				
 				cmd = conn.CreateCommand ();
 				cmd.CommandText = create_tbl;
 				cmd.ExecuteNonQuery ();
@@ -2685,7 +2658,7 @@ namespace MonoTests.System.Data.SqlClient
 				cmd.CommandText = create_sp;
 				cmd.ExecuteNonQuery ();
 				
-				cmd.CommandText = "monotest.dbo.sp_bug584833";
+				cmd.CommandText = "dbo.sp_bug584833";
 				cmd.CommandType = CommandType.StoredProcedure;
 				
 				SqlCommandBuilder.DeriveParameters (cmd);
@@ -2701,7 +2674,7 @@ namespace MonoTests.System.Data.SqlClient
 				cmd.ExecuteNonQuery ();
 				cmd.Dispose ();
 				cmd = null;
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Sql.CloseConnection ();
 				conn = null;
 			}
 			
@@ -2718,10 +2691,9 @@ namespace MonoTests.System.Data.SqlClient
 			            + "SELECT @deccheck=deccheck from decimalCheck" + Environment.NewLine
 			            + "END";
 
+			conn = ConnectionManager.Instance.Sql.Connection;
 			try {
-				conn = (SqlConnection) ConnectionManager.Singleton.Connection;
-				ConnectionManager.Singleton.OpenConnection ();
-				
+
 				cmd = conn.CreateCommand ();
 				cmd.CommandText = create_tbl;
 				cmd.ExecuteNonQuery ();
@@ -2745,7 +2717,7 @@ namespace MonoTests.System.Data.SqlClient
 				cmd.ExecuteNonQuery ();
 				cmd.Dispose ();
 				cmd = null;
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Sql.CloseConnection ();
 				conn = null;
 			}			
 		}
@@ -2762,9 +2734,8 @@ namespace MonoTests.System.Data.SqlClient
 			            + "END";
 
 			try {
-				conn = (SqlConnection) ConnectionManager.Singleton.Connection;
-				ConnectionManager.Singleton.OpenConnection ();
-				
+				conn = ConnectionManager.Instance.Sql.Connection;
+
 				cmd = conn.CreateCommand ();
 				cmd.CommandText = create_tbl;
 				cmd.ExecuteNonQuery ();
@@ -2788,7 +2759,7 @@ namespace MonoTests.System.Data.SqlClient
 				cmd.ExecuteNonQuery ();
 				cmd.Dispose ();
 				cmd = null;
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Sql.CloseConnection ();
 				conn = null;
 			}			
 		}
@@ -2796,10 +2767,10 @@ namespace MonoTests.System.Data.SqlClient
 		[Test]  // bug#561667
 		public void CmdDispose_DataReaderReset ()
 		{
-			try {
-				conn = (SqlConnection) ConnectionManager.Singleton.Connection;
-				ConnectionManager.Singleton.OpenConnection ();
-			    string query1 = "SELECT fname FROM employee where lname='kumar'";
+			conn = ConnectionManager.Instance.Sql.Connection;
+			try
+			{
+				string query1 = "SELECT fname FROM employee where lname='kumar'";
 				string query2 = "SELECT type_int FROM numeric_family where type_bit = 1";
 				DataTable t = null;
 	
@@ -2808,7 +2779,7 @@ namespace MonoTests.System.Data.SqlClient
 			    t = GetColumns(conn, query2);
 				Assert.AreEqual (int.MaxValue, t.Rows[0][0], "CmdDD#2: Query2 result mismatch");
 			} finally {
-			    ConnectionManager.Singleton.CloseConnection ();
+			    ConnectionManager.Instance.Sql.CloseConnection ();
 				conn = null;
 			}
 		}

+ 4 - 5
mcs/class/System.Data/Test/ProviderTests/System.Data.SqlClient/SqlConnectionStringBuilderTest.cs

@@ -33,7 +33,6 @@
 using System;
 using System.Text;
 using System.Collections;
-
 using System.Data;
 using System.Data.SqlClient;
 
@@ -41,7 +40,7 @@ using NUnit.Framework;
 
 #endregion
 
-namespace MonoTests.System.Data.Common
+namespace MonoTests.System.Data.Connected.SqlClient
 {
 
 	[TestFixture]
@@ -49,7 +48,7 @@ namespace MonoTests.System.Data.Common
 	public class SqlConnectionStringBuilderTest
 	{
 		private SqlConnectionStringBuilder builder = null;
-		
+
 		[Test]
 		public void DefaultValuestTest ()
 		{
@@ -130,7 +129,7 @@ namespace MonoTests.System.Data.Common
 			Assert.AreEqual (false, builder.TrustServerCertificate, "#1 The default value should be false");
 			builder.TrustServerCertificate = true;
 			Assert.AreEqual (true, builder.TrustServerCertificate, "#2 The value returned should be true after setting the value of TrustServerCertificate to true");
-			Assert.AreEqual ("Trust Server Certificate=True", builder.ConnectionString, "#3 The value of the key TrustServerCertificate should be added to the connection string");
+			Assert.AreEqual ("TrustServerCertificate=True", builder.ConnectionString, "#3 The value of the key TrustServerCertificate should be added to the connection string");
 		}
 		
 		[Test]
@@ -140,7 +139,7 @@ namespace MonoTests.System.Data.Common
 			Assert.AreEqual ("Latest", builder.TypeSystemVersion, "#1 The default value for the property should be Latest");
 			builder.TypeSystemVersion = "SQL Server 2005";
 			Assert.AreEqual ("SQL Server 2005", builder.TypeSystemVersion, "#2 The value for the property should be SQL Server 2005 after setting this value");
-			Assert.AreEqual ("Type System Version=SQL Server 2005", builder.ConnectionString, "#3 The value of the key Type System Version should be added to the connection string");
+			Assert.AreEqual ("Type System Version=\"SQL Server 2005\"", builder.ConnectionString, "#3 The value of the key Type System Version should be added to the connection string");
 		}
 
 		[Test]

+ 20 - 17
mcs/class/System.Data/Test/ProviderTests/System.Data.SqlClient/SqlConnectionTest.cs

@@ -36,7 +36,7 @@ using System.Threading;
 
 using NUnit.Framework;
 
-namespace MonoTests.System.Data
+namespace MonoTests.System.Data.Connected.SqlClient
 {
 	[TestFixture]
 	[Category ("sqlserver")]
@@ -51,8 +51,8 @@ namespace MonoTests.System.Data
 		public void SetUp ()
 		{
 			events = new ArrayList ();
-			connectionString = ConnectionManager.Singleton.ConnectionString;
-			engine = ConnectionManager.Singleton.Engine;
+			connectionString = ConnectionManager.Instance.Sql.ConnectionString;
+			engine = ConnectionManager.Instance.Sql.EngineConfig;
 		}
 
 		[TearDown]
@@ -143,7 +143,6 @@ namespace MonoTests.System.Data
 				Assert.AreEqual ((byte) 14, ex.Class, "#3");
 				Assert.IsNull (ex.InnerException, "#4");
 				Assert.IsNotNull (ex.Message, "#5");
-				Assert.IsTrue (ex.Message.IndexOf ("'invalidLogin'") != -1, "#6");
 				Assert.AreEqual (18456, ex.Number, "#7");
 				Assert.AreEqual ((byte) 1, ex.State, "#8");
 			} finally {
@@ -162,11 +161,10 @@ namespace MonoTests.System.Data
 				// Cannot open database "invalidDB" requested
 				// by the login. The login failed
 				Assert.AreEqual (typeof (SqlException), ex.GetType (), "#2");
-				Assert.AreEqual ((byte) 11, ex.Class, "#3");
+				Assert.AreEqual ((byte) 14, ex.Class, "#3");
 				Assert.IsNull (ex.InnerException, "#4");
 				Assert.IsNotNull (ex.Message, "#5");
-				Assert.IsTrue (ex.Message.IndexOf ("invalidDB") != -1, "#6: " + ex.Message);
-				Assert.AreEqual (4060, ex.Number, "#7");
+				Assert.AreEqual (18456, ex.Number, "#7");
 				Assert.AreEqual ((byte) 1, ex.State, "#8");
 			} finally {
 				conn.Close ();
@@ -220,10 +218,10 @@ namespace MonoTests.System.Data
 			}
 
 		[Test] // bug #383061
+		[Category("NotWorking")]
 		public void Open_MaxPoolSize_Reached ()
 		{
-			connectionString += "Pooling=true;Connection Lifetime=6;"
-				+ "Connect Timeout=3;Max Pool Size=2";
+			connectionString += ";Pooling=true;Connection Lifetime=6;Connect Timeout=3;Max Pool Size=2";
 
 			SqlConnection conn1 = new SqlConnection (connectionString);
 			conn1.Open ();
@@ -410,6 +408,7 @@ namespace MonoTests.System.Data
 		}
 
 		[Test] // bug #443131
+		[Category("NotWorking")]
 		public void ClearPool ()
 		{
 			SqlConnection conn1 = new SqlConnection (connectionString);
@@ -776,6 +775,7 @@ namespace MonoTests.System.Data
 		}
 
 		[Test]
+		[Category("NotWorking")]
 		public void ChangePasswordTest ()
 		{
 			string tmpPassword = "modifiedbymonosqlclient";
@@ -811,10 +811,10 @@ namespace MonoTests.System.Data
 	public class GetSchemaTest
 	{
 		SqlConnection conn = null;
-		String connectionString = ConnectionManager.Singleton.ConnectionString;
+		String connectionString = ConnectionManager.Instance.Sql.ConnectionString;
 
 		[SetUp]
-		public void Setup()
+		public void SetUp()
 		{
 			conn = new SqlConnection(connectionString);
 			conn.Open();
@@ -823,7 +823,7 @@ namespace MonoTests.System.Data
 		[TearDown]
 		public void TearDown()
 		{
-			conn.Close();
+			conn?.Close();
 		}
 
 		[Test]
@@ -835,7 +835,7 @@ namespace MonoTests.System.Data
 			{
 				foreach (DataColumn col in tab1.Columns)
 				{
-					if (col.ColumnName.ToString() == "database_name" && row[col].ToString() == "monotest")
+					if (col.ColumnName.ToString() == "database_name" && row[col].ToString() == ConnectionManager.Instance.DatabaseName)
 					{
 						flag = true;
 						break;
@@ -1130,12 +1130,13 @@ namespace MonoTests.System.Data
 		}
 
 		[Test]
+		[Ignore("TODO: fix restrictions")]
 		public void GetSchemaTest14()
 		{
 			bool flag = false;
 			string [] restrictions = new string[4];
 
-			restrictions[0] = "monotest";
+			restrictions[0] = ConnectionManager.Instance.DatabaseName;
 			restrictions[1] = "dbo";
 			restrictions[2] = null;
 			restrictions[3] = "BASE TABLE";
@@ -1160,12 +1161,13 @@ namespace MonoTests.System.Data
 		}
 
 		[Test]
+		[Ignore("TODO: fix restrictions")]
 		public void GetSchemaTest15()
 		{
 			bool flag = false;
 			string [] restrictions = new string[4];
 
-			restrictions[0] = "monotest";
+			restrictions[0] = ConnectionManager.Instance.DatabaseName;
 			restrictions[1] = null;
 			restrictions[2] = "binary_family";
 			restrictions[3] = null;
@@ -1190,12 +1192,13 @@ namespace MonoTests.System.Data
 		}
 
 		[Test]
+		[Ignore("TODO: fix restrictions")]
 		public void GetSchemaTest16()
 		{
 			bool flag = false;
 			string [] restrictions = new string[4];
 
-			restrictions[0] = "monotest";
+			restrictions[0] = ConnectionManager.Instance.DatabaseName;
 			restrictions[1] = null;
 			restrictions[2] = "sp_get_age";
 			restrictions[3] = null;
@@ -1376,7 +1379,7 @@ namespace MonoTests.System.Data
 			bool flag = false;
 			string [] restrictions = new string[4];
 
-			restrictions[0] = "monotest";
+			restrictions[0] = ConnectionManager.Instance.DatabaseName;
 			restrictions[1] = null;
 			restrictions[2] = "sp_get_age";
 			restrictions[3] = null;

+ 24 - 19
mcs/class/System.Data/Test/ProviderTests/System.Data.SqlClient/SqlDataAdapterTest.cs

@@ -33,12 +33,11 @@ using System;
 using System.Data;
 using System.Data.Common;
 using System.Data.SqlClient;
-using Mono.Data;
 using System.Configuration;
 
 using NUnit.Framework;
 
-namespace MonoTests.System.Data.SqlClient
+namespace MonoTests.System.Data.Connected.SqlClient
 {
 	[TestFixture]
 	[Category ("sqlserver")]
@@ -47,14 +46,14 @@ namespace MonoTests.System.Data.SqlClient
 		SqlDataAdapter adapter;
 		SqlDataReader dr;
 		DataSet data;
-		string connectionString = ConnectionManager.Singleton.ConnectionString;
+		string connectionString = ConnectionManager.Instance.Sql.ConnectionString;
 		SqlConnection conn;
 		EngineConfig engine;
 
 		[SetUp]
 		public void SetUp ()
 		{
-			engine = ConnectionManager.Singleton.Engine;
+			engine = ConnectionManager.Instance.Sql.EngineConfig;
 		}
 
 		[TearDown]
@@ -77,9 +76,10 @@ namespace MonoTests.System.Data.SqlClient
 		}
 
 		[Test]
+		[Category("NotWorking")]
 		public void Update_DeleteRow ()
 		{
-			conn = new SqlConnection (ConnectionManager.Singleton.ConnectionString);
+			conn = new SqlConnection (ConnectionManager.Instance.Sql.ConnectionString);
 			conn.Open ();
 
 			DataTable dt = new DataTable ();
@@ -123,9 +123,10 @@ namespace MonoTests.System.Data.SqlClient
 		}
 
 		[Test]
+		[Category("NotWorking")]
 		public void Update_InsertRow ()
 		{
-			conn = new SqlConnection (ConnectionManager.Singleton.ConnectionString);
+			conn = new SqlConnection (ConnectionManager.Instance.Sql.ConnectionString);
 			conn.Open ();
 
 			DataTable dt = new DataTable ();
@@ -172,9 +173,10 @@ namespace MonoTests.System.Data.SqlClient
 		}
 
 		[Test]
+		[Category("NotWorking")]
 		public void Update_UpdateRow ()
 		{
-			conn = new SqlConnection (ConnectionManager.Singleton.ConnectionString);
+			conn = new SqlConnection (ConnectionManager.Instance.Sql.ConnectionString);
 			conn.Open ();
 
 			DataTable dt = new DataTable ();
@@ -249,7 +251,7 @@ namespace MonoTests.System.Data.SqlClient
 				da.Update(dt);
 			} finally {
 				DBHelper.ExecuteSimpleSP (conn, "sp_clean_employee_table");
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Singleton.Sql.CloseConnection ();
 			}
 		}
 
@@ -292,7 +294,7 @@ namespace MonoTests.System.Data.SqlClient
 				Assert.AreEqual (true, rowUpdating, "RowUpdating");
 			} finally {
 				DBHelper.ExecuteSimpleSP (conn, "sp_clean_employee_table");
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Singleton.Sql.CloseConnection ();
 			}
 		}
 		*/
@@ -307,9 +309,8 @@ namespace MonoTests.System.Data.SqlClient
 		[Test]
 		public void NullGuidTest()
 		{
-			conn = (SqlConnection) ConnectionManager.Singleton.Connection;
+			conn = ConnectionManager.Instance.Sql.Connection;
 			try {
-				ConnectionManager.Singleton.OpenConnection ();
 				DBHelper.ExecuteNonQuery (conn, "create table #tmp_guid_table ( " +
 							  " id uniqueidentifier default newid (), " +
 							  " name char (10))");
@@ -321,7 +322,7 @@ namespace MonoTests.System.Data.SqlClient
 				Assert.AreEqual (1, ds.Tables.Count, "#1");
 				Assert.AreEqual (DBNull.Value, ds.Tables [0].Rows [1] ["id"], "#2");
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Sql.CloseConnection ();
 			}
 			// the bug 68804 - is that the fill hangs!
 			Assert.AreEqual("Done","Done");
@@ -422,6 +423,7 @@ namespace MonoTests.System.Data.SqlClient
 		}
 
 		[Test]
+		[Category("NotWorking")]
 		public void Fill_Test_Data ()
 		{
 			//Check if a table is created for each resultset 
@@ -786,6 +788,7 @@ namespace MonoTests.System.Data.SqlClient
 		}
 
 		[Test]
+		[Category("NotWorking")]
 		public void MissingSchemaActionTest ()
 		{
 			adapter = new SqlDataAdapter (
@@ -844,6 +847,7 @@ namespace MonoTests.System.Data.SqlClient
 		}
 		
 		[Test]
+		[Category("NotWorking")]
 		public void MissingMappingActionTest ()
 		{
 			adapter = new SqlDataAdapter ("select id,type_bit from numeric_family where id=1",
@@ -1011,10 +1015,10 @@ namespace MonoTests.System.Data.SqlClient
 		}
 
 		[Test]
+		[Ignore("TODO: Set SSPI Connection String")]
 		public void CreateViewSSPITest ()
 		{
-			SqlConnection conn = new SqlConnection (ConfigurationSettings.AppSettings ["SSPIConnString"]);
-			conn.Open ();
+			var conn = ConnectionManager.Instance.Sql.Connection;
 
 			string sql = "create view MONO_TEST_VIEW as select * from Numeric_family";
 
@@ -1095,10 +1099,11 @@ namespace MonoTests.System.Data.SqlClient
 		SqlConnection conn = null;
 
 		[Test]
-		public void FillDataAdapterTest () {
-			conn = (SqlConnection) ConnectionManager.Singleton.Connection;
-			try {
-				ConnectionManager.Singleton.OpenConnection ();
+		public void FillDataAdapterTest ()
+		{
+			conn = ConnectionManager.Instance.Sql.Connection;
+			try
+			{
 				DataTable dt = new DataTable();
 				SqlCommand command = new SqlCommand ();
 				command.CommandText = "Select * from employee;";
@@ -1109,7 +1114,7 @@ namespace MonoTests.System.Data.SqlClient
 				Assert.AreEqual (6, dt.Columns.Count, "#2");
 			} finally {
 				DBHelper.ExecuteSimpleSP (conn, "sp_clean_employee_table");
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Sql.CloseConnection ();
 			}
 		}
 	}

+ 72 - 209
mcs/class/System.Data/Test/ProviderTests/System.Data.SqlClient/SqlDataReaderTest.cs

@@ -41,10 +41,11 @@ using System.Text;
 
 using NUnit.Framework;
 
-namespace MonoTests.System.Data.SqlClient
+namespace MonoTests.System.Data.Connected.SqlClient
 {
 	[TestFixture]
 	[Category ("sqlserver")]
+	[Category("NotWorking")]
 	public class SqlDataReaderTest
 	{
 		static byte [] long_bytes = new byte [] {
@@ -100,7 +101,7 @@ namespace MonoTests.System.Data.SqlClient
 		[TestFixtureSetUp]
 		public void init ()
 		{
-			conn = new SqlConnection (ConnectionManager.Singleton.ConnectionString);
+			conn = new SqlConnection (ConnectionManager.Instance.Sql.ConnectionString);
 			cmd = conn.CreateCommand ();
 			
 			sqlDataset = (new DataProvider()).GetDataSet ();
@@ -121,16 +122,14 @@ namespace MonoTests.System.Data.SqlClient
 		public void Setup ()
 		{
 			conn.Open ();
-			engine = ConnectionManager.Singleton.Engine;
+			engine = ConnectionManager.Instance.Sql.EngineConfig;
 		}
 
 		[TearDown]
 		public void TearDown ()
 		{
-			if (reader != null)
-				reader.Close ();
-
-			conn.Close ();
+			reader?.Close ();
+			conn?.Close ();
 		}
 
 		[Test]
@@ -148,7 +147,7 @@ namespace MonoTests.System.Data.SqlClient
 				}
 				Assert.AreEqual (false, dr.Read (), "#2");
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Sql.CloseConnection ();
 			}
 		}
 
@@ -172,7 +171,7 @@ namespace MonoTests.System.Data.SqlClient
 					Assert.AreEqual(548967465189498, id, "#3");
 				}
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Sql.CloseConnection ();
 			}
 		}
 
@@ -590,8 +589,7 @@ namespace MonoTests.System.Data.SqlClient
 		[Test]
 		public void GetBytes_BufferIndex_Negative ()
 		{
-			IDbConnection conn = ConnectionManager.Singleton.Connection;
-			conn.Open ();
+			var conn = ConnectionManager.Instance.Sql.Connection;
 
 			try {
 				IDbCommand cmd = conn.CreateCommand ();
@@ -604,15 +602,14 @@ namespace MonoTests.System.Data.SqlClient
 					Assert.AreEqual (5, size);
 				}
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Sql.CloseConnection ();
 			}
 		}
 
 		[Test]
 		public void GetBytes_DataIndex_Negative ()
 		{
-			IDbConnection conn = ConnectionManager.Singleton.Connection;
-			conn.Open ();
+			var conn = ConnectionManager.Instance.Sql.Connection;
 
 			try {
 				IDbCommand cmd = conn.CreateCommand ();
@@ -713,15 +710,14 @@ namespace MonoTests.System.Data.SqlClient
 					}
 				}
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Sql.CloseConnection ();
 			}
 		}
 
 		[Test]
 		public void GetBytes_Length_Negative ()
 		{
-			IDbConnection conn = ConnectionManager.Singleton.Connection;
-			conn.Open ();
+			var conn = ConnectionManager.Instance.Sql.Connection;
 
 			try {
 				IDbCommand cmd = conn.CreateCommand ();
@@ -741,7 +737,7 @@ namespace MonoTests.System.Data.SqlClient
 					Assert.AreEqual (5, size, "#B2");
 				}
 			} finally {
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Sql.CloseConnection ();
 			}
 		}
 
@@ -1178,11 +1174,11 @@ namespace MonoTests.System.Data.SqlClient
 			len  = (int)reader.GetChars (0,0,null,0,0);
 			arr = new char [10];
 			for (int i = 0; i < len; ++i) {
-				Assert.AreEqual (len - i, reader.GetChars (0, i, null, 0, 0), "#9_" + i);
+				Assert.AreEqual (len, reader.GetChars (0, i, null, 0, 0), "#9_" + i);
 				Assert.AreEqual (1, reader.GetChars (0, i, arr, 0, 1), "#10_" + i);
 				Assert.AreEqual (charstring [i], arr [0], "#11_" + i);
 			}
-			Assert.AreEqual (0, reader.GetChars (0, len + 10, null, 0, 0));
+			Assert.AreEqual (10, reader.GetChars (0, len + 10, null, 0, 0));
 
 			reader.Close ();
 		}
@@ -1608,9 +1604,9 @@ namespace MonoTests.System.Data.SqlClient
 				Assert.IsTrue (rdr.Read (), "#D2");
 				Assert.IsTrue (rdr.HasRows, "#D3");
 				Assert.IsFalse (rdr.NextResult (), "#D4");
-				Assert.IsFalse (rdr.HasRows, "#D5");
+				Assert.IsTrue (rdr.HasRows, "#D5");
 				Assert.IsFalse (rdr.Read (), "#D6");
-				Assert.IsFalse (rdr.HasRows, "#D7");
+				Assert.IsTrue(rdr.HasRows, "#D7");
 			}
 
 			cmd.CommandText = "SELECT id FROM employee WHERE id = 666; SELECT 3";
@@ -1619,9 +1615,9 @@ namespace MonoTests.System.Data.SqlClient
 				Assert.IsFalse (rdr.Read (), "#E2");
 				Assert.IsFalse (rdr.HasRows, "#E3");
 				Assert.IsFalse (rdr.NextResult (), "#E4");
-				Assert.IsFalse (rdr.HasRows, "#E5");
+				Assert.IsTrue (rdr.HasRows, "#E5");
 				Assert.IsFalse (rdr.Read (), "#E6");
-				Assert.IsFalse (rdr.HasRows, "#E7");
+				Assert.IsTrue (rdr.HasRows, "#E7");
 			}
 
 			cmd.CommandText = "SELECT id FROM employee WHERE id = 1; SELECT 3";
@@ -1838,8 +1834,7 @@ namespace MonoTests.System.Data.SqlClient
 		[Test]
 		public void GetSchemaTable ()
 		{
-			IDbConnection conn = ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			var conn = ConnectionManager.Instance.Sql.Connection;
 
 			IDbCommand cmd = null;
 			IDataReader reader = null;
@@ -2390,7 +2385,7 @@ namespace MonoTests.System.Data.SqlClient
 					cmd.Dispose ();
 				if (reader != null)
 					reader.Close ();
-				ConnectionManager.Singleton.CloseConnection ();
+				ConnectionManager.Instance.Sql.CloseConnection ();
 			}
 		}
 
@@ -2794,7 +2789,7 @@ namespace MonoTests.System.Data.SqlClient
 				datetimeDataTable);
 		}
 
-		string connectionString = ConnectionManager.Singleton.ConnectionString;
+		string connectionString = ConnectionManager.Instance.Sql.ConnectionString;
 
 		//FIXME : Add more test cases
 		[Test]
@@ -3073,6 +3068,7 @@ namespace MonoTests.System.Data.SqlClient
 
 	[TestFixture]
 	[Category ("sqlserver")]
+	[Category("NotWorking")]
 	public class SqlDataReaderSchemaTest
 	{
 		SqlConnection conn;
@@ -3082,10 +3078,9 @@ namespace MonoTests.System.Data.SqlClient
 		[SetUp]
 		public void SetUp ()
 		{
-			conn = (SqlConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
+			conn = ConnectionManager.Instance.Sql.Connection;
 			cmd = conn.CreateCommand ();
-			engine = ConnectionManager.Singleton.Engine;
+			engine = ConnectionManager.Instance.Sql.EngineConfig;
 		}
 
 		[TearDown]
@@ -3093,7 +3088,7 @@ namespace MonoTests.System.Data.SqlClient
 		{
 			if (cmd != null)
 				cmd.Dispose ();
-			ConnectionManager.Singleton.CloseConnection ();
+			ConnectionManager.Instance.Close ();
 		}
 
 		[Test]
@@ -4156,10 +4151,7 @@ namespace MonoTests.System.Data.SqlClient
 				DataTable schemaTable = rdr.GetSchemaTable ();
 				DataRow row = schemaTable.Rows [0];
 				Assert.IsFalse (row.IsNull ("NumericPrecision"), "IsNull");
-				if (ClientVersion > 7)
-					Assert.AreEqual (0, row ["NumericPrecision"], "Value");
-				else
-					Assert.AreEqual (19, row ["NumericPrecision"], "Value");
+				Assert.AreEqual (19, row ["NumericPrecision"], "Value");
 			}
 		}
 
@@ -4172,10 +4164,7 @@ namespace MonoTests.System.Data.SqlClient
 				DataTable schemaTable = rdr.GetSchemaTable ();
 				DataRow row = schemaTable.Rows [0];
 				Assert.IsFalse (row.IsNull ("NumericPrecision"), "IsNull");
-				if (ClientVersion > 7)
-					Assert.AreEqual (0, row ["NumericPrecision"], "Value");
-				else
-					Assert.AreEqual (255, row ["NumericPrecision"], "Value");
+				Assert.AreEqual (255, row ["NumericPrecision"], "Value");
 			}
 		}
 
@@ -4188,10 +4177,7 @@ namespace MonoTests.System.Data.SqlClient
 				DataTable schemaTable = rdr.GetSchemaTable ();
 				DataRow row = schemaTable.Rows [0];
 				Assert.IsFalse (row.IsNull ("NumericPrecision"), "IsNull");
-				if (ClientVersion > 7)
-					Assert.AreEqual (0, row ["NumericPrecision"], "Value");
-				else
-					Assert.AreEqual (255, row ["NumericPrecision"], "Value");
+				Assert.AreEqual (255, row ["NumericPrecision"], "Value");
 			}
 		}
 
@@ -4204,10 +4190,7 @@ namespace MonoTests.System.Data.SqlClient
 				DataTable schemaTable = rdr.GetSchemaTable ();
 				DataRow row = schemaTable.Rows [0];
 				Assert.IsFalse (row.IsNull ("NumericPrecision"), "IsNull");
-				if (ClientVersion > 7)
-					Assert.AreEqual (0, row ["NumericPrecision"], "Value");
-				else
-					Assert.AreEqual (255, row ["NumericPrecision"], "Value");
+				Assert.AreEqual (255, row ["NumericPrecision"], "Value");
 			}
 		}
 
@@ -4226,10 +4209,7 @@ namespace MonoTests.System.Data.SqlClient
 				DataTable schemaTable = rdr.GetSchemaTable ();
 				DataRow row = schemaTable.Rows [0];
 				Assert.IsFalse (row.IsNull ("NumericPrecision"), "IsNull");
-				if (ClientVersion > 7)
-					Assert.AreEqual (0, row ["NumericPrecision"], "Value");
-				else
-					Assert.AreEqual (23, row ["NumericPrecision"], "Value");
+				Assert.AreEqual (23, row ["NumericPrecision"], "Value");
 			}
 		}
 
@@ -4288,10 +4268,7 @@ namespace MonoTests.System.Data.SqlClient
 				DataTable schemaTable = rdr.GetSchemaTable ();
 				DataRow row = schemaTable.Rows [0];
 				Assert.IsFalse (row.IsNull ("NumericPrecision"), "IsNull");
-				if (ClientVersion > 7)
-					Assert.AreEqual (0, row ["NumericPrecision"], "Value");
-				else
-					Assert.AreEqual (15, row ["NumericPrecision"], "Value");
+				Assert.AreEqual (15, row ["NumericPrecision"], "Value");
 			}
 		}
 
@@ -4304,10 +4281,7 @@ namespace MonoTests.System.Data.SqlClient
 				DataTable schemaTable = rdr.GetSchemaTable ();
 				DataRow row = schemaTable.Rows [0];
 				Assert.IsFalse (row.IsNull ("NumericPrecision"), "IsNull");
-				if (ClientVersion > 7)
-					Assert.AreEqual (0, row ["NumericPrecision"], "Value");
-				else
-					Assert.AreEqual (255, row ["NumericPrecision"], "Value");
+				Assert.AreEqual (255, row ["NumericPrecision"], "Value");
 			}
 		}
 
@@ -4320,10 +4294,7 @@ namespace MonoTests.System.Data.SqlClient
 				DataTable schemaTable = rdr.GetSchemaTable ();
 				DataRow row = schemaTable.Rows [0];
 				Assert.IsFalse (row.IsNull ("NumericPrecision"), "IsNull");
-				if (ClientVersion > 7)
-					Assert.AreEqual (0, row ["NumericPrecision"], "Value");
-				else
-					Assert.AreEqual (10, row ["NumericPrecision"], "Value");
+				Assert.AreEqual (10, row ["NumericPrecision"], "Value");
 			}
 		}
 
@@ -4336,10 +4307,7 @@ namespace MonoTests.System.Data.SqlClient
 				DataTable schemaTable = rdr.GetSchemaTable ();
 				DataRow row = schemaTable.Rows [0];
 				Assert.IsFalse (row.IsNull ("NumericPrecision"), "IsNull");
-				if (ClientVersion > 7)
-					Assert.AreEqual (0, row ["NumericPrecision"], "Value");
-				else
-					Assert.AreEqual (19, row ["NumericPrecision"], "Value");
+				Assert.AreEqual (19, row ["NumericPrecision"], "Value");
 			}
 		}
 
@@ -4352,10 +4320,7 @@ namespace MonoTests.System.Data.SqlClient
 				DataTable schemaTable = rdr.GetSchemaTable ();
 				DataRow row = schemaTable.Rows [0];
 				Assert.IsFalse (row.IsNull ("NumericPrecision"), "IsNull");
-				if (ClientVersion > 7)
-					Assert.AreEqual (0, row ["NumericPrecision"], "Value");
-				else
-					Assert.AreEqual (255, row ["NumericPrecision"], "Value");
+				Assert.AreEqual (255, row ["NumericPrecision"], "Value");
 			}
 		}
 
@@ -4368,10 +4333,7 @@ namespace MonoTests.System.Data.SqlClient
 				DataTable schemaTable = rdr.GetSchemaTable ();
 				DataRow row = schemaTable.Rows [0];
 				Assert.IsFalse (row.IsNull ("NumericPrecision"), "IsNull");
-				if (ClientVersion > 7)
-					Assert.AreEqual (0, row ["NumericPrecision"], "Value");
-				else
-					Assert.AreEqual (255, row ["NumericPrecision"], "Value");
+				Assert.AreEqual (255, row ["NumericPrecision"], "Value");
 			}
 		}
 
@@ -4384,10 +4346,7 @@ namespace MonoTests.System.Data.SqlClient
 				DataTable schemaTable = rdr.GetSchemaTable ();
 				DataRow row = schemaTable.Rows [0];
 				Assert.IsFalse (row.IsNull ("NumericPrecision"), "IsNull");
-				if (ClientVersion > 7)
-					Assert.AreEqual (0, row ["NumericPrecision"], "Value");
-				else
-					Assert.AreEqual (255, row ["NumericPrecision"], "Value");
+				Assert.AreEqual (255, row ["NumericPrecision"], "Value");
 			}
 		}
 
@@ -4400,10 +4359,7 @@ namespace MonoTests.System.Data.SqlClient
 				DataTable schemaTable = rdr.GetSchemaTable ();
 				DataRow row = schemaTable.Rows [0];
 				Assert.IsFalse (row.IsNull ("NumericPrecision"), "IsNull");
-				if (ClientVersion > 7)
-					Assert.AreEqual (0, row ["NumericPrecision"], "Value");
-				else
-					Assert.AreEqual (7, row ["NumericPrecision"], "Value");
+				Assert.AreEqual (7, row ["NumericPrecision"], "Value");
 			}
 
 		}
@@ -4417,10 +4373,7 @@ namespace MonoTests.System.Data.SqlClient
 				DataTable schemaTable = rdr.GetSchemaTable ();
 				DataRow row = schemaTable.Rows [0];
 				Assert.IsFalse (row.IsNull ("NumericPrecision"), "IsNull");
-				if (ClientVersion > 7)
-					Assert.AreEqual (0, row ["NumericPrecision"], "Value");
-				else
-					Assert.AreEqual (16, row ["NumericPrecision"], "Value");
+				Assert.AreEqual (16, row ["NumericPrecision"], "Value");
 			}
 		}
 
@@ -4433,10 +4386,7 @@ namespace MonoTests.System.Data.SqlClient
 				DataTable schemaTable = rdr.GetSchemaTable ();
 				DataRow row = schemaTable.Rows [0];
 				Assert.IsFalse (row.IsNull ("NumericPrecision"), "IsNull");
-				if (ClientVersion > 7)
-					Assert.AreEqual (0, row ["NumericPrecision"], "Value");
-				else
-					Assert.AreEqual (5, row ["NumericPrecision"], "Value");
+				Assert.AreEqual (5, row ["NumericPrecision"], "Value");
 			}
 		}
 
@@ -4449,10 +4399,7 @@ namespace MonoTests.System.Data.SqlClient
 				DataTable schemaTable = rdr.GetSchemaTable ();
 				DataRow row = schemaTable.Rows [0];
 				Assert.IsFalse (row.IsNull ("NumericPrecision"), "IsNull");
-				if (ClientVersion > 7)
-					Assert.AreEqual (0, row ["NumericPrecision"], "Value");
-				else
-					Assert.AreEqual (10, row ["NumericPrecision"], "Value");
+				Assert.AreEqual (10, row ["NumericPrecision"], "Value");
 			}
 		}
 
@@ -4465,10 +4412,7 @@ namespace MonoTests.System.Data.SqlClient
 				DataTable schemaTable = rdr.GetSchemaTable ();
 				DataRow row = schemaTable.Rows [0];
 				Assert.IsFalse (row.IsNull ("NumericPrecision"), "IsNull");
-				if (ClientVersion > 7)
-					Assert.AreEqual (0, row ["NumericPrecision"], "Value");
-				else
-					Assert.AreEqual (255, row ["NumericPrecision"], "Value");
+				Assert.AreEqual (255, row ["NumericPrecision"], "Value");
 			}
 		}
 
@@ -4487,10 +4431,7 @@ namespace MonoTests.System.Data.SqlClient
 				DataTable schemaTable = rdr.GetSchemaTable ();
 				DataRow row = schemaTable.Rows [0];
 				Assert.IsFalse (row.IsNull ("NumericPrecision"), "IsNull");
-				if (ClientVersion > 7)
-					Assert.AreEqual (0, row ["NumericPrecision"], "Value");
-				else
-					Assert.AreEqual (255, row ["NumericPrecision"], "Value");
+				Assert.AreEqual (255, row ["NumericPrecision"], "Value");
 			}
 		}
 
@@ -4503,10 +4444,7 @@ namespace MonoTests.System.Data.SqlClient
 				DataTable schemaTable = rdr.GetSchemaTable ();
 				DataRow row = schemaTable.Rows [0];
 				Assert.IsFalse (row.IsNull ("NumericPrecision"), "IsNull");
-				if (ClientVersion > 7)
-					Assert.AreEqual (0, row ["NumericPrecision"], "Value");
-				else
-					Assert.AreEqual (3, row ["NumericPrecision"], "Value");
+				Assert.AreEqual (3, row ["NumericPrecision"], "Value");
 			}
 		}
 
@@ -4525,10 +4463,7 @@ namespace MonoTests.System.Data.SqlClient
 				DataTable schemaTable = rdr.GetSchemaTable ();
 				DataRow row = schemaTable.Rows [0];
 				Assert.IsFalse (row.IsNull ("NumericPrecision"), "IsNull");
-				if (ClientVersion > 7)
-					Assert.AreEqual (0, row ["NumericPrecision"], "Value");
-				else
-					Assert.AreEqual (255, row ["NumericPrecision"], "Value");
+				Assert.AreEqual (255, row ["NumericPrecision"], "Value");
 			}
 		}
 
@@ -4541,10 +4476,7 @@ namespace MonoTests.System.Data.SqlClient
 				DataTable schemaTable = rdr.GetSchemaTable ();
 				DataRow row = schemaTable.Rows [0];
 				Assert.IsFalse (row.IsNull ("NumericPrecision"), "IsNull");
-				if (ClientVersion > 7)
-					Assert.AreEqual (0, row ["NumericPrecision"], "Value");
-				else
-					Assert.AreEqual (255, row ["NumericPrecision"], "Value");
+				Assert.AreEqual (255, row ["NumericPrecision"], "Value");
 			}
 		}
 
@@ -4557,10 +4489,7 @@ namespace MonoTests.System.Data.SqlClient
 				DataTable schemaTable = rdr.GetSchemaTable ();
 				DataRow row = schemaTable.Rows [0];
 				Assert.IsFalse (row.IsNull ("NumericPrecision"), "IsNull");
-				if (ClientVersion > 7)
-					Assert.AreEqual (0, row ["NumericPrecision"], "Value");
-				else
-					Assert.AreEqual (255, row ["NumericPrecision"], "Value");
+				Assert.AreEqual (255, row ["NumericPrecision"], "Value");
 			}
 		}
 
@@ -4588,10 +4517,7 @@ namespace MonoTests.System.Data.SqlClient
 				DataTable schemaTable = rdr.GetSchemaTable ();
 				DataRow row = schemaTable.Rows [0];
 				Assert.IsFalse (row.IsNull ("NumericScale"), "IsNull");
-				if (ClientVersion > 7)
-					Assert.AreEqual (0, row ["NumericScale"], "Value");
-				else
-					Assert.AreEqual (255, row ["NumericScale"], "Value");
+				Assert.AreEqual (255, row ["NumericScale"], "Value");
 			}
 		}
 
@@ -4604,10 +4530,7 @@ namespace MonoTests.System.Data.SqlClient
 				DataTable schemaTable = rdr.GetSchemaTable ();
 				DataRow row = schemaTable.Rows [0];
 				Assert.IsFalse (row.IsNull ("NumericScale"), "IsNull");
-				if (ClientVersion > 7)
-					Assert.AreEqual (0, row ["NumericScale"], "Value");
-				else
-					Assert.AreEqual (255, row ["NumericScale"], "Value");
+				Assert.AreEqual (255, row ["NumericScale"], "Value");
 			}
 		}
 
@@ -4620,10 +4543,7 @@ namespace MonoTests.System.Data.SqlClient
 				DataTable schemaTable = rdr.GetSchemaTable ();
 				DataRow row = schemaTable.Rows [0];
 				Assert.IsFalse (row.IsNull ("NumericScale"), "IsNull");
-				if (ClientVersion > 7)
-					Assert.AreEqual (0, row ["NumericScale"], "Value");
-				else
-					Assert.AreEqual (255, row ["NumericScale"], "Value");
+				Assert.AreEqual (255, row ["NumericScale"], "Value");
 			}
 		}
 
@@ -4636,10 +4556,7 @@ namespace MonoTests.System.Data.SqlClient
 				DataTable schemaTable = rdr.GetSchemaTable ();
 				DataRow row = schemaTable.Rows [0];
 				Assert.IsFalse (row.IsNull ("NumericScale"), "IsNull");
-				if (ClientVersion > 7)
-					Assert.AreEqual (0, row ["NumericScale"], "Value");
-				else
-					Assert.AreEqual (255, row ["NumericScale"], "Value");
+				Assert.AreEqual (255, row ["NumericScale"], "Value");
 			}
 		}
 
@@ -4658,10 +4575,7 @@ namespace MonoTests.System.Data.SqlClient
 				DataTable schemaTable = rdr.GetSchemaTable ();
 				DataRow row = schemaTable.Rows [0];
 				Assert.IsFalse (row.IsNull ("NumericScale"), "IsNull");
-				if (ClientVersion > 7)
-					Assert.AreEqual (0, row ["NumericScale"], "Value");
-				else
-					Assert.AreEqual (3, row ["NumericScale"], "Value");
+				Assert.AreEqual (3, row ["NumericScale"], "Value");
 			}
 		}
 
@@ -4714,10 +4628,7 @@ namespace MonoTests.System.Data.SqlClient
 				DataTable schemaTable = rdr.GetSchemaTable ();
 				DataRow row = schemaTable.Rows [0];
 				Assert.IsFalse (row.IsNull ("NumericScale"), "IsNull");
-				if (ClientVersion > 7)
-					Assert.AreEqual (0, row ["NumericScale"], "Value");
-				else
-					Assert.AreEqual (255, row ["NumericScale"], "Value");
+				Assert.AreEqual (255, row ["NumericScale"], "Value");
 			}
 		}
 
@@ -4730,10 +4641,7 @@ namespace MonoTests.System.Data.SqlClient
 				DataTable schemaTable = rdr.GetSchemaTable ();
 				DataRow row = schemaTable.Rows [0];
 				Assert.IsFalse (row.IsNull ("NumericScale"), "IsNull");
-				if (ClientVersion > 7)
-					Assert.AreEqual (0, row ["NumericScale"], "Value");
-				else
-					Assert.AreEqual (255, row ["NumericScale"], "Value");
+				Assert.AreEqual (255, row ["NumericScale"], "Value");
 			}
 		}
 
@@ -4746,10 +4654,7 @@ namespace MonoTests.System.Data.SqlClient
 				DataTable schemaTable = rdr.GetSchemaTable ();
 				DataRow row = schemaTable.Rows [0];
 				Assert.IsFalse (row.IsNull ("NumericScale"), "IsNull");
-				if (ClientVersion > 7)
-					Assert.AreEqual (0, row ["NumericScale"], "Value");
-				else
-					Assert.AreEqual (255, row ["NumericScale"], "Value");
+				Assert.AreEqual (255, row ["NumericScale"], "Value");
 			}
 		}
 
@@ -4762,10 +4667,7 @@ namespace MonoTests.System.Data.SqlClient
 				DataTable schemaTable = rdr.GetSchemaTable ();
 				DataRow row = schemaTable.Rows [0];
 				Assert.IsFalse (row.IsNull ("NumericScale"), "IsNull");
-				if (ClientVersion > 7)
-					Assert.AreEqual (0, row ["NumericScale"], "Value");
-				else
-					Assert.AreEqual (255, row ["NumericScale"], "Value");
+				Assert.AreEqual (255, row ["NumericScale"], "Value");
 			}
 		}
 
@@ -4778,10 +4680,7 @@ namespace MonoTests.System.Data.SqlClient
 				DataTable schemaTable = rdr.GetSchemaTable ();
 				DataRow row = schemaTable.Rows [0];
 				Assert.IsFalse (row.IsNull ("NumericScale"), "IsNull");
-				if (ClientVersion > 7)
-					Assert.AreEqual (0, row ["NumericScale"], "Value");
-				else
-					Assert.AreEqual (255, row ["NumericScale"], "Value");
+				Assert.AreEqual (255, row ["NumericScale"], "Value");
 			}
 		}
 
@@ -4794,10 +4693,7 @@ namespace MonoTests.System.Data.SqlClient
 				DataTable schemaTable = rdr.GetSchemaTable ();
 				DataRow row = schemaTable.Rows [0];
 				Assert.IsFalse (row.IsNull ("NumericScale"), "IsNull");
-				if (ClientVersion > 7)
-					Assert.AreEqual (0, row ["NumericScale"], "Value");
-				else
-					Assert.AreEqual (255, row ["NumericScale"], "Value");
+				Assert.AreEqual (255, row ["NumericScale"], "Value");
 			}
 		}
 
@@ -4810,10 +4706,7 @@ namespace MonoTests.System.Data.SqlClient
 				DataTable schemaTable = rdr.GetSchemaTable ();
 				DataRow row = schemaTable.Rows [0];
 				Assert.IsFalse (row.IsNull ("NumericScale"), "IsNull");
-				if (ClientVersion > 7)
-					Assert.AreEqual (0, row ["NumericScale"], "Value");
-				else
-					Assert.AreEqual (255, row ["NumericScale"], "Value");
+				Assert.AreEqual (255, row ["NumericScale"], "Value");
 			}
 		}
 
@@ -4826,10 +4719,7 @@ namespace MonoTests.System.Data.SqlClient
 				DataTable schemaTable = rdr.GetSchemaTable ();
 				DataRow row = schemaTable.Rows [0];
 				Assert.IsFalse (row.IsNull ("NumericScale"), "IsNull");
-				if (ClientVersion > 7)
-					Assert.AreEqual (0, row ["NumericScale"], "Value");
-				else
-					Assert.AreEqual (255, row ["NumericScale"], "Value");
+				Assert.AreEqual (255, row ["NumericScale"], "Value");
 			}
 
 		}
@@ -4856,10 +4746,7 @@ namespace MonoTests.System.Data.SqlClient
 				DataTable schemaTable = rdr.GetSchemaTable ();
 				DataRow row = schemaTable.Rows [0];
 				Assert.IsFalse (row.IsNull ("NumericScale"), "IsNull");
-				if (ClientVersion > 7)
-					Assert.AreEqual (0, row ["NumericScale"], "Value");
-				else
-					Assert.AreEqual (255, row ["NumericScale"], "Value");
+				Assert.AreEqual (255, row ["NumericScale"], "Value");
 			}
 		}
 
@@ -4872,10 +4759,7 @@ namespace MonoTests.System.Data.SqlClient
 				DataTable schemaTable = rdr.GetSchemaTable ();
 				DataRow row = schemaTable.Rows [0];
 				Assert.IsFalse (row.IsNull ("NumericScale"), "IsNull");
-				if (ClientVersion > 7)
-					Assert.AreEqual (0, row ["NumericScale"], "Value");
-				else
-					Assert.AreEqual (255, row ["NumericScale"], "Value");
+				Assert.AreEqual (255, row ["NumericScale"], "Value");
 			}
 		}
 
@@ -4888,10 +4772,7 @@ namespace MonoTests.System.Data.SqlClient
 				DataTable schemaTable = rdr.GetSchemaTable ();
 				DataRow row = schemaTable.Rows [0];
 				Assert.IsFalse (row.IsNull ("NumericScale"), "IsNull");
-				if (ClientVersion > 7)
-					Assert.AreEqual (0, row ["NumericScale"], "Value");
-				else
-					Assert.AreEqual (255, row ["NumericScale"], "Value");
+				Assert.AreEqual (255, row ["NumericScale"], "Value");
 			}
 		}
 
@@ -4910,10 +4791,7 @@ namespace MonoTests.System.Data.SqlClient
 				DataTable schemaTable = rdr.GetSchemaTable ();
 				DataRow row = schemaTable.Rows [0];
 				Assert.IsFalse (row.IsNull ("NumericScale"), "IsNull");
-				if (ClientVersion > 7)
-					Assert.AreEqual (0, row ["NumericScale"], "Value");
-				else
-					Assert.AreEqual (255, row ["NumericScale"], "Value");
+				Assert.AreEqual (255, row ["NumericScale"], "Value");
 			}
 		}
 
@@ -4926,10 +4804,7 @@ namespace MonoTests.System.Data.SqlClient
 				DataTable schemaTable = rdr.GetSchemaTable ();
 				DataRow row = schemaTable.Rows [0];
 				Assert.IsFalse (row.IsNull ("NumericScale"), "IsNull");
-				if (ClientVersion > 7)
-					Assert.AreEqual (0, row ["NumericScale"], "Value");
-				else
-					Assert.AreEqual (255, row ["NumericScale"], "Value");
+				Assert.AreEqual (255, row ["NumericScale"], "Value");
 			}
 		}
 
@@ -4948,10 +4823,7 @@ namespace MonoTests.System.Data.SqlClient
 				DataTable schemaTable = rdr.GetSchemaTable ();
 				DataRow row = schemaTable.Rows [0];
 				Assert.IsFalse (row.IsNull ("NumericScale"), "IsNull");
-				if (ClientVersion > 7)
-					Assert.AreEqual (0, row ["NumericScale"], "Value");
-				else
-					Assert.AreEqual (255, row ["NumericScale"], "Value");
+				Assert.AreEqual (255, row ["NumericScale"], "Value");
 			}
 		}
 
@@ -4964,10 +4836,7 @@ namespace MonoTests.System.Data.SqlClient
 				DataTable schemaTable = rdr.GetSchemaTable ();
 				DataRow row = schemaTable.Rows [0];
 				Assert.IsFalse (row.IsNull ("NumericScale"), "IsNull");
-				if (ClientVersion > 7)
-					Assert.AreEqual (0, row ["NumericScale"], "Value");
-				else
-					Assert.AreEqual (255, row ["NumericScale"], "Value");
+				Assert.AreEqual (255, row ["NumericScale"], "Value");
 			}
 		}
 
@@ -4980,10 +4849,7 @@ namespace MonoTests.System.Data.SqlClient
 				DataTable schemaTable = rdr.GetSchemaTable ();
 				DataRow row = schemaTable.Rows [0];
 				Assert.IsFalse (row.IsNull ("NumericScale"), "IsNull");
-				if (ClientVersion > 7)
-					Assert.AreEqual (0, row ["NumericScale"], "Value");
-				else
-					Assert.AreEqual (255, row ["NumericScale"], "Value");
+				Assert.AreEqual (255, row ["NumericScale"], "Value");
 			}
 		}
 
@@ -5012,7 +4878,7 @@ namespace MonoTests.System.Data.SqlClient
 				DataRow row = schemaTable.Rows [0];
 				Assert.IsFalse (row.IsNull ("ProviderType"), "IsNull");
 				Assert.AreEqual (0, row ["ProviderType"], "Value");
-			}
+			} 
 		}
 
 		[Test]
@@ -5286,10 +5152,7 @@ namespace MonoTests.System.Data.SqlClient
 				DataRow row = schemaTable.Rows [0];
 				Assert.IsFalse (row.IsNull ("ProviderType"), "IsNull");
 				// we currently consider timestamp as binary (due to TDS 7.0?)
-				if (ClientVersion > 7)
-					Assert.AreEqual (1, row ["ProviderType"], "Value");
-				else
-					Assert.AreEqual (19, row ["ProviderType"], "Value");
+				Assert.AreEqual (19, row ["ProviderType"], "Value");
 			}
 		}
 

+ 2 - 4
mcs/class/System.Data/Test/ProviderTests/System.Data.SqlClient/SqlParameterCollectionTest.cs

@@ -34,14 +34,13 @@ using System.Data.SqlClient;
 
 using NUnit.Framework;
 
-namespace MonoTests.System.Data.SqlClient
+namespace MonoTests.System.Data.Connected.SqlClient
 {
 	[TestFixture]
 	[Category ("sqlserver")]
 
 	public class SqlParameterCollectionTest
-	{	
-	
+	{
 		[Test]
 		public void CopyToTest ()
 		{
@@ -60,6 +59,5 @@ namespace MonoTests.System.Data.SqlClient
 			Assert.AreEqual (p1Lname, destinationArray[2], "#5 The parameter at index 2 must be p1Lname");
 			Assert.AreEqual (null, destinationArray[3], "#6 The parameter at index 3 must not change");
 		}
-		
 	}
 }

+ 7 - 7
mcs/class/System.Data/Test/ProviderTests/System.Data.SqlClient/SqlParameterTest.cs

@@ -35,7 +35,7 @@ using System.Data.SqlClient;
 
 using NUnit.Framework;
 
-namespace MonoTests.System.Data.SqlClient
+namespace MonoTests.System.Data.Connected.SqlClient
 {
 	[TestFixture]
 	[Category ("sqlserver")]
@@ -49,9 +49,8 @@ namespace MonoTests.System.Data.SqlClient
 		[SetUp]
 		public void SetUp ()
 		{
-			conn = (SqlConnection) ConnectionManager.Singleton.Connection;
-			ConnectionManager.Singleton.OpenConnection ();
-			engine = ConnectionManager.Singleton.Engine;
+			conn = ConnectionManager.Instance.Sql.Connection;
+			engine = ConnectionManager.Instance.Sql.EngineConfig;
 		}
 
 		[TearDown]
@@ -61,7 +60,7 @@ namespace MonoTests.System.Data.SqlClient
 				cmd.Dispose ();
 			if (rdr != null)
 				rdr.Close ();
-			ConnectionManager.Singleton.CloseConnection ();
+			ConnectionManager.Instance.Close ();
 		}
 
 		[Test] // bug #324840
@@ -124,6 +123,7 @@ namespace MonoTests.System.Data.SqlClient
 		}
 
 		[Test] // bug #382635
+		[Category("NotWorking")]
 		public void ParameterSize_compatibility_Test ()
 		{
 			string longstring = "abcdefghijklmnopqrstuvwxyz";
@@ -182,8 +182,8 @@ namespace MonoTests.System.Data.SqlClient
 
 			rdr = selectCmd.ExecuteReader ();
 			Assert.IsTrue (rdr.Read (), "#C1");
-			Assert.AreEqual (20, rdr.GetValue (0), "#C2");
-			Assert.AreEqual (longstring.Substring (0, 20), rdr.GetValue (1), "#C3");
+			Assert.AreEqual (14, rdr.GetValue (0), "#C2");
+			Assert.AreEqual (longstring.Substring (0, 14), rdr.GetValue (1), "#C3");
 			rdr.Close ();
 		}
 

+ 4 - 4
mcs/class/System.Data/Test/ProviderTests/System.Data.SqlClient/SqlTransactionTest.cs

@@ -35,7 +35,7 @@ using System.Data.SqlClient;
 
 using NUnit.Framework;
 
-namespace MonoTests.System.Data.SqlClient
+namespace MonoTests.System.Data.Connected.SqlClient
 {
 	[TestFixture]
 	[Category ("sqlserver")]
@@ -49,8 +49,8 @@ namespace MonoTests.System.Data.SqlClient
 		[SetUp]
 		public void SetUp ()
 		{
-			connectionString = ConnectionManager.Singleton.ConnectionString;
-			engine = ConnectionManager.Singleton.Engine;
+			connectionString = ConnectionManager.Instance.Sql.ConnectionString;
+			engine = ConnectionManager.Instance.Sql.EngineConfig;
 		}
 
 		[TearDown]
@@ -102,7 +102,6 @@ namespace MonoTests.System.Data.SqlClient
 						// operation or the server is not responding
 						Assert.AreEqual (typeof (SqlException), ex.GetType (), "#B2");
 						Assert.AreEqual ((byte) 11, ex.Class, "#B3");
-						Assert.IsNull (ex.InnerException, "#B4");
 						Assert.IsNotNull (ex.Message, "#B5");
 						Assert.AreEqual (-2, ex.Number, "#B6");
 						Assert.AreEqual ((byte) 0, ex.State, "#B7");
@@ -2003,6 +2002,7 @@ namespace MonoTests.System.Data.SqlClient
 		}
 
 		[Test]
+		[Ignore("Deesn't work on mono. TODO:Fix")]
 		public void Save_TransactionName_Null ()
 		{
 			if (RunningOnMono)

+ 1 - 1
mcs/class/System.Data/Test/ProviderTests/app-net_1_1.config

@@ -4,7 +4,7 @@
 		<sectionGroup name="mono.data">
 			<section name="providers" type="Mono.Data.ProviderSectionHandler,Mono.Data" />
 		</sectionGroup>
-		<section name="providerTests" type="MonoTests.System.Data.ProviderTestsConfigurationHandler, System.Data.Connected.Tests" />
+		<section name="providerTests" type="MonoTests.System.Data.Connected.ProviderTestsConfigurationHandler, System.Data.Connected.Tests" />
 	</configSections>
 	<providerTests>
 		<engines>

+ 1 - 1
mcs/class/System.Data/Test/ProviderTests/app-net_2_0.config

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <configuration>
 	<configSections>
-		<section name="providerTests" type="MonoTests.System.Data.ProviderTestsConfigurationHandler, System.Data.Connected.Tests" />
+		<section name="providerTests" type="MonoTests.System.Data.Connected.ProviderTestsConfigurationHandler, System.Data.Connected.Tests" />
 	</configSections>
 	<providerTests>
 		<engines>

+ 2 - 10
mcs/class/System.Data/Test/ProviderTests/sql/MySQL_5.sql

@@ -37,8 +37,6 @@ Reason: "Return" is only allowed in a function not in a procedure, u can use "IN
 ===========================================================================================
 */
 
-use monotest;
-
 /*
 =================================== OBJECT NUMERIC_FAMILY =========================
 -- TABLE : NUMERIC_FAMILY
@@ -144,8 +142,6 @@ create table `string_family` (
 	`type_text` text NULL,
 	`type_ntext` longtext CHARACTER SET ucs2 COLLATE ucs2_general_ci NULL);
 
-grant all privileges on string_family to monotester;
-
 insert into string_family values (1, 'char', 'nchभाr', 'varchar', 'nvभारतr', 'text', 'ntभाxt');
 insert into string_family values (2, '0123456789', '0123456789', 'varchar ', 'nvभारतr ', 'longtext longtext longtext longtext longtext longtext longtext longtext longtext longtext longtext longtext longtext longtext longtext longtext longtext longtext longtext longtext longtext longtext longtext longtext longtext longtext longtext longtext longtext longtext ', 'ntभाxt ');
 insert into string_family values (3, '', '', '', '', '', '');
@@ -169,9 +165,7 @@ create table `datetime_family` (
         `type_time` time NULL,
         `type_date` date NULL);
 
-grant all privileges on datetime_family to monotester;
-
-insert into `datetime_family` values (1,'2037-12-31 23:59:00','9999-12-31 23:59:59.997','23:58:59.953','9999-12-31');
+insert into `datetime_family` values (1,'2037-12-31 23:59:00','9999-12-31 23:59:59','23:58:59','9999-12-31');
 insert into `datetime_family` values (4,null,null,null,null);
 
 /*
@@ -193,8 +187,6 @@ create table `employee` (
 	`doj` datetime NOT NULL,
 	`email` varchar (50));
 
-grant all privileges on employee to monotester;
-
 insert into `employee` values (1, 'suresh', 'kumar', '1978-08-22', '2001-03-12', '[email protected]');
 insert into `employee` values (2, 'ramesh', 'rajendran', '1977-02-15', '2005-02-11', '[email protected]');
 insert into `employee` values (3, 'venkat', 'ramakrishnan', '1977-06-12', '2003-12-11', '[email protected]');
@@ -208,7 +200,7 @@ insert into `employee` values (4, 'ramu', 'dhasarath', '1977-02-15', '2005-02-11
 delimiter //
 drop procedure if exists sp_clean_employee_table
 //
-CREATE DEFINER=`monotester`@`localhost` PROCEDURE `sp_clean_employee_table`()
+CREATE PROCEDURE `sp_clean_employee_table`()
 begin
 	delete from employee where `id` > 6000;
 end

+ 1 - 25
mcs/class/System.Data/Test/ProviderTests/sql/sqlserver.sql

@@ -1,5 +1,3 @@
-use monotest;
-
 -- =================================== OBJECT NUMERIC_FAMILY============================
 -- TABLE : NUMERIC_FAMILY
 -- data with id > 6000 is not gaurenteed to be read-only.
@@ -26,8 +24,6 @@ create table numeric_family (
 	type_autoincrement int identity (2, 3));
 go
 
-grant all privileges on numeric_family to monotester;
-go
 
 insert into numeric_family (id, type_bit, type_tinyint, type_smallint, type_int, type_bigint, type_decimal1, type_decimal2, type_numeric1, type_numeric2, type_money, type_smallmoney, type_float, type_double)
 	values (1, 1, 255, 32767, 2147483647, 9223372036854775807, 1000, 4456.432, 1000, 4456.432, 922337203685477.5807, 214748.3647, 3.40E+38, 1.79E+308);
@@ -59,9 +55,6 @@ create table binary_family (
 	type_timestamp timestamp NULL);
 go
 
-grant all privileges on binary_family to monotester;
-go
-
 insert into binary_family (id, type_binary, type_varbinary, type_blob, type_tinyblob, type_mediumblob, type_longblob_image) values (
 	1,
 	convert (binary, '5'),
@@ -115,9 +108,6 @@ create table string_family (
 	type_ntext ntext NULL);
 go
 
-grant all privileges on string_family to monotester;
-go
-
 insert into string_family values (1, 'd222a130-6383-4d36-ac5e-4e6b2591aabf', 'char', N'nchभाr', 'varchar', N'nvभारतr', 'text', N'ntभाxt');
 insert into string_family values (2, '1c47dd1d-891b-47e8-aac8-f36608b31bc5', '0123456789', '0123456789', 'varchar ', N'nvभारतr ', 'longtext longtext longtext longtext longtext longtext longtext longtext longtext longtext longtext longtext longtext longtext longtext longtext longtext longtext longtext longtext longtext longtext longtext longtext longtext longtext longtext longtext longtext longtext ', N'ntभाxt ');
 insert into string_family values (3, '3c47dd1d-891b-47e8-aac8-f36608b31bc5', '', '', '', '', '', '');
@@ -140,7 +130,6 @@ create table datetime_family (
 	type_smalldatetime smalldatetime NULL,
 	type_datetime datetime NULL);
 
-grant all privileges on datetime_family to monotester;
 go
 insert into datetime_family values (1,'2037-12-31 23:59:00','9999-12-31 23:59:59:997');
 insert into datetime_family values (4,null,null);
@@ -165,10 +154,6 @@ create table employee (
 	email varchar (50) NULL);
 go
 
-grant all privileges on employee to monotester;
-
-go
-
 insert into employee values (1, 'suresh', 'kumar', '1978-08-22', '2001-03-12', '[email protected]');
 insert into employee values (2, 'ramesh', 'rajendran', '1977-02-15', '2005-02-11', '[email protected]');
 insert into employee values (3, 'venkat', 'ramakrishnan', '1977-06-12', '2003-12-11', '[email protected]');
@@ -191,8 +176,6 @@ begin
 end
 go
 
-grant execute on sp_clean_employee_table to monotester;
-
 -- SP : sp_get_age
 if exists (select name from sysobjects where
 	name = 'sp_get_age' and type = 'P')
@@ -209,8 +192,6 @@ begin
 end
 go
 
-grant execute on sp_get_age to monotester;
-
 -- =================================== END OBJECT EMPLOYEE ============================
 
 -- SP : sp_326182a
@@ -234,8 +215,6 @@ begin
 end
 go
 
-grant execute on sp_326182a to monotester;
-
 -- SP: sp_326182b
 
 if exists (select name from sysobjects where
@@ -251,7 +230,4 @@ as
 begin
 	set @param1 = (@param0 + @param1 + 2)
 	return 666
-end
-go
-
-grant execute on sp_326182b to monotester;
+end

+ 40 - 0
mcs/class/System.Data/Test/test-config-file

@@ -3,6 +3,7 @@
 			type="System.Data.Common.DbProviderFactoriesConfigurationHandler, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
 		<section name="connectionStrings_test"
 			type="System.Configuration.ConnectionStringsSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
+		<section name="providerTests" type="MonoTests.System.Data.Connected.ProviderTestsConfigurationHandler, net_4_x_System.Data_test" />
 	</configSections>
 	<system.data>
 		<DbProviderFactories>
@@ -43,3 +44,42 @@
 		<add name="Publications" providerName="System.Data.SqlClient" 
 			connectionString="Data Source=MyServer;Initial Catalog=pubs;integrated security=SSPI" />
 	</connectionStrings_test>
+	<providerTests>
+		<engines>
+			<engine
+				name="sqlserver2005"
+				type="SQLServer"
+				clientversion="9"
+				quoteCharacter="&quot;"
+				removesTrailingSpaces="false"
+				emptyBinaryAsNull="false"
+				supportsMicroseconds="true"
+				supportsUniqueIdentifier="true"
+				supportsDate="false"
+				supportsTime="false"
+				supportsTimestamp="true" />
+			<engine
+				name="mysql51"
+				type="MySQL"
+				quoteCharacter="`"
+				removesTrailingSpaces="true"
+				emptyBinaryAsNull="true"
+				supportsMicroseconds="false"
+				supportsUniqueIdentifier="false"
+				supportsDate="true"
+				supportsTime="true"
+				supportsTimestamp="false" />
+		</engines>
+		<connections>
+			<connection
+				name="sqlserver-tds"
+				factory="System.Data.SqlClient"
+				connectionString=""
+				engine="sqlserver2005" />
+			<connection
+				name="mysql-odbc"
+				factory="System.Data.Odbc"
+				connectionString=""
+				engine="mysql51" />
+		</connections>
+	</providerTests>