dateTimePicker.Value.Date.ToShortDateString();
은 Windows 7 x64 PL, Windows Vista x32 PL 및 Windows XP PL에서 다르게 동작 할 수있는 이유는 정확한 지역 설정입니다. 나는 그것을 DB에 입력하기 전에이 변환을하는 것이 어렵다는 것을 발견했습니다.C# 및 SQL 데이터베이스의 지역적 문제
Windows 7 (내 개발 컴퓨터), 동료 VISTA 시스템에서 제대로 작동했지만 Windows XP에서 작동하지 못했습니다 (하루가 항상 월로 전환됨). 또한 상위 시스템에서는 2010 년 1 월 13 일을 ListView
에 표시하고 자신의 시스템에는 13-01-2010을 표시합니다.
나는 내 옛날 코드에서 더 많은 타입 변환을 할 수 있다고 상상해 본다. 그리고 나는 그것을 통과해야만 할 것이다. 그러나 나는 그것이 같은 지역 설정에서 그렇게 행동하는 이유를 알고 싶다. 나는 결코 그런 전환을해서는 안된다고 생각하지만 오랜 시간이 지나면 잘 작동하는 것을 힘든 방법으로 배웠습니다.
편집: 나는이 방법을 사용했다
(문제를 일으키는 코드를 주석). 위로 옛날 나는 ToShortDateString이 Time (DateTimePicker를 읽었을 때부터)없이 DB에 넣을 수있는 유일한 방법이라고 생각했습니다. 나는 DateTimePicker에서 .Date를 사용 했어야했음을 알았지 만 이제는 나에게 불어났다. 코드는 다음과 같습니다.
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을 사용하여 db에 직접 전달할 수 있음을 알고있다. 그냥 내가 왜 1 기계에서 다르게 행동 할 것인지 알고 싶습니다. 즉,이 날짜에 대한 일반적인 방법이기 때문에
왜 'DateTime'을 문자열로 변환해야합니까? 매개 변수를 사용한다면'DateTime' 인스턴스를 직접 전달할 수 있습니다. (그리고 매개 변수를 사용하지 않는다면 ... 왜 안 되니?) –
글쎄, 내 옛날 코드라고 했지. 많은 일을하기 전에는 안됩니다. DateTime을 올바르게 전달하기 위해 매개 변수를 사용하고 있습니다. 올바르게 작동 했으므로 변경하지 않아도되었습니다. 나는 그것을 배우고있는 동안 내가했던 모든 '나쁜'것들을 고치고 교정 할 달 청소에 그것을하기 위해 그것을 계획했다. – MadBoy