[Breaking change]: SqlDataReader.GetString() behavior change on null
- 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
Assessment
This issue has not been assessed yet.