Являются ли методы.net SqlDataReader культурными инвариантами?
Я не могу найти точного ответа на вопрос, что произойдет, если, например, мои десятичные числа хранятся в базе данных с различными настройками культуры, и я хочу получить их через SqlDataReader в мою программу. Будут ли ',' и '.' всегда правильно анализировать и преобразовывать в мою текущую культуру, если тип данных в SQL-DB установлен в десятичное число?
Что произойдет, если они хранятся в varchar и пытаются использовать.GetDecimal()?
1 ответ
Являются ли методы.net SqlDataReader культурными инвариантами?
SqlDataReader
не использует CultureInfo
или что-то эквивалентное. Он не знает культур.
Когда ваши значения хранятся в БД в виде десятичного числа, SqlDataReader получает это десятичное значение. То, как они (строковые) представлены в вашем приложении, зависит от того, как вы это делаете: просто dataReader["myColumn"].ToString()
будет использовать ваш текущий CultureInfo
, Если вы хотите другую культуру, вы должны предоставить это явно.
Что произойдет, если они хранятся в varchar и пытаются использовать.GetDecimal()?
Когда они хранятся в виде строк, у вас возникает проблема (по крайней мере, если вы не знаете культуру, в которой были созданы эти строки). Вы должны использовать правильный CultureInfo
сначала проанализировать эти строки, чтобы получить правильные значения. Но зачем вам хранить числа в виде строк в вашей БД?