这样我在数据库中没有日期,如果它比我们现在的时间/日期少,那么它必须进入并刷新使用意志等级2.这意味着我们有,例如。现在是时候了,如果不是他在数据库中的权利,那么就不应该进去做任何事情。
这意味着如果日期看起来太旧了。
3/15/2015 09:34:42 AM(现在是。)和3/15/2015 04: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();
}
}
只有与我在一起的时间才是正确的内容,而不是数据库中的内容
答案 0 :(得分: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 ...
)