修改数据库删除项目
Modify for database removes item
所以我正在尝试为 Microsoft DNS 服务器更新数据库中的所有 IP 地址,这是我的代码
internal bool UpdateIPFromDns(string oldIP, string newIP)
{
try
{
string Query = ("SELECT * FROM MicrosoftDNS_AType WHERE RecordData = '" + oldIP + "'");
ManagementObjectSearcher s = new ManagementObjectSearcher(_scope, new ObjectQuery(Query));
ManagementObjectCollection col = s.Get();
foreach (ManagementObject wmiZone in col)
{
Console.WriteLine("Updating: " + (String)wmiZone.Properties["OwnerName"].Value + " To -> " + newIP);
ManagementBaseObject mgmtParams = null;
mgmtParams = wmiZone.GetMethodParameters("Modify");
mgmtParams["IPAddress"] = newIP;
wmiZone.InvokeMethod("Modify", mgmtParams, null);
}
return true;
}
catch (Exception ex)
{
Console.WriteLine("error: " + ex);
return false;
}
}
有时它似乎工作正常而其他时候它打印出它更新了项目(就像它应该的那样),但是当我刷新数据库本身时它实际上已经删除了所有这些项目而我没有确定它为什么这样做。
编辑:
好的所以我在删除项目时已经解决了
所以在数据库中我们从
开始
Example.com->
example.com 1.1.1.1
t1.example.com 1.1.1.1
t2.example.com 2.3.4.5
test.com->
test.com 1.1.1.1
t1.test.com 2.3.4.5
t2.test.com 1.1.1.1
如果我 运行 在 1.1.1.1 上更新并将其更新到 2.3.4.5,它会更新,所以现在数据库看起来像这样
Example.com->
example.com 2.3.4.5
t1.example.com 2.3.4.5
t2.example.com 2.3.4.5
test.com->
test.com 2.3.4.5
t1.test.com 2.3.4.5
t2.test.com 2.3.4.5
现在,如果我要 运行 它再次将 2.3.4.5 更新为 2.3.4.5,然后删除 IP 为 2.3.4.5
的所有项目
但我不确定为什么要这样做
P.S 我对 WMI 不是很有经验,所以如果我在那里做错了什么,请告诉我
因此,按照 Microsoft 的说法,该实现完全按照他们编程的方式进行:https://support.microsoft.com/en-us/kb/979609。 (我有一种感觉,服务器正在做一些奇怪的事情,而你的 WMI 是正确的)。所以你现在可能已经内置了这个,但是如果旧地址等于新地址,你需要跳过更新。考虑到 WMI 非常昂贵,无论如何这是个好主意。
所以我正在尝试为 Microsoft DNS 服务器更新数据库中的所有 IP 地址,这是我的代码
internal bool UpdateIPFromDns(string oldIP, string newIP)
{
try
{
string Query = ("SELECT * FROM MicrosoftDNS_AType WHERE RecordData = '" + oldIP + "'");
ManagementObjectSearcher s = new ManagementObjectSearcher(_scope, new ObjectQuery(Query));
ManagementObjectCollection col = s.Get();
foreach (ManagementObject wmiZone in col)
{
Console.WriteLine("Updating: " + (String)wmiZone.Properties["OwnerName"].Value + " To -> " + newIP);
ManagementBaseObject mgmtParams = null;
mgmtParams = wmiZone.GetMethodParameters("Modify");
mgmtParams["IPAddress"] = newIP;
wmiZone.InvokeMethod("Modify", mgmtParams, null);
}
return true;
}
catch (Exception ex)
{
Console.WriteLine("error: " + ex);
return false;
}
}
有时它似乎工作正常而其他时候它打印出它更新了项目(就像它应该的那样),但是当我刷新数据库本身时它实际上已经删除了所有这些项目而我没有确定它为什么这样做。
编辑:
好的所以我在删除项目时已经解决了
所以在数据库中我们从
开始Example.com->
example.com 1.1.1.1
t1.example.com 1.1.1.1
t2.example.com 2.3.4.5
test.com->
test.com 1.1.1.1
t1.test.com 2.3.4.5
t2.test.com 1.1.1.1
如果我 运行 在 1.1.1.1 上更新并将其更新到 2.3.4.5,它会更新,所以现在数据库看起来像这样
Example.com->
example.com 2.3.4.5
t1.example.com 2.3.4.5
t2.example.com 2.3.4.5
test.com->
test.com 2.3.4.5
t1.test.com 2.3.4.5
t2.test.com 2.3.4.5
现在,如果我要 运行 它再次将 2.3.4.5 更新为 2.3.4.5,然后删除 IP 为 2.3.4.5
的所有项目但我不确定为什么要这样做
P.S 我对 WMI 不是很有经验,所以如果我在那里做错了什么,请告诉我
因此,按照 Microsoft 的说法,该实现完全按照他们编程的方式进行:https://support.microsoft.com/en-us/kb/979609。 (我有一种感觉,服务器正在做一些奇怪的事情,而你的 WMI 是正确的)。所以你现在可能已经内置了这个,但是如果旧地址等于新地址,你需要跳过更新。考虑到 WMI 非常昂贵,无论如何这是个好主意。