dotnet / dotnet/docs

[Breaking change]: SqlDataReader.GetString() behavior change on null

Open
#32,833 2 comments 0 reactions 0 assignees View on GitHub
:checkered_flag: Release: .NET 7 binary incompatible breaking-change source incompatible
Dominant language
No language data
Stars
4.8k
Forks
6.1k
Avg merge
15h 21m
Merged PRs (30d)
370

Description

### Description

When upgrading from .NET 6 to .NET 7 we encountered a breaking change in SqlDataReader.

For some reason, upgrading runtime from 6 to 7 changes the behavior of System.Data.SqlDataReader.GetString() to throw when asked to read a null rather than return a null. This is particularly weird because I hadn't gotten around to upgrading SqlDataReader yet. I'm still using the version number from .NET 6.

````
IDataReader source;
- string IDataRow.GetString(int index) => source.GetString(index);
+ // NET 6 behavior: GetString(null column) -> null
+ // NET 7 behavior: GetString(null column) -> throw
+ // BSONReader behavior -> null
+ // Thus expected itnerface behavior is null so we do that
+ string IDataRow.GetString(int index) => source.IsDBNull(index) ? null : source.GetString(index);
````

### Version

.NET 7

### Previous behavior

GetString(null column id) => null

### New behavior

GetString(null column id) => throw

### Type of breaking change

- [X] **Binary incompatible**: Existing binaries may encounter a breaking change in behavior, such as failure to load/execute or different run-time behavior.
- [X] **Source incompatible**: Source code may encounter a breaking change in behavior when targeting the new runtime/component/SDK, such as compile errors or different run-time behavior.

### Reason for change

unknown

### Recommended action

Document change

### Feature area

Other (please put exact area in description textbox)

### Affected APIs

System.Data.SqlClient.GetString()

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.