исключение службы Windows в .NET - PullRequest
0 голосов
/ 17 мая 2011

Я буду тестировать приложение как приложение Windows, затем оно будет хранить дату и время в базе данных MySQL. Когда я буду запускать это приложение, используя службу Windows, будет выдано это исключение.

error [HY000][MySQL][ODBC 3.51 Driver] [MySqlid -6.0.11-alpha-community]incorrect datetime value " 5/6/2011 9:00:00 AM" for column column-name at row1
 

Приложение Windows принимает системный формат, и мой системный формат - гггг-ММ-дд чч: мм: сс в службе Windows, какой формат используется.

query18 += "select '" + obj8 + "' as DTvalue ,'" + date8 + "' as DTdatelogged1 ,'" + OpcGroup.QualityToString(e8.sts[counter8].Quality) + "' as DTquality ,'" + DateTime.FromFileTime(e8.sts[counter8].TimeStamp) + "' as DTtimestamp ,'" + e8.sts[counter8].HandleClient + "' as DTparamID Union " + Environment.NewLine;

UpdateQuery = Update parameter t Left join + Environment.NewLine;
                    UpdateQuery8 +=  (  + query18 +  ) Temp on" + Environment.NewLine;
                    UpdateQuery8 += t.itemID=Temp.DTparamID+ Environment.NewLine;
                    UpdateQuery8 += set paramvalue=DTvalue, date_logged1=DTdatelogged1,Quality=                         DTquality,date_logged=DTtimestamp   + Environment.NewLine;
                    UpdateQuery8 += where t.groupID=9 and t.itemID=Temp.DTparamID;

Мой запрос, например, значение метки времени равно 129500892576718750, он будет преобразован в DateTimeПреобразованное значение функции .FromFileTime (), например «2011-05-17 12:30:57», в приложении Windows будет записано в базу данных MySQL, но в преобразованном значении службы Windows, например 2011/05/17 12:30:57, будетне принимается базой данных MYSQL, то же самое, что я буду использовать в службе Windows

сейчас

UpdateQuery8 = "Update parameter " + Environment.NewLine;
                        UpdateQuery8 += "set paramvalue=@paramvalue,date_logged1=@date_logged1,Quality=@Quality,date_logged=@date_logged" + Environment.NewLine;
UpdateQuery8 += "where groupID=9 and itemID=@itemID";
                        cmd8 = new OdbcCommand(UpdateQuery8, con136);
  cmd8.Parameters.Add("@paramvalue",  obj8.ToString());
  cmd8.Parameters.Add("@date_logged1", date8);
 cmd8.Parameters.Add("@Quality", OpcGroup.QualityToString(e8.sts[counter8].Quality));
  cmd8.Parameters.Add("@date_logged", dt);
  cmd8.Parameters.Add("@itemID",e8.sts[counter8].HandleClient);
  cmd8.ExecuteNonQuery();

будет выполнено, но в базе данных нет обновлений

Пожалуйстапомогите мне в этом.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 17 мая 2011

Всегда используйте параметризованные запросы для передачи данных в драйвер БД. Затем драйвер должен правильно отформатировать даты, и вы не будете подвержены SQL-инъекциям атакам.

0 голосов
/ 17 мая 2011

Создайте дату и отформатируйте ее так, как вы хотите. Не системные значения по умолчанию, не случайные пользовательские значения по умолчанию, которые вы хотите.

DateTime dt = DateTime.Now;
String str = dt.ToString("yyyyMMdd");

Это должно привести к "20110517", если я не ошибаюсь.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...