WMI:通过获取数据库中的ip列来更改IP地址

时间:2018-04-09 03:53:42

标签: c# asp.net

第一个过程:

  1. 从数据库中获取列ip_address,子网
  2. 我会将列IP地址设置为 label1.text ,并将子网设置为 label2.text
  3. string connection =" Server = 192.168.1.10; Database = xxxxx; User Id = xxxxx; Password = xxxxxx;&#34 ;;

    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. 第三个流程执行

      注意:我在这里有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
      
                  );
          }
      

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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