Skip to content

Commit 72951f4

Browse files
authored
Fix SqlDataReader.IsDBNull() for json (#2892)
1 parent cc58d79 commit 72951f4

File tree

3 files changed

+49
-0
lines changed

3 files changed

+49
-0
lines changed

src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/TdsParser.cs

+4
Original file line numberDiff line numberDiff line change
@@ -5820,6 +5820,10 @@ internal static object GetNullSqlValue(SqlBuffer nullVal, SqlMetaDataPriv md, Sq
58205820
}
58215821
break;
58225822

5823+
case SqlDbTypeExtensions.Json:
5824+
nullVal.SetToNullOfType(SqlBuffer.StorageType.Json);
5825+
break;
5826+
58235827
default:
58245828
Debug.Fail("unknown null sqlType!" + md.type.ToString());
58255829
break;

src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/TdsParser.cs

+4
Original file line numberDiff line numberDiff line change
@@ -6667,6 +6667,10 @@ internal static object GetNullSqlValue(
66676667
}
66686668
break;
66696669

6670+
case SqlDbTypeExtensions.Json:
6671+
nullVal.SetToNullOfType(SqlBuffer.StorageType.Json);
6672+
break;
6673+
66706674
default:
66716675
Debug.Fail("unknown null sqlType!" + md.type.ToString());
66726676
break;

src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/JsonTest/JsonTest.cs

+41
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,16 @@ private void ValidateSchema(SqlDataReader reader)
6262
}
6363
}
6464

65+
private void ValidateNullJson(SqlDataReader reader)
66+
{
67+
while (reader.Read())
68+
{
69+
bool IsNull = reader.IsDBNull(0);
70+
_output.WriteLine(IsNull ? "null" : "not null");
71+
Assert.True(IsNull);
72+
}
73+
}
74+
6575
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.IsJsonSupported))]
6676
public void TestJsonWrite()
6777
{
@@ -295,5 +305,36 @@ public async Task TestJsonReadAsync()
295305
}
296306
}
297307
}
308+
309+
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.IsJsonSupported))]
310+
public void TestNullJson()
311+
{
312+
string tableName = "jsonTest";
313+
314+
string tableInsert = "INSERT INTO " + tableName + " VALUES (@jsonData)";
315+
string tableRead = "SELECT * FROM " + tableName;
316+
317+
using SqlConnection connection = new SqlConnection(DataTestUtility.TCPConnectionString);
318+
connection.Open();
319+
using SqlCommand command = connection.CreateCommand();
320+
321+
//Create Table
322+
DataTestUtility.CreateTable(connection, tableName, "(Data json)");
323+
324+
//Insert Null value
325+
command.CommandText = tableInsert;
326+
var parameter = new SqlParameter("@jsonData", SqlDbTypeExtensions.Json);
327+
parameter.Value = DBNull.Value;
328+
command.Parameters.Add(parameter);
329+
command.ExecuteNonQuery();
330+
331+
//Query the table
332+
command.CommandText = tableRead;
333+
var reader = command.ExecuteReader();
334+
ValidateNullJson(reader);
335+
336+
reader.Close();
337+
DataTestUtility.DropTable(connection, tableName);
338+
}
298339
}
299340
}

0 commit comments

Comments
 (0)