2017-02-14 30 views
0

Я работаю над следующей проблемой, и я не могу найти ответ.Вставить десятичные значения в MySQL с C#

Я получил следующий код:

public void CreateCmd (string g_cmd,params object[] g_params) 
    { 
     int i = 0; 
     MySqlCommand cmd = verbindung.CreateCommand(); 
     cmd.CommandText = g_cmd; 
     foreach(object param in g_params) 
     { 
      cmd.Parameters.AddWithValue("?param"+i.ToString(), param.ToString()); 
      i++; 
     } 
     verbindung.Open(); 
     cmd.ExecuteNonQuery(); 
    } 

Метод работает нормально (до сих пор), но если я хочу, чтобы вставить двойной ПДБ он получил укоротить базу данных (?). Е. г .:

Код я вызвать метод с:

database.CreateCmd("INSERT INTO `orders` (`id`, `time`, `tax`, `netto`, `brutto`) VALUES(NULL, CURRENT_TIMESTAMP, ?param0, ?param1, ?param2)", 0.19, 201.5, 239.785); 

вход которым показан в PHPMyAdmin: Screenshot from PHPMyAdmin

Структура таблицы (я попробовал различные данные типы): another cs of MDB

Надеюсь, вы можете сказать мне, что я делаю неправильно.

Приветствия Polarety

+0

Возможно, это слишком рано, и мои колеса еще не начали полностью вращаться, но что вы имеете в виду, когда говорите «MDB»? _It заставляет меня думать, что вы говорите о MSAccess._ – Uueerdo

+0

Я использую XAMPP с MariaDB (MDB) вместо MySQL. Я знаю, что это почти симуляция, но я не знаю, является ли это причиной того, что это не сработало. – Polarety

+0

AddWithValue не может заранее знать, что такое тип данных в базе данных, и поэтому он строит параметр строки из-за вашего ToString(), но это преобразует ваш ввод в строку, используя ваши настройки локали. База данных не любит запятую как десятичный разделитель и хочет точку. – Steve

ответ

0

Это может быть вопрос культуры, где база данных, ожидающей запятой (,) вместо периода (.)?

В противном случае, проверьте, если база данных настроена быть UNSIGNED, согласно документации here для MariaDB

Кроме того, поскольку вы храните деньги, пожалуйста, быть в курсе вопросов с плавающей точкой. Может быть, вам стоит подумать о фиксированной точке?

0

Право.

После того как я отредактировал

cmd.Parameters.AddWithValue("?param"+i.ToString(), param.ToString()); 

в

cmd.Parameters.AddWithValue("?param"+i.ToString(), param.ToString().Replace(",",".")); 

Он работает. Спасибо!