这样
,我在数据库中没有日期,如果它小于我们现在的时间/日期,那么它必须进入并刷新使用意志排名 2。例如,这意味着我们有。现在是时候了,如果它不合适,那么数据库里的人就不应该进去做任何事情。
这意味着如果日期看起来像这样,它是不是太旧了。
2015/3/15 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();
}
}
它只会在与我在一起的时间比数据库中的时间正确时运行内容
你的问题文本很难破译,但看看代码,我可以建议一个大大改进的版本:
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 ...
)