2016-05-16 1 views
0
OleDbConnection con = new OleDbConnection(constring) 
con.Open() 
cmdstring = "UPDATE table SET date="+DateTime.Parse(txtdate.Text).ToString("dd/MM/yyyy") + " WHERE id = 1" 
OleDbCommand cmd = new OleDbCommand(cmdstring,con) 
cmd.ExecuteNonQuery() 
con.Close() 

Когда я пытаюсь обновить таблицу, используя этот код в одной из моих форм, это делается отлично. Но в другой форме я использую тот же код для обновления той же таблицы и одного столбца, но я получаю запутанную ошибку. Синтаксическая ошибка (отсутствующий оператор)C# Access DateTime UPDATE через DateTime.Parse

Пример: Дата в txtbox: 17.1.1987

Дата по ошибке: 17.1.198

DateTime.Parse нормально. Я попробовал, что он возвращает. Он возвращает 4-значный год. Но что происходит при обновлении доступа db?

С уважением ...

+0

использовать это => "UPDATE таблица SET дата = CONVERT (DateTime,«" + txtdate.Text +" ', 104) WHERE ID = 1" –

+0

Вы, вероятно, потребуется пробел перед WHERE в вашем примере. В фактическом коде, поскольку вы объединяете строку SQL, вам нужно проверить окончательный оператор SQL для любых синтаксических ошибок до его выполнения. – Alex

+0

Оба входа будут работать, как вы показали нам. Вам понадобится немного больше информации. Было бы полезно увидеть всю «cmdstring» для неудачного случая. При этом вы должны, вероятно, параметризовать свои запросы. Это не только безопаснее, но и более аккуратно и легче рассуждать. – Rob

ответ

1
cmdstring = "UPDATE table SET date='"+DateTime.Parse(txtdate.Text).ToString("dd/MM/yyyy") + "' WHERE id = 1" 

Вы нужны одиночные кавычки до и после значения даты.

+0

Это очень странно. Сначала я думал, что пробовал с кавычками. Но теперь это сработало. Благодарю. –

2

Всегда используйте параметризованные запросы. Особенно, когда вы имеете дело с датами в Access, вы можете столкнуться с такими проблемами.

DateTime dt; 
    bool canParse = DateTime.TryParseExact(txtdate.Text, 
             "dd/MM/yyyy",CultureInfo.InvariantCulture, 
             DateTimeStyles.None, 
             out dt); 
    if(canParse) 
    { 
     string sQuery = "UPDATE table SET date = @pdate WHERE ID = @pid"; 
     OleDbCommand updateCmd = new OleDbCommand(sQuery, Conn); 
     updateCmd.Parameters.Add("@pdate", OleDbType.Date).Value = dt; 
     updateCmd.Parameters.Add("@pid", OleDbType.Integer).Value = 1; 
     int rowsAffected = updateCmd.ExecuteNonQuery(); 
     /* Use the result from operation for some notification */ 
    } 
+0

Спасибо. Я попробую это поначалу. –