вставить значение datetime в базу данных sql с помощью c # - PullRequest
30 голосов
/ 23 июня 2009

Как вставить значение datetime в таблицу базы данных SQL, в которой тип столбца - datetime?

Ответы [ 8 ]

81 голосов
/ 23 июня 2009

Следующее должно работать и это моя рекомендация (параметризованный запрос):

DateTime dateTimeVariable = //some DateTime value, e.g. DateTime.Now;
SqlCommand cmd = new SqlCommand("INSERT INTO <table> (<column>) VALUES (@value)", connection);
cmd.Parameters.AddWithValue("@value", dateTimeVariable);

cmd.ExecuteNonQuery();
16 голосов
/ 27 февраля 2014
 DateTime time = DateTime.Now;              // Use current time
 string format = "yyyy-MM-dd HH:mm:ss";    // modify the format depending upon input required in the column in database 
 string insert = @" insert into Table(DateTime Column) values ('" + time.ToString(format) + "')"; 

и выполнить запрос. DateTime.Now - вставить текущую дату и время ..

8 голосов
/ 23 июня 2009

Стандартнее использовать формат гггг-мм-дд чч: мм: сс (IE: 2009-06-23 19: 30: 20 )

При этом вам не придется беспокоиться о формате даты (ММ / ДД / ГГГГ или ДД / ММ / ГГГГ). Это будет работать со всеми из них.

3 голосов
/ 23 июня 2009
using (SqlConnection conn = new SqlConnection())
using (SqlCommand cmd = conn.CreateCommand())
{
    cmd.CommandText = "INSERT INTO <table> (<date_column>) VALUES ('2010-01-01 12:00')";
    cmd.ExecuteNonQuery();
}

Прошло некоторое время с тех пор, как я написал этот материал, так что это может быть не идеально. но общая идея есть.

ВНИМАНИЕ: это не подвергается санитарной обработке. Вы должны использовать параметры, чтобы избежать инъекционных атак.

РЕДАКТИРОВАТЬ: Поскольку Джон настаивает.

1 голос
/ 20 ноября 2018

Это более старый вопрос с правильным ответом (, пожалуйста, используйте параметризованные запросы ), который я хотел бы продолжить с некоторыми обсуждениями часовых поясов. Для моего текущего проекта меня интересовало, как столбцы datetime обрабатывают часовые пояса, и этот вопрос я нашел.

Оказывается, совсем нет.

Столбец

datetime хранит данный DateTime как есть, без преобразования. Не имеет значения, является ли указанное время и время UTC или местным.

Вы можете убедиться сами:

using (var connection = new SqlConnection(connectionString))
{
    connection.Open();
    using (var command = connection.CreateCommand())
    {
        command.CommandText = "SELECT * FROM (VALUES (@a, @b, @c)) example(a, b, c);";

        var local = DateTime.Now;
        var utc = local.ToUniversalTime();

        command.Parameters.AddWithValue("@a", utc);
        command.Parameters.AddWithValue("@b", local);
        command.Parameters.AddWithValue("@c", utc.ToLocalTime());

        using (var reader = command.ExecuteReader())
        {
            reader.Read();

            var localRendered = local.ToString("o");

            Console.WriteLine($"a = {utc.ToString("o").PadRight(localRendered.Length, ' ')} read = {reader.GetDateTime(0):o}, {reader.GetDateTime(0).Kind}");
            Console.WriteLine($"b = {local:o} read = {reader.GetDateTime(1):o}, {reader.GetDateTime(1).Kind}");
            Console.WriteLine($"{"".PadRight(localRendered.Length + 4, ' ')} read = {reader.GetDateTime(2):o}, {reader.GetDateTime(2).Kind}");
        }
    }
}

То, что это будет печатать, конечно, будет зависеть от вашего часового пояса, но , что наиболее важно, все прочитанные значения будут иметь Kind = Unspecified. Первая и вторая выходные строки будут отличаться смещением вашего часового пояса. Второй и третий будут одинаковыми. Использование строки формата "o" (в обе стороны) не покажет никаких спецификаторов часового пояса для прочитанных значений.

Пример вывода из GMT + 02: 00:

a = 2018-11-20T10:17:56.8710881Z      read = 2018-11-20T10:17:56.8700000, Unspecified
b = 2018-11-20T12:17:56.8710881+02:00 read = 2018-11-20T12:17:56.8700000, Unspecified
                                      read = 2018-11-20T12:17:56.8700000, Unspecified

Также обратите внимание на то, как данные усекаются (или округляются) до значения, равного 10 мс.

0 голосов
/ 09 марта 2017

вы можете отправить свое значение DateTime в SQL в виде строки в специальном формате. этот формат "гггг-мм-дд чч: мм: сс"

Пример: CurrentTime - это переменная типа datetime Введите SQL. И dt является переменной DateTime в .Net.

DateTime dt=DateTime.Now;
string sql = "insert into Users (CurrentTime) values (‘{0}’)";

sql = string.Format(sql, dt.ToString("yyyy-MM-dd HH:mm:ss") );
0 голосов
/ 07 сентября 2016

Преобразовать существующий объект DateTime в string с одинарными кавычками вокруг него. Я не думаю, что действительно имеет значение, какой это формат, пока он действителен.

Примерно так:

string data = "'" + date.ToString() = "'";

При желании вы можете создать новый формат и передать его в качестве параметра data.ToString(format);

0 голосов
/ 23 июня 2009
INSERT INTO <table> (<date_column>) VALUES ('1/1/2010 12:00')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...