Почему бы dateTimePicker.Value.Date.ToShortDateString();
действовать по-разному в Windows 7 x64 PL, Windows Vista x32 PL и Windows XP PL, насколько мне известно, с точными региональными настройками. Я нашел это трудным способом, которым я делал это преобразование прежде, чем ввести это в DB.
Это работало нормально на Windows 7 (моя машина для разработки), коллега по системе VISTA, но не работало на Windows XP (день менялся на месяц все время). Также в более высоких системах у нас 2010-01-13 отображается на ListView
, в то время как в его системе он имеет 13-01-2010.
Я предполагаю, что в моем старом коде у меня может быть больше таких преобразований типов, и мне нужно будет пройти и проверить его, но я хотел бы знать, почему он ведет себя таким же образом в тех же региональных настройках. Я полагаю, что никогда не должен делать такие преобразования, но я научился этому нелегко после долгого времени, когда он работал нормально.
EDIT:
Я использовал его таким образом (закомментировал код, который вызывал проблемы). В старые времена я думал, что ToShortDateString - это единственный способ убедиться, что он помещен в БД без времени (так как я читал DateTimePicker). Теперь я знаю, что должен был использовать .Date для этого DateTimePicker, но теперь я стал умнее, потому что он взорвал меня. Вот код:
private static void sqlWpiszDaneSwieta(DateTime varData, string varDataNazwa) {
//string varDataSwieto = varData.ToShortDateString();
const string preparedCommand = @"INSERT INTO [dbo].[TypyDatySwiat]
([SwietaData]
,[SwietaNazwa])
VALUES
(@varData
,@varDataNazwa)";
using (var varConnection = Locale.sqlConnectOneTime(Locale.sqlDataConnectionDetails))
using (SqlCommand sqlWrite = new SqlCommand(preparedCommand, varConnection)) {
sqlWrite.Prepare();
sqlWrite.Parameters.AddWithValue("@varData", varData);
sqlWrite.Parameters.AddWithValue("@varDataNazwa", varDataNazwa);
try {
sqlWrite.ExecuteNonQuery();
} catch (SqlException sqlEx) {
if (sqlEx.Message.Contains("Violation of PRIMARY KEY constraint")) {
MessageBox.Show("Dodanie podanego święta jest niemożliwe. Podane święto istnieje już w bazie danych!", "Bład", MessageBoxButtons.OK, MessageBoxIcon.Error);
} else {
MessageBox.Show(sqlEx.ToString(), "Bład SQL", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
} catch (Exception ex) {
MessageBox.Show(ex.ToString(), "Bład", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
Так что я специально не спрашиваю, как это сделать. Я знаю, как это сделать, и что я могу передать его с помощью DateTime непосредственно в БД. Просто я хотел бы знать, почему он ведет себя по-разному на 1 машине.