Вставьте дату в SQL, не заботясь о региональных настройках - PullRequest
1 голос
/ 13 февраля 2012

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

Как клиентское приложение может предоставить дату в любом формате (последний вход в систему)определенного пользователя) и сохраните его в таблице SQL Server, которая может быть установлена ​​с другими региональными настройками (французский, английский, итальянский, немецкий и т. д.).

Ответы [ 6 ]

4 голосов
/ 13 февраля 2012

Просто: не используйте строки.Используйте параметр, который вводится как datetime;может быть простым:

DateTime when = ...

using(var cmd = conn.CreateCommand()) {
    cmd.CommandText = "... @when ...";
    cmd.Parameters.AddWithValue("when", when);
    cmd.ExecuteNotQuery();
}

или с "dapper":

conn.Execute("... @when ...", new { when });

Даты / времена на самом деле являются просто числами.Только когда вы пишете / анализируете это как строку, форматирование является проблемой.

1 голос
/ 13 февраля 2012

для вставки даты в SQL используйте строку в форме «ГГГГММДД»
что происходит со стороны клиента, вы должны знать, что это такое

1 голос
/ 13 февраля 2012

Просто сохраните все в формате UTC в sqlserver.И при получении даты конвертировать дату utc в часовой пояс пользователя.Я надеюсь, что часовой пояс пользователей поддерживается в вашей базе данных.Вам понадобится таблица часовых поясов и функция преобразования, которая преобразует время UTC в местное время пользователя.

0 голосов
/ 13 февраля 2012

часть проверки

DateTime dt;
string YourDate = "Your Date";
if (DateTime.TryParse(YourDate, out dt))
{
     //Your Code
}

Вставка / извлечение записи хранимой процедуры

using (System.Data.SqlClient.SqlConnection con = new SqlConnection("YourConnection string")) 
{
    con.Open();
    SqlCommand cmd = new SqlCommand();
    string expression = "Date Parameter value";
    DateTime dt;
    if (DateTime.TryParse(expression, out dt))
    {
       //Your Code
    }
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = "Your Stored Procedure";
    cmd.Parameters.Add("Your Parameter Name", SqlDbType.VarChar).Value = expression;
    cmd.Connection = con;
    using (IDataReader dr = cmd.ExecuteReader()) 
    {
       if (dr.Read()) 
       {
       }
    }
}

При хранении данных на сервере Sql. Сохраняйте формат данных согласованным и синхронизированным с форматом данных при извлечении ....

0 голосов
/ 13 февраля 2012

Использовать формат даты и времени, а сохранять даты как время UTC .

Возможно, вас также заинтересует datetimeoffset .

0 голосов
/ 13 февраля 2012

Вы должны использовать параметры, но вы также можете отформатировать дату в формате ISO с помощью date.ToString("s")

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