Системный разделитель

295
29 марта 2017, 14:24

Проблема с dataGridView, когда по умолчанию в системе стоит разделитель "," матюкается БД что не может привести varchar к numeric меняешь разделитель на "." все становится ок. Мне не нравится вариант что каждому юзеру надо менять разделитель, подскажите что делать, ведь 100% есть готовый вариант и решение.

Вот что я делаю

for (int i = 0; i < dgv_mainWindow.RowCount; i++)
{
    cmd.CommandText = "UPDATE newRegistr " +
        "SET departedTime = '" + dgv_mainWindow.Rows[i].Cells["startTime"].Value + "', " +
        "arrivedTime = '" + dgv_mainWindow.Rows[i].Cells["finishTime"].Value + "', " +
        "pal = '" + dgv_mainWindow.Rows[i].Cells["pal"].Value + "', " +
        "kg = '" + dgv_mainWindow.Rows[i].Cells["kg"].Value + "', " +
        "addKm = '" + dgv_mainWindow.Rows[i].Cells["addKm"].Value + "' " +
        " WHERE shiftCode = '" + GlobalVariable.sh + "' and sort = " + i + " ";
    cmd.ExecuteNonQuery();
}  

В БД колонка kg и addKm numeric.

Answer 1

Для начала я бы привел даный код к следующему виду:

for (int i = 0; i < dgv_mainWindow.RowCount; i++)
{
    var startTime = dgv_mainWindow.Rows[i].Cells["startTime"].Value;
    var finishTime = dgv_mainWindow.Rows[i].Cells["finishTime"].Value;
    var pal = dgv_mainWindow.Rows[i].Cells["pal"].Value;
    var kg = dgv_mainWindow.Rows[i].Cells["kg"].Value;
    var addKm = dgv_mainWindow.Rows[i].Cells["addKm"].Value;
    cmd.CommandText = $"UPDATE newRegistr " +
        "SET departedTime = '{startTime} + ', arrivedTime = '{finishTime}', " +
        "pal = '{pal}', kg = '{kg}', addKm = '{addKm}' " +
        " WHERE shiftCode = '{GlobalVariable.sh}' and sort = {i}";
cmd.ExecuteNonQuery();

}

Мне не нравится вариант что каждому юзеру надо менять разделитель, подскажите что делать, ведь 100% есть готовый вариант и решение. Предлагаю на вскидку 2 варианта:

  1. Изменить настройки системы на другой разделитель (не факт что у тебя в системе стоит адекватный)

  2. делаешь .Replace(".", ",") (ну или наоборот) на нужном значении :)

  3. изменить .DefaultCellStyle.Format на такой, как тебе нужно. (не забывая протестить на обеих системных разделителях, если твоя апликушка должна пахать на обеих)

А вообще, апдейтить нужно только ту строку, которая проапдейтилась. Потому твой код вообще в корне неверный, ведь, ты апдейтишь ВСЕ строки вообще. Даже, если менялась лишь одна. А если у тебя в таблице будет 100000000 значений? :)

У тебя есть следующие варианты:

  • После каждой измененной ячейки сразу апдейдить.
  • Или же сохранять в некий буфер измененные Rows которые нужно проапдейтить. а потом уже из этого буфера апдейтить уже написаным циклом.
READ ALSO
POST-Запрос и его ответ

POST-Запрос и его ответ

Вступление: У РЖД есть такая программа лояльности - РЖД БонусСуть её в том, что за успешные поездки пассажирам полагается некий бонус

277
Сравнение данных 2-х массивов C#

Сравнение данных 2-х массивов C#

Дано два массива :

297
Почему sayi1 принемает значение sayi2?

Почему sayi1 принемает значение sayi2?

sayi1 принемает значения sayi2 не могу понять почемуВроде бы sayi2 = sayi1 то есть в sayi2 перекидываются значения sayi1 но потом когда sayi2 = 5 и это же значение...

303
ASP MVC 5 Проблемы развертывания в Azure

ASP MVC 5 Проблемы развертывания в Azure

Использую VS 2017Сама визуальная часть отлично публикуется и доступна по url

359