0

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();
}

私のコードの問題は何ですか?どうすれば修正できますか?

4

0 に答える 0