Класс C # DateTime и Datetime в базе данных - PullRequest
0 голосов
/ 18 июня 2010

У меня следующая проблема.

У меня есть объект с некоторыми свойствами DateTime и таблица в базе данных, в которой я храню все эти объекты. На сервере Sql я хочу сохранить свойства DateTime в некоторых столбцах типа данных DateTime, но формат datetime на сервере SQL отличается от класса DateTime в c #, и я получил исключение sql, говорящее «DateTime не может быть проанализирован». Я знаю, как решить эту проблему с помощью формата yyyy-MM-dd, но является ли это правильным и лучшим решением для этого?

public void UpdateInvitation(string ownerId, string couponKey, string status, string invitedEmail, DateTime? sentDate, DateTime? redeemedDate)
    {
        using (var con = new SqlConnection(this.ConnectionString))
        {
            try
            {
                con.Open();
                var command =
                        new SqlCommand(
                                "UPDATE INVITATIONS SET Status='@status', InvitedEmail='@invitedEmail', SentDate='@sentDate', RedeemDate='@redeemedDate' WHERE CouponKey='@CouponKey' AND OwnerId='@OwnerId'");
                var ownerIdParam = new SqlParameter("@ownerId", ownerId);
                var couponKeyParam = new SqlParameter("@couponKey", couponKey);
                var statusParam = new SqlParameter("@status", status);
                var invitedEmailParam = new SqlParameter("@invitedEmail", invitedEmail);
                var sentDateParam = new SqlParameter("@sentDate", sentDate.Value) { SqlDbType = SqlDbType.DateTime };
                var redeemedDateParam = new SqlParameter("@redeemedDate", redeemedDate.Value) { SqlDbType = SqlDbType.DateTime };
                command.Parameters.AddRange(new[]
                                            {
                                                    ownerIdParam, couponKeyParam, statusParam, invitedEmailParam,
                                                    sentDateParam, redeemedDateParam
                                            });
                command.Connection = con;
                var rowsAffected = command.ExecuteNonQuery();
                Log.DebugFormat("Invitation updated for owner id : [{0}] with key {1}, {2} rows affected", ownerId,
                                couponKey, rowsAffected);
            }
            catch (Exception exception)
            {
                throw new InvitationDataContextException(exception);
            }
        }
    }

Ответы [ 3 ]

7 голосов
/ 18 июня 2010

без кавычек

new SqlCommand("UPDATE INVITATIONS SET Status=@status, InvitedEmail=@invitedEmail, SentDate=@sentDate, ...
0 голосов
/ 20 июня 2010

Если вы используете SQL Server 2008, новый тип данных datetime2 сопоставляется непосредственно с объектом .NET DateTime.Если вы застряли с использованием старого поля даты и времени в SQL, будьте осторожны, вы не пропустите дату вне допустимого диапазона, иначе вы увидите ошибку времени выполнения.Попытка вставить DateTime.MinValue является распространенной ошибкой.

0 голосов
/ 18 июня 2010

Ну, не глядя на ваш код, я бы посоветовал вам начать использовать Параметризованные запросы .

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