Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Formatting from DB Date into C# string is not using current culture (Dapper Nugget package 2.1.28) #2054

Open
Janis-developer opened this issue Mar 13, 2024 · 3 comments

Comments

@Janis-developer
Copy link

Thx for the cool ORM!

We use legacy code.
I upgraded Dapper from 2.0.30 to the Latest (Nugget package 2.1.28)

And now date is formatted to string always without respecting current culture.

With old Dapper version 2.0.30 , when change current culture to "lv-LV" and Query from Oracle, db Date field into C# string field formatted correctly "dd.mm.YYYY".

With Dapper 2.1.28 its always "mm/dd/YYYY" regardless of culture.
( Receiving Date Ok. Yeh, we should keep as C# Date, but that another story - legacy)

@mgravell
Copy link
Member

mgravell commented Mar 13, 2024

OK, there's a lot of moving parts here; can I clarify:

  • you're sending a DateTime value into the database, presumably as a typed parameter
  • this ends up in your database table
    • QUESTION: what is the exact column type?
    • QUESTION: for a value of 2024-03-09 (which allows for ambiguity between 9th March and 3rd September, depending on how written): what exactly gets stored in the database (so we can determine whether the delta is read vs write)?
  • you're then querying this value, presumably into a typed model
    • QUESTION: what is the property type in your model?
    • QUESTION: for the same test value, what value is retrieved?

I'm not aware of this consciously changing at any point, but philosophically:

  1. IMO the library should almost always use culture invariants for storage, so: it is probably correct as described
  2. if you're storing data like dates as strings... maybe don't do that?

Happy to try to dig a bit more, but: some of this seems like a usage/database-design issue.

An end-to-end example would be helpful, obviously.

@Janis-developer
Copy link
Author

Hello,

The issue happens when received value gets converted from DateTime object into C# string.
It seems to use hardcoded format.

var result = oracleConnection(query, parameters);

class Client
{
public string name { get; set; }
public string date_of_birth { get; set; }
// all are strings ...
}

Yes, like I wrote before, it should be kept as C# DateTime, but its legacy.

In DB its DATE type. The reading works fine.

For now I reverted back to old Dapper - it formats DateTime to string taking current culture into consideration.

@mgravell
Copy link
Member

ok, so the data in the database is typed as a date (whatever the relevant type is in Oracle), and is stored correctly - is that right?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants