説明: datetime lasthello と文字列 isconnect を含むクライアント オブジェクトのリストがあります。オブジェクトをランタイム リストではなく SQL テーブルに移動しました。私の質問は、以下が存在するエントリを探してテーブルを実行し、それを変更するにはどうすればよいですか。- かなり最適化された方法で (最適化とは高速という意味です)、「ホールド」も設定ファイルではなくテーブルに配置されます。isconnect はブール値になり、文字列ではなくなりました。
foreach(entry in mylist)
{
if ((DateTime.Now - TimeSpan.FromSeconds(Settings.Default.Hold)) > entry.lasthello &&
entry.isConnect != "Disconnected")
{
entry.client.Disconnect();
}
}
SQL クエリ内でタイムスパンを計算するにはどうすればよいですか? 複数のクエリで実行する必要がありますか?
解決しました!
using (SqlConnection conn = new SqlConnection(Connectionstring))
{
SqlCommand cmd = new SqlCommand(DisconnectOnNoHello, conn);
cmd.Parameters.AddWithValue("@lasthello",(DateTime.Now - TimeSpan.FromSeconds(Convert.ToDouble(hold))));
try
{
IScsServerClient client = (IScsServerClient)ByteArrayToObject((byte[]) cmd.ExecuteScalar());
client.Disconnect();
closeConnection(conn);
}
catch (Exception ex)
{
EventLog.WriteEntry(ex.ToString());
}
}