Skip to content

Querying int columns as strings has broken in 2.1.37 #2056

Description

@sellotape

Might be intentional, but worked in 2.1.35, and I suspect a lot of people will be depending on it and pretty surprised, as there's no mention of a breaking change in the release notes.

To replicate, simply (I'm using Azure SQL Server):

using IDbConnection cx = new SqlConnection("your-connection-string");
string? actual = await cx.QueryFirstOrDefaultAsync<string>("select id from someTableWithAnIntIdColumn").ConfigureAwait(false);

In 2.1.35, this returns e.g. "42". In 2.1.37 it throws System.InvalidCastException : Unable to cast object of type 'System.Int32' to type 'System.String'.

Fuller exception:

System.InvalidCastException : Unable to cast object of type 'System.Int32' to type 'System.String'.
   at Microsoft.Data.SqlClient.SqlDataReader.GetFieldValueFromSqlBufferInternal[T](SqlBuffer data, _SqlMetaData metaData, Boolean isAsync)
   at Microsoft.Data.SqlClient.SqlDataReader.GetFieldValueInternal[T](Int32 i, Boolean isAsync)
   at Microsoft.Data.SqlClient.SqlDataReader.GetFieldValue[T](Int32 i)
   at Dapper.SqlMapper.<>c__DisplayClass209_0`1.<UnderlyingReadViaGetFieldValueFactory>b__0(DbDataReader reader) in /_/Dapper/SqlMapper.cs:line 3134
   at Dapper.SqlMapper.QueryRowAsync[T](IDbConnection cnn, Row row, Type effectiveType, CommandDefinition command) in /_/Dapper/SqlMapper.Async.cs:line 496
   at <my test code>

Activity

  1. mgravell commented on Mar 14, 2024

    @mgravell
    Member

    That's because we didn't know it was a break. This is related to the GetValue change for strings, to mitigate against a npgsql behaviour.

    I've unlisted - will think of best path forward, probably a revert.

  2. mgravell commented on Mar 14, 2024

    @mgravell
    Member
  3. mdx0111 commented on Apr 12, 2024

    @mdx0111

    I have the same problem with decimal to string.
    Thanks

  4. mgravell commented on Apr 12, 2024

    @mgravell
    Member

    Yup, we need to revert a change there (which is why 2.1.37 is hidden); I'll do that now

  5. mgravell commented on Apr 12, 2024

    @mgravell
    Member
  6. mgravell commented on Apr 12, 2024

    @mgravell
    Member
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions