You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过WMI修改IP地址?附从数据库获取IP信息的C#代码

使用WMI修改IP地址并从数据库获取配置信息

没问题,我帮你把从数据库读取IP配置、再通过WMI修改本地IP的完整方案整理好,分步骤来看:

第一步:从数据库读取IP配置信息

这一步的核心是根据当前主机名,从指定数据库中拉取最新的IP地址、子网掩码和网关信息,然后把IP和子网掩码赋值给对应的Label控件。以下是完整的C#实现代码,包含了异常处理和DataReader的读取逻辑:

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();
    
    if (dr.Read())
    {
        // 将数据库查询结果赋值给Label控件
        label1.Text = dr["ip_address"].ToString();
        label2.Text = dr["subnet"].ToString();
        // 顺便把网关值存下来,后面WMI修改IP会用到
        string gateway = dr["gateway"].ToString();
    }
    
    dr.Close();
    conn.Close();
}
catch (SqlException ex)
{
    // 处理数据库连接或查询异常
    MessageBox.Show($"数据库读取失败:{ex.Message}");
}
catch (Exception ex)
{
    MessageBox.Show($"操作出错:{ex.Message}");
}

第二步:通过WMI修改本地IP地址

拿到数据库里的配置后,就可以用WMI来修改本地网卡的IP设置了。注意这一步需要程序以管理员权限运行,还要确保项目引用了System.Management程序集。代码如下:

using System.Management;

// 从前面的数据库读取步骤中获取配置值
string targetIp = label1.Text;
string targetSubnet = label2.Text;
// 这里用前面读取到的gateway变量,或者直接从DataReader里拿
string targetGateway = "从数据库读取的网关值";

try
{
    // 获取本地所有网络适配器的WMI实例
    ManagementClass networkAdapterClass = new ManagementClass("Win32_NetworkAdapterConfiguration");
    ManagementObjectCollection adapterCollection = networkAdapterClass.GetInstances();

    foreach (ManagementObject adapter in adapterCollection)
    {
        // 只处理启用了IP协议的适配器
        if ((bool)adapter["IPEnabled"])
        {
            // 设置静态IP和子网掩码
            ManagementBaseObject ipParams = adapter.GetMethodParameters("EnableStatic");
            ipParams["IPAddress"] = new string[] { targetIp };
            ipParams["SubnetMask"] = new string[] { targetSubnet };
            adapter.InvokeMethod("EnableStatic", ipParams, null);

            // 设置默认网关(如果网关不为空)
            if (!string.IsNullOrEmpty(targetGateway))
            {
                ManagementBaseObject gatewayParams = adapter.GetMethodParameters("SetGateways");
                gatewayParams["DefaultIPGateway"] = new string[] { targetGateway };
                gatewayParams["GatewayCostMetric"] = new int[] { 1 };
                adapter.InvokeMethod("SetGateways", gatewayParams, null);
            }

            MessageBox.Show("IP地址修改成功!");
            break; // 修改第一个符合条件的适配器后退出,可根据需求调整
        }
    }
}
catch (ManagementException ex)
{
    MessageBox.Show($"WMI操作失败:{ex.Message}");
}
catch (Exception ex)
{
    MessageBox.Show($"修改IP时出错:{ex.Message}");
}

关键注意事项

  • 必须以管理员权限运行程序,否则WMI操作会因权限不足失败
  • 数据库连接字符串里的服务器地址、数据库名、账号密码要替换成你的实际环境信息
  • 如果有多张网卡,建议通过适配器的名称(比如adapter["Description"]返回的描述)来精准筛选,避免修改错误的网卡
  • 异常处理可以根据实际需求优化,比如写入日志文件,而不是仅弹出提示框

内容的提问来源于stack exchange,提问作者Dev George

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:11:09