• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Дробные числа в Ms Sql

  • Автор темы Real-Mulik
  • Дата начала
Статус
Закрыто для дальнейших ответов.
R

Real-Mulik

Есть БД в MS SQL 2000. В таблице имеются поля типа float. Региональные настройки: Русский.

Как сформировать запрос для добавления новой записи в таблицу? Думаю надо менять региональные настройки, однако результата это не принесло (я менял их руками через панель управления), можно ли как-то без изменения параметров системы перевести разделитель "," на "."?
Вот пример кода:
Код:
SqlCommand cmd = new SqlCommand(
string.Format("INSERT INTO (id, id_exp, id_creet, name, maxRes, midRes, minRes) VALUES ({0},{1},{2},'{3}',{4},{5},{6})",
id,idExp,idCreet,Name,maxRes.ToString("F"),midRes.ToString("F"),minRes.ToString("F")),con);

, где maxRes, midRes, minRes типа float.
 
R

Real-Mulik

Есть мыслишька бросать число в отделную функцию - переводить в String делать замену с "," на "." и возвращать в тпе String. Но как-то накручено мне кажеться :unsure:
 
R

Real-Mulik

Выход из положения:

Код:
SqlCommand cmd = new SqlCommand(
string.Format("INSERT INTO shkala (id, id_exp, id_creet, name, maxRes, midRes, minRes) VALUES ({0},{1},{2},{3},{4},{5},{6})",
id,idExp,idCreet,Name,maxRes.ToString().Replace(',', '.'),midRes.ToString().Replace(',', '.'),minRes.ToString().Replace(',', '.')),con);
 
M

mr_ST

Выход из положения:

Код:
SqlCommand cmd = new SqlCommand(
string.Format("INSERT INTO shkala (id, id_exp, id_creet, name, maxRes, midRes, minRes) VALUES ({0},{1},{2},{3},{4},{5},{6})",
id,idExp,idCreet,Name,maxRes.ToString().Replace(',', '.'),midRes.ToString().Replace(',', '.'),minRes.ToString().Replace(',', '.')),con);

Не, это не выход. Это вход в положение раком.

Пользуйтесь параметрами:
Код:
SqlCommand cmd = new SqlCommand("INSERT INTO shkala (id, id_exp, id_creet, name, maxRes, midRes, minRes) VALUES (@id,@idExp,@idCreet,@Name,@maxRes,@midRes,@minRes)", con);

cmd.Parameters.Add(new SqlParameter("@id", id));
cmd.Parameters.Add(new SqlParameter("@idExp", idExp));
cmd.Parameters.Add(new SqlParameter("@idCreet", idCreet));
cmd.Parameters.Add(new SqlParameter("@Name", Name));
cmd.Parameters.Add(new SqlParameter("@maxRes", maxRes));
cmd.Parameters.Add(new SqlParameter("@midRes", midRes));
cmd.Parameters.Add(new SqlParameter("@minRes", minRes));
 
R

Real-Mulik

Спасибо. Давно искал пример создания запроса с параметрами. :blink:

Я так понимаю, что
Код:
cmd.Parameters.Add(new SqlParameter("@maxRes", maxRes));
Автоматически переделает форматы с "," на "."? Если нет, то без Replace не обойтись :p

Да и ещё: А чем такой подход лучше?
 
M

mr_ST

Спасибо. Давно искал пример создания запроса с параметрами. :blink:

Я так понимаю, что
Код:
cmd.Parameters.Add(new SqlParameter("@maxRes", maxRes));
Автоматически переделает форматы с "," на "."? Если нет, то без Replace не обойтись :p

На куй ему перводить, данный в бинарном виде уйдут.

Да и ещё: А чем такой подход лучше?

Так завещал великий Ленин! Не зависит от локали. Защищено от sql injection, если не ошибаюсь. Меньше траффика, меньше преобразований, меньше памяти, код более общий. А с реплэйсами это детский сад, уж извини. И потом, всякие блобы и мемы ты чисто строковой командой не заинсертишь.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!