2015-03-15 15 views
-3

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

Это означает, что если дата выглядит так, она слишком старая.

3/15/2015 09:34:42 AM (это теперь.) И 3/15/2015 4:34:42 AM

Так он должен перейти в код, чтобы обновить пользователя к получить ранг 2

while (readerBrugere.Read()) 
    { 
    string brugerid = readerBrugere["id"].ToString(); 
    DateTime brugerdato = Convert.ToDateTime(readerBrugere["trydato"].ToString()); 
    conn1.Close(); 

    if (Convert.ToDateTime(DateTime.Now.ToString("ddmmyyyyHHmmss")) > Convert.ToDateTime(brugerdato)) 
    { 
     int rankid = 2; 

     cmd1.CommandText = "UPDATE brugere SET rank = @rank WHERE Id = @brugerid;"; 
     cmd1.Parameters.AddWithValue("@rank", rankid); 
     cmd1.Parameters.AddWithValue("@brugerid", brugerid); 

     conn1.Open(); 
     cmd1.ExecuteNonQuery(); 
     conn1.Close(); 
    } 
    } 

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

+2

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

+0

Есть некоторые бессмысленные преобразования DateTime. DateTime To String to DateTime ничего не делает – Plutonix

+0

@JoelCoehoorn Я сделал это сейчас и надеюсь, что это лучше. –

ответ

0

текст вашего вопроса трудно расшифровать, но глядя на код Я могу предложить значительно улучшенную версию:

while (readerBrugere.Read()) 
{ 
    //if these columns cannot be null, you should be able to use a simple cast 
    int brugerid = (int)readerBrugere["id"]; 
    DateTime brugerdato = (DateTime)readerBrugere["trydato"]; 

     //don't close your database connection here 

    //These values are *already* datetimes. There's not need to convert to datetime 
    // and *especially* no need to convert to strings to compare them 
    if (DateTime.Now > brugerdato) 
    { 
     // the "2" is a constant: just code it into the query that way 
     string sql = "UPDATE brugere SET rank = 2 WHERE Id = @brugerid;"; 

     //or maybe you wanted this instead: 
     string sql = "UPDATE brugere SET rank = rank + 1 WHERE Id = @brugerid;"; 

     //AddWithValue() kinda sucks somtimes. I prefer to do it like this instead: 
     cmd1.Parameters.Add("@brugerid", SqlDbType.Int).Value = brugerid; 

     //don't use the same connection as you did for the outer query: 
     using (var cn2 = new SqlConnection(conn1.ConnectionString)) 
     using (var cmd2 = new SqlCommand(sql, cn2)) 
     { 
      cmd2.ExecuteNonQuery(); 
     } 
    } 
} 

Наконец, все это действительно спорный вопрос, так как я ожидаю, что вы можете сделать весь этот процесс в базе данных с помощью одного запроса:

UPDATE brugere 
SET rank = rank + 1 
WHERE trydato <= current_timestamp AND brugerdi IN 
    ( 
    ...existing query goes here, but only select the brugerdi column ... 
    ) 
+0

Да человек. он работает для меня сейчас, и у меня нет проблем! : D Спасибо за помощь! –