【问题标题】:WMI: Change IP address by fetching ip column in the databaseWMI:通过获取数据库中的 ip 列来更改 IP 地址
【发布时间】:2018-04-09 03:53:41
【问题描述】:

第一道工序:

  1. 从数据库中获取列 ip_address,subnet
  2. 我会将列 ip 地址设置为 label1.text 并将子网设置为 label2.text

string connection = "Server=192.168.1.10;Database=xxxxx;User Id=xxxxx;Password=xxxxxx;";

try
{
    SqlConnection conn = new SqlConnection(connection);
    conn.Open();

    var query = "SELECT TOP 1 ip_address,subnet,gateway FROM computer_info WHERE pc_name = HOST_NAME() ORDER BY id DESC";
    SqlCommand cmd = new SqlCommand(query, conn);
    SqlDataReader dr = cmd.ExecuteReader();

    while (dr.Read())
    {
        // column ip
        string ip_address = dr["ip_address"].ToString();
        string sub_net = dr["subnet"].ToString();
        string gateway = dr["gateway"].ToString();

        label1.Text = ip_address;
        label2.Text = sub_net;
    }

    conn.Close();

}
catch (Exception ex)
{
    MessageBox.Show(ex.ToString());
}

第二道工序:

  1. 我想更改我的 IP 地址和子网

    注意:ip地址和子网的值来自数据库

    public void setIP(string ip_address, string subnet_mask)
    {
        ManagementClass objMC = new ManagementClass("Win32_NetworkAdapterConfiguration");
        ManagementObjectCollection objMOC = objMC.GetInstances();
    
        foreach (ManagementObject objMO in objMOC)
        {
            if ((bool)objMO["IPEnabled"])
            {
                try
                {
                    ManagementBaseObject setIP;
                    ManagementBaseObject newIP =
                        objMO.GetMethodParameters("EnableStatic");
    
                    newIP["IPAddress"] = new string[] { ip_address };
                    newIP["SubnetMask"] = new string[] { subnet_mask };
    
                    setIP = objMO.InvokeMethod("EnableStatic", newIP, null);
                }
                catch (Exception)
                {
                    throw;
                }
    
    
            }
        }
    }
    

第三个进程执行

注意:我这里有 2 个示例代码 1 可以工作,而 2 不能工作

    private void button1_Click_1(object sender, EventArgs e)
    {
        setIP(
            // if i use this static string value my address is changing.
            "192.168.1.5",
            "255.255.255.0"
          );

        ///---------------------------------------///////////////////////////////////////

        setIP(
            //the value inside of label1 , label2 is from database. ??? the question is why there is no result if the value came from the database.
            label1.Text,
            label2.Text

            );
    }

我希望你们能帮助我……谢谢。

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    我会确保我的连接字符串正常工作。这是我唯一能看到的。在单步执行您的代码时进行检查,看看您是否获得了返回值。如果您尝试访问域中的数据库,还要确保您的路由器和调制解调器启用了端口转发。但是,如果您尝试访问网络外部的服务器,那么我肯定会确保您可以通过 ping 服务器访问服务器。

    【讨论】:

    • 你是什么意思。数据库中的值不起作用?还是设置为标签?
    • 当您在代码行中单步执行代码时:
    • 字符串 ip_address = dr["ip_address"].ToString();
    • 当我尝试 messagebox.show 该字符串时,数据库中的值正在显示。
    • 那个值是192.168.1.5
    【解决方案2】:

    最简单的调试方法是在 setIP 函数中设置 BreakPoint 并在“立即窗口”中查看 label2.Text 的值 [在 VS 菜单中打开立即窗口:调试 -> 窗口 -> 立即窗口]。请确认您是否在这里获得了价值。如果您在这里没有得到价值,请分享您使用过的前端标签标签。

    【讨论】:

      猜你喜欢
      • 2010-10-23
      • 2018-01-18
      • 2020-06-10
      • 2010-09-09
      • 2018-01-02
      • 2011-10-18
      • 1970-01-01
      • 2012-09-17
      相关资源
      最近更新 更多