Являются ли методы.net SqlDataReader культурными инвариантами?

Я не могу найти точного ответа на вопрос, что произойдет, если, например, мои десятичные числа хранятся в базе данных с различными настройками культуры, и я хочу получить их через SqlDataReader в мою программу. Будут ли ',' и '.' всегда правильно анализировать и преобразовывать в мою текущую культуру, если тип данных в SQL-DB установлен в десятичное число?

Что произойдет, если они хранятся в varchar и пытаются использовать.GetDecimal()?

1 ответ

Являются ли методы.net SqlDataReader культурными инвариантами?

SqlDataReader не использует CultureInfo или что-то эквивалентное. Он не знает культур.

Когда ваши значения хранятся в БД в виде десятичного числа, SqlDataReader получает это десятичное значение. То, как они (строковые) представлены в вашем приложении, зависит от того, как вы это делаете: просто dataReader["myColumn"].ToString() будет использовать ваш текущий CultureInfo, Если вы хотите другую культуру, вы должны предоставить это явно.

Что произойдет, если они хранятся в varchar и пытаются использовать.GetDecimal()?

Когда они хранятся в виде строк, у вас возникает проблема (по крайней мере, если вы не знаете культуру, в которой были созданы эти строки). Вы должны использовать правильный CultureInfo сначала проанализировать эти строки, чтобы получить правильные значения. Но зачем вам хранить числа в виде строк в вашей БД?

Другие вопросы по тегам