IP アドレスに ping を実行するコードを以下に示しますが、このコードを実行すると、データベースに更新がないため実行されません。
Start
コードは次のとおりです。
protected void Start()
{
string ip_STCKL = "*.*.10.";
string ip_STCKCH = "*.*.128.";
for (int ipCount = ip_addr; ipCount < 195; ipCount++)
{
string ip = ip_STCKL + ipCount.ToString();
string loopIp = ip;
WaitCallback func = delegate(object state)
{
if (PingIP(loopIp))
{
UpdateStatusKL(loopIp, true);
Console.WriteLine("Ping Success");
}
else
{
loopIp = ip_STCKCH + ipCount.ToString();
if (PingIP(loopIp))
{
UpdateStatusKL(loopIp, true);
//Console.WriteLine("Ping Success");
}
else
{
UpdateStatusKL(loopIp, false);
//Console.WriteLine("Ping Failed");
}
}
};
ThreadPool.QueueUserWorkItem(func);
//ThreadPool.GetAvailableThreads;
}
//Console.ReadLine();
}
これは、ステータスを取得するための ping 関数です。
public static bool PingIP(string IP)
{
bool result = false;
try
{
Ping ping = new Ping();
PingReply pingReply = ping.Send(IP);
if (pingReply.Status == IPStatus.Success)
result = true;
}
catch(Exception)
{
result = false;
}
return result;
}
ステータスを取得したら、データベースに更新します。
public void UpdateStatusKL(string IP, bool Status)
{
string New_Status = "";
if (Status)
{
New_Status = "REACHABLE";
}
else
{
New_Status = "UNREACHABLEE";
}
//Declare the connection object
OracleConnection Conn = new OracleConnection("Data Source=COMMSERVERKL;User
Id=mt_mon;Password=butus123");
//Make the connection
Conn.Open();
//Define you query
string sql = "UPDATE BalaiConnectionStatus SET Balai_Status = :pstatus,
Timestamp = :pTime WHERE IP_STCKL = :pIP OR IP_STCKCH = :pIP";
//Declare the Command
OracleCommand cmd = new OracleCommand(sql, Conn);
//Add the parameters needed for the SQL query
cmd.CommandType = CommandType.Text;
cmd.Parameters.Add("pstatus", OracleType.VarChar).Value = New_Status;
cmd.Parameters.Add("pTime", OracleType.VarChar).Value =
DateTime.Now.ToString();
cmd.Parameters.Add("pIP", OracleType.VarChar).Value = IP;
//Execute the query
cmd.ExecuteNonQuery();
Conn.Close();
}
タイマーがトリガーされると、15 分ごとにStart
関数が呼び出され、すべての IP アドレスへの ping が再度開始されます。
private void timer1_Tick(object sender, EventArgs e)
{
ip_addr = 10;
Start();
}
私のコードの問題は何ですか?どうすれば修正できますか?