C# SQL数据表日期时间更新
所以,我的问题很复杂,很难解释。 我有一个名为“Members”的数据表(SQL),列为“Lengh”。 所以我想,每次启动程序时,检查是否有长度低于当前日期时间,并检查“状态”列是否过期。如果表中只有一行,它可以正常工作,但是如果有更多行,它只会更改一行。如何更改“长度”低于当前日期时间的所有行C# SQL数据表日期时间更新,c#,sql,date,datetime,C#,Sql,Date,Datetime,所以,我的问题很复杂,很难解释。 我有一个名为“Members”的数据表(SQL),列为“Lengh”。 所以我想,每次启动程序时,检查是否有长度低于当前日期时间,并检查“状态”列是否过期。如果表中只有一行,它可以正常工作,但是如果有更多行,它只会更改一行。如何更改“长度”低于当前日期时间的所有行 InitializeComponent(); SqlDataAdapter dt = new SqlDataAdapter("Select Lengh From Members",co
InitializeComponent();
SqlDataAdapter dt = new SqlDataAdapter("Select Lengh From Members",con);
DataTable adt = new DataTable();
dt.Fill(adt);
DateTime now = DateTime.Now;
DateTime chip = (DateTime)adt.Rows[0][0];
if (now>chip)
{
SqlDataAdapter dt2 = new SqlDataAdapter("Select [Reconizing ID] From Members Where [Lengh]='" + chip + "'", con);
DataTable adt2 = new DataTable();
dt2.Fill(adt2);
string kd = "Update Members Set Status='" + "Expired" + "' Where [Reconizing ID]='" + adt2.Rows[0][0] + "'";
SqlCommand cmd = new SqlCommand(kd,con);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
如果我执行无限循环,程序在启动前就会崩溃 您可以使用纯sql解决方案来解决此问题。 一次更新所有案例的sql语句如下所示
UPDATE MEMBERS SET STATUS = 'Expired' WHERE LENGH < ?
当然,这假定LENGH
是数据库中的日期类型列
注释1:如果您期望大量行(百万),那么考虑在<代码> Lengh < /Cuff>列上建立索引,以便更好地查询性能。
注2:一些应用程序和数据库在多个时区工作,或者有时应用程序服务器和数据库服务器之间会有时差。在我看来,从应用程序代码中传递日期-时间是一种很好的编码实践。为什么不在一个查询中完成呢?比如:
string query="UPDATE Members SET Status='Expired' WHERE @now>Lengh";
SqlCommand cmd= new SqlCommand(query,con);
cmd.Parameters.AddWithValue("@now",DateTime.Now);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
考虑到您的长度列是DateTime类型,您可以使用以下查询一次性更新该列
UPDATE Members SET Status ='Expired' WHERE Length < GETDATE()
updatemembers SET Status='Expired'其中Length
长度是否小于当前日期?似乎是一种非常奇怪的情况。它说Lengh
。。。不确定是打字错误,还是外语…还有海报:你需要使用循环。可能两个表adt
和adt2
都有多行,但您总是只取第一行(adt.rows[0]
),然后取第一列(adt.rows[0][0]
)。与adt2相同。您应该始终使用。这类字符串连接会受到攻击。用于自动处理连接、命令和适配器,而不是手动调用Close
或dispose
方法。我已尝试过,但它会给我带来转换错误或类似错误。。那么@now意味着什么呢?顺便说一句,它很有效,thx很多。。@now表示它现在将使用DateTime?请给出它抛出的确切错误。要了解@now
的含义,请参见示例。@now
是一个参数,并被cmd.Parameters.AddWithValue(“@now”,DateTime.now”)中所需的值替换谢谢,我不知道我可以这么做。。我想这会给我带来错误。
UPDATE Members SET Status ='Expired' WHERE Length < GETDATE()