Как я могу сделать это с помощью одного запроса в C #? - PullRequest
1 голос
/ 21 сентября 2011

Я хочу сделать их пассивными, если дата ранее, чем сегодня, из записанных дат в базе данных с помощью команды обновления. Как я могу сделать это с помощью одного запроса в C #?

Colums: Tarih (nvarchar)Durum (nvarchar)

Например;

if tarih<Datetime.Today.Date is set Durum='PASİF' 

Код:

string sorgu = "select BitTarihi from Abonelikler";
        SqlConnection gg = new SqlConnection(constr);
        SqlCommand gg2 = new SqlCommand(sorgu,gg);
        SqlDataReader gg3;
        gg.Open();
       gg3= gg2.ExecuteReader();
       while (gg3.Read())
       {
           DateTime b1 = new DateTime();
           DateTime b2 = new DateTime();
           b1 = Convert.ToDateTime(gg3.GetString(0));
           b2 = DateTime.Today.Date;
           TimeSpan fark = new TimeSpan();
           fark = b2 - b1;
           if (fark.TotalDays > 0)
           {
               SqlConnection vv = new SqlConnection(constr);
               SqlCommand vv2 = new SqlCommand("update Abonelikler set Durum='PASİF' where BitTarihi='" + b1.ToShortDateString() + "'", vv);
               vv.Open();
               vv2.ExecuteNonQuery();
               vv.Close();
               vv2.Dispose();

           }


       }
        gg.Close();
       gg2.Dispose();

Ответы [ 2 ]

1 голос
/ 21 сентября 2011

Вместо обновления записей, почему вы не определяете состояние на уровне запроса?Поскольку вы проверяете это каждый день, будет много ненужных обновлений.

SELECT BitTarihi, CASE WHEN DATEDIFF(DAY, BitTarihi, GetDate()) = 0 THEN 'AKTIF' ELSE 'PASIF' END DURUM FROM Abonelikler 

Таким образом, вам не придется обновлять свои записи.

1 голос
/ 21 сентября 2011

Посмотрите на функцию DATEDIFF .

UPDATE Abonelikler SET Durum='PASIF' 
    WHERE DATEDIFF(DD, CONVERT(datetime, BitTarihi), GETDATE())>0

Также, пожалуйста, не используйте конкатенацию оператора SQL, используйте параметры.Это более безопасно, а иногда объединение операторов с параметрами затрудняет оптимизацию операторов на стороне сервера.

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