diff --git a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/TdsParser.cs b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/TdsParser.cs index b68ad0dcc6..f18a65e0eb 100644 --- a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/TdsParser.cs +++ b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/TdsParser.cs @@ -5825,6 +5825,10 @@ internal static object GetNullSqlValue(SqlBuffer nullVal, SqlMetaDataPriv md, Sq } break; + case SqlDbTypeExtensions.Json: + nullVal.SetToNullOfType(SqlBuffer.StorageType.Json); + break; + default: Debug.Fail("unknown null sqlType!" + md.type.ToString()); break; diff --git a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/TdsParser.cs b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/TdsParser.cs index 42e4c628a1..3a9dfbddc8 100644 --- a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/TdsParser.cs +++ b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/TdsParser.cs @@ -6670,6 +6670,10 @@ internal static object GetNullSqlValue( } break; + case SqlDbTypeExtensions.Json: + nullVal.SetToNullOfType(SqlBuffer.StorageType.Json); + break; + default: Debug.Fail("unknown null sqlType!" + md.type.ToString()); break; diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/JsonTest/JsonTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/JsonTest/JsonTest.cs index b4bd08c5dc..c8be762441 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/JsonTest/JsonTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/JsonTest/JsonTest.cs @@ -61,6 +61,16 @@ private void ValidateSchema(SqlDataReader reader) } } + private void ValidateNullJson(SqlDataReader reader) + { + while (reader.Read()) + { + bool IsNull = reader.IsDBNull(0); + _output.WriteLine(IsNull ? "null" : "not null"); + Assert.True(IsNull); + } + } + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.IsJsonSupported))] public void TestJsonWrite() { @@ -286,5 +296,38 @@ public async Task TestJsonReadAsync() } } } + + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.IsJsonSupported))] + public void TestNullJson() + { + string tableName = DataTestUtility.GetUniqueNameForSqlServer("Json_Test"); + + string tableCreate = "CREATE TABLE " + tableName + " (Data json)"; + string tableInsert = "INSERT INTO " + tableName + " VALUES (@jsonData)"; + string tableRead = "SELECT * FROM " + tableName; + + using SqlConnection connection = new SqlConnection(DataTestUtility.TCPConnectionString); + connection.Open(); + using SqlCommand command = connection.CreateCommand(); + + //Create Table + command.CommandText = tableCreate; + command.ExecuteNonQuery(); + + //Insert Null value + command.CommandText = tableInsert; + var parameter = new SqlParameter("@jsonData", SqlDbTypeExtensions.Json); + parameter.Value = DBNull.Value; + command.Parameters.Add(parameter); + command.ExecuteNonQuery(); + + //Query the table + command.CommandText = tableRead; + var reader = command.ExecuteReader(); + ValidateNullJson(reader); + + reader.Close(); + DataTestUtility.DropTable(connection, tableName); + } } }