diff --git a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlDataReader.cs b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlDataReader.cs index c3e2ed9e27..de121b9f8f 100644 --- a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlDataReader.cs +++ b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlDataReader.cs @@ -1476,7 +1476,7 @@ public override DataTable GetSchemaTable() Debug.Assert(null != _metaData.schemaTable, "No schema information yet!"); } } - return _metaData?.schemaTable; + return _metaData?.schemaTable ?? new DataTable(); } finally { diff --git a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlDataReader.cs b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlDataReader.cs index c74195b8bc..645d0316f7 100644 --- a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlDataReader.cs +++ b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlDataReader.cs @@ -1667,17 +1667,12 @@ override public DataTable GetSchemaTable() { if (null != this.MetaData) { - _metaData.schemaTable = BuildSchemaTable(); Debug.Assert(null != _metaData.schemaTable, "No schema information yet!"); // filter table? } } - if (null != _metaData) - { - return _metaData.schemaTable; - } - return null; + return _metaData?.schemaTable ?? new DataTable(); } finally { diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataReaderTest/DataReaderTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataReaderTest/DataReaderTest.cs index d4a4fb71e3..e93cd8c64d 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataReaderTest/DataReaderTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataReaderTest/DataReaderTest.cs @@ -36,7 +36,6 @@ public static void LoadReaderIntoDataTableToTestGetSchemaTable() [CheckConnStrSetupFact] public static void MultiQuerySchema() { - SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(DataTestUtility.TCPConnectionString); using (SqlConnection connection = new SqlConnection(DataTestUtility.TCPConnectionString)) { connection.Open(); @@ -65,7 +64,25 @@ public static void MultiQuerySchema() } } + [CheckConnStrSetupFact] + public static void GetSchemaTable_returns_null_when_no_resultset() + { + using (SqlConnection connection = new SqlConnection(DataTestUtility.TCPConnectionString)) + { + connection.Open(); + using (SqlCommand command = connection.CreateCommand()) + { + command.CommandText = "SELECT 1"; + using (SqlDataReader reader = command.ExecuteReader()) + { + reader.NextResult(); + Assert.NotNull(reader.GetSchemaTable()); + } + } + } + } + // Checks for the IsColumnSet bit in the GetSchemaTable for Sparse columns [CheckConnStrSetupFact] public static void CheckSparseColumnBit()