C#利用WMI操作DNS服务器(可远程操作,需要相应权限)

DNS测试类:
using  System;
using  System.Collections.Generic;
using  System.Text;
using  System.Data;

namespace  Yaosansi
{
    
class  Test
    {
        
static   void  Main()
        {
            MyDnsTEST();
        }

        
///   <summary>
        
///  MyDnsTEST功能测试
            
///  C#利用WMI操作DNS服务器(可远程操作,需要相应权限)
            
///  Author:yaosansi 
            
///  Create Date:2005-09-07
            
///  Modify Date:2006-10-25
            
///  Site: http://www.yaosansi.com/
            
///  E-mail:yaosansi at 126 dot com
            
///   http://www.yaosansi.com/blog/article.asp?id=935
            
///   http://yaosansi.cnblogs.com/archive/2006/11/04/DNSServiceInCsharpWithWMI.html
            
///  注意:此版本为WINDOWS2003 DNS服务器专用.不适合其它版本操作系统.
        
///   </summary>
         static   void  MyDnsTEST()
        {
            Yaosansi.Net.MYDNS dns 
=   new  Yaosansi.Net.MYDNS();
            
// ===========================================
            
// 不对以下三个属性赋值默认DNS服务器为本机.
            dns.ServerName  =   " 202.96.64.68 " ;
            dns.userName 
=   " Administrator " ;
            dns.passWord 
=   " 123456789 " ;
            
// ===========================================
            
// dns.CreateZone("yaosansi.com");
            
// dns.DelZone("yaosansi.com");
            
// dns.CreateAType("yaosansi.com", "www", "2.2.2.2", "3600");
            
// dns.ModifyAType("yaosansi.com","www","127.21.0.1","800");
            
// dns.DelAType("yaosansi.com", "mail");
            
// dns.CreateMXType("mail", "yaosansi.com", "5.5.5.5", "20", "3600");
            
// dns.ModifyMXType("mail", "yaosansi.com", "36000", "218.1.1.1", "26");
            
// dns.DelMXType("mail", "yaosansi.com");
            
// dns.CreateCNAMEType("mpq2", "yaosansi.com", "www.yaosansi.com", "3900");
            
// dns.ModifyCNAMEType("mpq2", "abc.com", "30520", "www.yaosansi.com.");
            
// dns.DelCNAMEType("mpq", "yaosansi.com");

            
// DataTable table = dns.ListExistsMXType("yaosansi.com");
            DataTable table  =  dns.ListExistsAType( " yaosansi.com " );
            
// DataTable table = dns.ListExistsCNAMEType("yaosansi.com");
            Yaosansi.Data.DataHelp.PrintTable(table);

            
if  ( ! string .IsNullOrEmpty(dns.ErrMessage))
            {
                Console.WriteLine(
" -------------------------------------------------- " );
                Console.WriteLine(
" 返回信息: "   +  dns.ErrMessage);
                Console.WriteLine(
" -------------------------------------------------- " );
            }
            Console.WriteLine(
"" );
            Console.WriteLine(
" ===End=== " );
            Console.ReadLine();
        }
    }
}

MYDNS类:
using  System;
using  System.Management;
using  System.Data;

namespace  Yaosansi.Net
{
    
///   <summary>
    
///  C#利用WMI操作DNS服务器(可远程操作,需要相应权限)
    
///  Author:yaosansi 
    
///  Create Date:2005-09-07
    
///  Modify Date:2006-10-25
    
///  Site: http://www.yaosansi.com/
    
///  E-mail:yaosansi at 126 dot com
    
///   http://www.yaosansi.com/blog/article.asp?id=935
    
///   http://yaosansi.cnblogs.com/archive/2006/11/04/DNSServiceInCsharpWithWMI.html
    
///  注意:此版本为WINDOWS2003 DNS服务器专用.不适合其它版本操作系统.
    
///   </summary>
     public   class  MYDNS
    {
        
// 要连接的DNS服务器
         private   string  sServerPath;
        
// 用户名
         private   string  username  =   null ;
        
// 密码
         private   string  password  =   null ;
        
// 服务器名称或IP地址
         private   string  DNSName  =   null ;
        
// 表示管理操作的范围.这里是用来执行DNS的命名空间
         private  ManagementScope DNS;
        
// 用于返回检索的ManagementObject集合
         private  System.Management.ManagementObjectCollection Q;
        
//
         private  ManagementClass DnsClass;
        
//
         private  ManagementBaseObject MI;

        
///   <summary>
        
///  返回的操作信息.
        
///   </summary>
         private   string  errMessage = null ;

        
///   <summary>
        
///  获取错误信息.
        
///   </summary>
         public   string  ErrMessage
        {
            
get
            {
                
return  errMessage;
            }
        }
        
///   <summary>
        
///  设置DNS服务器名称或IP地址
        
///   </summary>
         public   string  ServerName
        {
            
set
            {
                
this .sServerPath  =   string .Format( @" \\{0}\root\MicrosoftDNS " , value);
                
this .DNSName  =  value;
            }
        }

        
///   <summary>
        
///  设置连接服务器的用户名(指定服务器IP,用户和密码后将自动连接远程服务器,本机不需要指定)
        
///   </summary>
         public   string  userName
        {
            
set
            {
                
this .username  =  value;
            }
        }

        
///   <summary>
        
///  设置连接服务器的密码(指定服务器IP,用户和密码后将自动连接远程服务器,本机不需要指定)
        
///   </summary>
         public   string  passWord
        {
            
set
            {
                
this .password  =  value;
            }
        }

        
///   <summary>
        
///  构造函数
        
///   </summary>
         public  MYDNS()
        {
            sServerPath 
=   @" \\localhost\root\MicrosoftDNS " ;
            DNSName 
=   " localhost " ;
        }



        
///   <summary>
        
///  建立对象.连接
        
///   </summary>
        
///   <param name="DnsType"> DNS类型 MicrosoftDNS_Zone等 </param>
         private   void  Create( string  DnsType)
        {
            
if  ( ! string .IsNullOrEmpty(username)  &&   ! string .IsNullOrEmpty(password))
            {
                System.Management.ConnectionOptions Conn 
=   new  ConnectionOptions();
                Conn.Username 
=  username;  // 用户名
                Conn.Password  =  password;  // 口令
                DNS  =   new  ManagementScope(sServerPath,Conn);
            }
            
else
            {
                DNS 
=   new  ManagementScope(sServerPath);
            }
            
if  ( ! DNS.IsConnected)
            {
                DNS.Connect();
            }
            ManagementPath Path 
=   new  ManagementPath(DnsType);
            
this .DnsClass  =   new  ManagementClass(DNS, Path,  null );
        }

        
///   <summary>
        
///  查询DNS并建立对象
        
///   </summary>
        
///   <param name="query"> WQL查询语句 </param>
        
///    <param name="DnsType"> DNS类型 MicrosoftDNS_Zone等 </param>
        
///   <returns></returns>
         public  ManagementObjectCollection QueryDNS( string  query,  string  DnsType)
        {
            
this .Create(DnsType);
            System.Management.ManagementObjectSearcher QS 
=   new  ManagementObjectSearcher(DNS,  new  ObjectQuery(query));
            QS.Scope 
=  DNS;
            
return  QS.Get();
        }

        
///   <summary>
        
///  仅查询DNS
        
///   </summary>
        
///   <param name="query"> WQL查询语句 </param>
        
///   <returns></returns>
         public  ManagementObjectCollection QueryDNS( string  query)
        {
            
if  ( ! string .IsNullOrEmpty(username)  &&   ! string .IsNullOrEmpty(password))
            {
                System.Management.ConnectionOptions Conn 
=   new  ConnectionOptions();
                Conn.Username 
=  username;  // 用户名
                Conn.Password  =  password;  // 口令
                DNS  =   new  ManagementScope(sServerPath, Conn);
            }
            
else
            {
                DNS 
=   new  ManagementScope(sServerPath);
            }
            
if  ( ! DNS.IsConnected)
            {
                DNS.Connect();
            }
            System.Management.ManagementObjectSearcher QS 
=   new  ManagementObjectSearcher(DNS,  new  ObjectQuery(query));
            QS.Scope 
=  DNS;
            
return  QS.Get();
        }


        
///   <summary>
        
///  判断区域是否存在
        
///   </summary>
        
///   <param name="domain"> 区域名称 </param>
        
///   <returns></returns>
         public   bool  IsExistsZone( string  domain)
        {

            
try
            {
                Q 
=  QueryDNS( " Select * From MicrosoftDNS_ZONE where ContainerName=' "   +  domain  +   " ' " );
                
foreach  (ManagementObject oManObject  in  Q)
                {
                    
// Console.WriteLine(oManObject["ContainerName"].ToString());
                     return   true ;
                }
                
return   false ;
            }
            
catch  (Exception e)
            {
                errMessage 
=  e.Message;
                Console.WriteLine(e.ToString());
                
return   false ;
            }

        }




        
///   <summary>
        
///  创建一个新的区域,仅区域名称
        
///   </summary>
        
///   <param name="domain"> 区域的名称 </param>
         public   bool  CreateZone( string  domain)
        {
            
try
            {
                
this .Create( " MicrosoftDNS_Zone " );
                
// 如果区域已经存在
                 if  (IsExistsZone(domain))
                {
                    errMessage 
=   " 域: " + domain + " 已经存在. " ;
                    
return   false ;
                }
                
// 建立新的区域
                 this .MI  =  DnsClass.GetMethodParameters( " CreateZone " );
                
this .MI[ " ZoneName " =  domain;
                
this .MI[ " ZoneType " =   0 ;

                ManagementBaseObject OutParams 
=   this .DnsClass.InvokeMethod( " CreateZone " , MI,  null );
                errMessage 
=   " 域: " + domain + " 创建成功. " ;
                
return   true ;
            }
            
catch  (Exception e)
            {
                errMessage 
=  e.Message;
                Console.WriteLine(e.ToString());
                
return   false ;
            }

        }


        
///   <summary>
        
///  创建一个区域,包括其它参数
        
///   </summary>
        
///   <param name="domain"> 要创建的区域名称 </param>
        
///   <param name="ZoneType"> Type of zone. Valid values are the following:0 Primary zone. 1 Secondary zone.  2 Stub zone. 3 Zone forwarder.  </param>
        
///   <param name="DataFileName"> [in, optional] Name of the data file associated with the zone </param>
        
///   <param name="IpAddr"> [in, optional] IP address of the mater DNS Server for the zone.  </param>
        
///   <param name="AdminEmailName"> [in, optional] Email address of the administrator responsible for the zone </param>
        
///   <returns></returns>
         public   bool  CreateZone( string  domain,  uint  ZoneType,  string  DataFileName,  string [] IpAddr,  string  AdminEmailName)
        {
            
try
            {
                
this .Create( " MicrosoftDNS_Zone " );
                
// 如果区域已经存在
                 if  (IsExistsZone(domain))
                {
                    errMessage 
=   " 域: "   +  domain  +   " 已经存在. " ;
                    
return   false ;
                }
                
// 建立新的区域
                MI  =  DnsClass.GetMethodParameters( " CreateZone " );
                MI[
" ZoneName " =  domain;
                MI[
" ZoneType " =  ZoneType;
                MI[
" DataFileName " =  DataFileName;
                MI[
" IpAddr " =  IpAddr;
                MI[
" AdminEmailName " =  AdminEmailName;
                ManagementBaseObject OutParams 
=   this .DnsClass.InvokeMethod( " CreateZone " , MI,  null );
                errMessage 
=   " 域: "   +  domain  +   " 创建成功. " ;
                
return   true ;
            }
            
catch  (Exception e)
            {
                errMessage 
=  e.Message;
                Console.WriteLine(e.ToString());
                
return   false ;
            }

        }


        
///   <summary>
        
///  修改区域
        
///   </summary>
        
///   <param name="domain"> 要修改的区域名称 </param>
        
///   <param name="ZoneType"> Type of zone. Valid values are the following:0 Primary zone. 1 Secondary zone.  2 Stub zone. 3 Zone forwarder.  </param>
        
///   <param name="DataFileName"> [in, optional] Name of the data file associated with the zone </param>
        
///   <param name="IpAddr"> [in, optional] IP address of the mater DNS Server for the zone.  </param>
        
///   <param name="AdminEmailName"> [in, optional] Email address of the administrator responsible for the zone </param>
        
///   <returns></returns>
         public   bool  ChangeZoneType( string  domain,  uint  ZoneType,  string  DataFileName,  string [] IpAddr,  string  AdminEmailName)
        {
            
try
            {
                Q 
=  QueryDNS( " Select * From MicrosoftDNS_ZONE where ContainerName=' "   +  domain  +   " ' " " MicrosoftDNS_Zone " );

                
foreach  (ManagementObject oManObject  in  Q)
                {
                    MI 
=  oManObject.GetMethodParameters( " ChangeZoneType " );
                    MI[
" ZoneType " =  ZoneType;
                    MI[
" DataFileName " =  DataFileName;
                    MI[
" IpAddr " =  IpAddr;
                    MI[
" AdminEmailName " =  AdminEmailName;
                    oManObject.InvokeMethod(
" ChangeZoneType " , MI,  null );
                    errMessage 
=   " 域: "   +  domain  +   " 修改成功. " ;
                    
return   true ;
                }
                errMessage 
=   " 未找到域: " + domain;
                
return   false ;
            }
            
catch  (Exception e)
            {
                errMessage 
=  e.Message;
                Console.WriteLine(e.ToString());
                
return   false ;
            }
        }

        
///   <summary>
        
///  删除区域
        
///   </summary>
        
///   <param name="domain"> 要册除的区域的名称 </param>
        
///   <returns></returns>
         public   bool  DelZone( string  domain)
        {
            
try
            {
                Q 
=  QueryDNS( " Select * From MicrosoftDNS_ZONE where ContainerName=' "   +  domain  +   " ' " " MicrosoftDNS_Zone " );
                
foreach  (ManagementObject oManObject  in  Q)
                {
                    oManObject.Delete();
                    errMessage 
=   " 域: "   +  domain  +   " 删除成功. " ;
                    
return   true ;
                }
                errMessage 
=   " 未找到域: "   +  domain;
                
return   false ;
            }
            
catch  (Exception e)
            {
                errMessage 
=  e.Message;
                Console.WriteLine(e.ToString());
                
return   false ;
            }

        }

        
///   <summary>
        
///  判断在某MicrosoftDNS_AType是否在指定的域中存在
        
///   </summary>
        
///   <param name="domain"></param>
        
///   <param name="OwnerName"></param>
        
///   <returns></returns>
         public   bool  IsExistsAType( string  domain,  string  OwnerName)
        {
            
try
            {
                Q 
=  QueryDNS( " Select * From MicrosoftDNS_AType where OwnerName=' "   +  OwnerName  +   " ' and ContainerName=' "   +  domain  +   " ' " );
                
foreach  (ManagementObject oManObject  in  Q)
                {
                    
// Console.WriteLine(oManObject["OwnerName"].ToString());
                     return   true ;
                }
                
return   false ;
            }
            
catch  (Exception e)
            {
                errMessage 
=  e.Message;
                Console.WriteLine(e.ToString());
                
return   false ;
            }
        }


        
///   <summary>
        
///  创建MicrosoftDNS_AType 
        
///   </summary>
        
///   <param name="ContainerName"> Name of the Container for the Zone, Cache, or RootHints instance which contains this RR </param>
        
///   <param name="HostName"> 主机名 [如果为空或NULL,主机名将与域名保持一致.] </param>
        
///   <param name="TTL"> Time, in seconds, that the RR can be cached by a DNS resolver </param>
        
///   <param name="IPAddress"> String representing the IPv4 address of the host </param>
        
///   <returns></returns>
         public   bool  CreateAType( string  ContainerName,  string  HostName,  string  IPAddress, string  TTL)
        {
            
try
            {
                
string  OwnerName  =   null ;
                
if  ( string .IsNullOrEmpty(HostName))
                {
                    OwnerName 
=  ContainerName;
                }
                
else
                {
                    OwnerName 
=  HostName  +   " . "   +  ContainerName;
                }
                
this .Create( " MicrosoftDNS_AType " );
                
// 如果区域不存在
                 if  ( ! IsExistsZone(ContainerName))
                {
                    Console.WriteLine(
" 区域:{0}不存在,创建失败 " , ContainerName);
                    errMessage 
=   string .Format( " 区域:{0}不存在,创建失败 " , ContainerName);
                    
return   false ;
                }
                
if  (IsExistsAType(ContainerName, OwnerName))
                {
                    Console.WriteLine(
" {0}中已存在{1},创建失败 " , ContainerName, OwnerName);
                    errMessage 
=   string .Format( " {0}中已存在{1},创建失败 " , ContainerName, OwnerName);
                    
return   false ;
                }
                MI 
=  DnsClass.GetMethodParameters( " CreateInstanceFromPropertyData " );
                MI[
" DnsServerName " =   " localhost " ;
                MI[
" ContainerName " =  ContainerName;
                MI[
" OwnerName " =  OwnerName;
                MI[
" IPAddress " =  IPAddress;
                
if  ( string .IsNullOrEmpty(TTL))
                {
                    TTL 
=   " 3600 " ;
                }
                MI[
" TTL " = TTL;
                DnsClass.InvokeMethod(
" CreateInstanceFromPropertyData " , MI,  null );
                errMessage 
=   " A记录: "   +  OwnerName  +   " 创建成功. " ;
                
return   true ;
            }
            
catch  (Exception e)
            {
                errMessage 
=  e.Message;
                Console.WriteLine(e.ToString());
                
return   false ;
            }
           
        }


        
///   <summary>
        
///  创建MicrosoftDNS_AType 
        
///   </summary>
        
///   <param name="DnsServerName"> FQDN or IP address of the DNS Server that contains this RR </param>
        
///   <param name="ContainerName"> Name of the Container for the Zone, Cache, or RootHints instance which contains this RR </param>
        
///   <param name="HostName"> 主机名 [如果为空或NULL,主机名将与域名保持一致.] </param>
        
///   <param name="RecordClass"> Class of the RR. Default value is 1. The following values are valid.1 IN (Internet) 2 CS (CSNET)  3 CH (CHAOS) 4 HS (Hesiod)  </param>
        
///   <param name="TTL"> Time, in seconds, that the RR can be cached by a DNS resolver </param>
        
///   <param name="IPAddress"> String representing the IPv4 address of the host </param>
        
///   <returns></returns>
         public   bool  CreateAType( string  DnsServerName,  string  ContainerName,  string  HostName,  uint  RecordClass,  uint  TTL,  string  IPAddress)
        {
            
try
            {
                
string  OwnerName  =   null ;
                
if  ( string .IsNullOrEmpty(HostName))
                {
                    OwnerName 
=  ContainerName;
                }
                
else
                {
                    OwnerName 
=  HostName  +   " . "   +  ContainerName;
                }
                
this .Create( " MicrosoftDNS_AType " );
                
// 如果区域不存在
                 if  ( ! IsExistsZone(ContainerName))
                {
                    Console.WriteLine(
" 区域:{0}不存在,创建失败 " , ContainerName);
                    errMessage 
=   string .Format( " 区域:{0}不存在,创建失败 " , ContainerName);
                    
return   false ;
                }
                
if  (IsExistsAType(ContainerName, OwnerName))
                {
                    Console.WriteLine(
" {0}中已存在{1},创建失败 " , ContainerName, OwnerName);
                    errMessage
= string .Format( " {0}中已存在{1},创建失败 " , ContainerName, OwnerName);
                    
return   false ;
                }
                MI 
=  DnsClass.GetMethodParameters( " CreateInstanceFromPropertyData " );
                MI[
" DnsServerName " =  DnsServerName;
                MI[
" ContainerName " =  ContainerName;
                MI[
" OwnerName " =  OwnerName;
                MI[
" RecordClass " =  RecordClass;
                MI[
" TTL " =  TTL;
                MI[
" IPAddress " =  IPAddress;
                DnsClass.InvokeMethod(
" CreateInstanceFromPropertyData " , MI,  null );
                errMessage 
=   " A记录: "   +  OwnerName  +   " 创建成功. " ;
                
return   true ;
            }
            
catch  (Exception e)
            {
                errMessage 
=  e.Message;
                Console.WriteLine(e.ToString());
                
return   false ;
            }

        }


        
///   <summary>
        
///  修改MicrosoftDNS_AType 
        
///   </summary>
        
///   <param name="ContainerName"> Name of the Container for the Zone, Cache, or RootHints instance which contains this RR </param>
        
///   <param name="HostName"> 主机名 [如果为空或NULL,主机名将与域名保持一致.] </param>
        
///   <param name="TTL"> Time, in seconds, that the RR can be cached by a DNS resolver </param>
        
///   <param name="IPAddress"></param>
        
///   <returns></returns>
         public   bool  ModifyAType( string  ContainerName,  string  HostName,  string  IPAddress, string  TTL)
        {
            
try
            {
                
string  OwnerName  =   null ;
                
if  ( string .IsNullOrEmpty(HostName))
                {
                    OwnerName 
=  ContainerName;
                }
                
else
                {
                    OwnerName 
=  HostName  +   " . "   +  ContainerName;
                }

                
// 如果区域不存在
                 if  ( ! IsExistsZone(ContainerName))
                {
                    Console.WriteLine(
" 区域:{0}不存在,修改失败 " , ContainerName);
                    errMessage 
=   string .Format( " 区域:{0}不存在,修改失败 " , ContainerName);
                    
return   false ;
                }
                
if  ( ! IsExistsAType(ContainerName, OwnerName))
                {
                    Console.WriteLine(
" {0}中不存在{1},修改失败 " , ContainerName, OwnerName);
                    errMessage 
=   string .Format( " {0}中不存在{1},修改失败 " , ContainerName, OwnerName);
                    
return   false ;
                }


                Q 
=  QueryDNS( " Select * From MicrosoftDNS_AType where ContainerName=' "   +  ContainerName  +   " ' and OwnerName=' "   +  OwnerName  +   " ' " " MicrosoftDNS_AType " );

                
foreach  (ManagementObject oManObject  in  Q)
                {
                    
// foreach (PropertyData p in oManObject.Properties)
                    
// {
                    
//     try
                    
//     { Console.WriteLine(p.Name+"="+oManObject[p.Name]); }
                    
//     catch
                    
//     { }
                    
// }
                     if  (oManObject[ " IPAddress " ].ToString()  ==  IPAddress)
                    {
                        errMessage 
=   " A记录: "   +  OwnerName  +   " 修改失败,必须修改IP地址. " ;
                        
return   false ;
                    }

                    MI 
=  oManObject.GetMethodParameters( " Modify " );
                    MI[
" IPAddress " =  IPAddress;
                    MI[
" TTL " =  TTL;
                    oManObject.InvokeMethod(
" Modify " , MI,  null );
                    errMessage 
=   " A记录: "   +  OwnerName  +   " 修改成功. " ;
                    
return   true ;
                }
                errMessage 
=   string .Format( " {0}中不存在{1},修改失败 " , ContainerName, OwnerName);
                
return   false ;
            }
            
catch  (Exception e)
            {
                errMessage 
=  e.Message;
                Console.WriteLine(e.ToString());
                
return   false ;
            }
        }


     


        
///   <summary>
        
///  删除MicrosoftDNS_AType
        
///   </summary>
        
///   <param name="ContainerName"> Name of the Container for the Zone, Cache, or RootHints instance which contains this RR </param>
        
///   <param name="HostName"> 主机名 [如果为空或NULL,主机名将与域名保持一致.] </param>
        
///   <returns></returns>
         public   bool  DelAType( string  ContainerName,  string  HostName)
        {
            
try
            {
                
string  OwnerName  =   null ;
                
if  ( string .IsNullOrEmpty(HostName))
                {
                    OwnerName 
=  ContainerName;
                }
                
else
                {
                    OwnerName 
=  HostName  +   " . "   +  ContainerName;
                }

                
// 如果区域不存在
                 if  ( ! IsExistsZone(ContainerName))
                {
                    Console.WriteLine(
" 区域:{0}不存在,删除失败 " , ContainerName);
                    errMessage 
=   string .Format( " 区域:{0}不存在,删除失败 " , ContainerName);
                    
return   false ;
                }
                
if  ( ! IsExistsAType(ContainerName, OwnerName))
                {
                    Console.WriteLine(
" {0}中不存在{1},删除失败 " , ContainerName, OwnerName);
                    errMessage 
=   string .Format( " {0}中不存在{1},删除失败 " , ContainerName, OwnerName);
                    
return   false ;
                }

                Q 
=  QueryDNS( " Select * From MicrosoftDNS_AType where ContainerName=' "   +  ContainerName  +   " ' and OwnerName=' "   +  OwnerName  +   " ' " " MicrosoftDNS_AType " );

                
foreach  (ManagementObject oManObject  in  Q)
                {
                    oManObject.Delete();
                    errMessage 
=   " A记录: "   +  OwnerName  +   " 删除成功. " ;
                    
return   true ;
                }
                errMessage 
=   string .Format( " {0}中不存在{1},删除失败 " , ContainerName, OwnerName);
                
return   false ;
            }
            
catch  (Exception e)
            {
                errMessage 
=  e.Message;
                Console.WriteLine(e.ToString());
                
return   false ;
            }
        }


        
///   <summary>
        
///  列出某域名下的所有A记录.
        
///   </summary>
        
///   <param name="ContainerName"> Name of the Container for the Zone, Cache, or RootHints instance which contains this RR </param>
        
///   <returns></returns>
         public  DataTable ListExistsAType( string  ContainerName)
        {
            Yaosansi.IO.Log log 
=   new  Yaosansi.IO.Log();
            log.WirteLogTime();
            log.WirteLog(ContainerName);
            
            DataTable table 
=   new  DataTable( " MicrosoftDNS_AType "   +  ContainerName);
            table.Columns.Add(
" 主机名 (A) " );
            table.Columns.Add(
" IP 地址 " );
            table.Columns.Add(
" TTL " );
            
try
            {
                Q 
=  QueryDNS( " Select * From MicrosoftDNS_AType where ContainerName=' "   +  ContainerName  +   " ' " );

                
foreach  (ManagementObject oManObject  in  Q)
                {
                    
try
                    {
                        DataRow row 
=  table.NewRow();
                        row[
" 主机名 (A) " =  oManObject[ " OwnerName " ];
                        row[
" IP 地址 " =  oManObject[ " IPAddress " ];
                        row[
" TTL " =  oManObject[ " TTL " ];
                        table.Rows.Add(row);
                    }
                    
catch  (Exception e) { log.WirteLog(e.ToString()); }
                }
            }
            
catch  (Exception e)
            {
                errMessage 
=  e.Message;
                Console.WriteLine(e.ToString());
                log.WirteLog(e.ToString());
            }
            Yaosansi.Data.DataHelp.PrintTableLog(table);
            
return  table;
        }



        
///   <summary>
        
///  列出某域名下的所有MX记录.
        
///   </summary>
        
///   <param name="ContainerName"> Name of the Container for the Zone, Cache, or RootHints instance which contains this RR </param>
        
///   <returns></returns>
         public  DataTable ListExistsMXType( string  ContainerName)
        {
            DataTable table 
=   new  DataTable( " MicrosoftDNS_MXType "   +  ContainerName);
            table.Columns.Add(
" 邮件交换记录 (MX) " );
            table.Columns.Add(
" 目标主机 " );
            table.Columns.Add(
" 优先级 " );
            table.Columns.Add(
" TTL " );
            
try
            {
                Q 
=  QueryDNS( " Select * From MicrosoftDNS_MXType where ContainerName=' "   +  ContainerName  +   " ' " );

                
foreach  (ManagementObject oManObject  in  Q)
                {
                    
try
                    {
                        DataRow row 
=  table.NewRow();
                        row[
" 目标主机 " =  oManObject[ " MailExchange " ];
                        row[
" 邮件交换记录 (MX) " =  oManObject[ " OwnerName " ];
                        row[
" 优先级 " =  oManObject[ " Preference " ];
                        row[
" TTL " =  oManObject[ " TTL " ];
                        table.Rows.Add(row);
                    }
                    
catch  { }
                }
            }
            
catch  (Exception e)
            {
                errMessage 
=  e.Message;
                Console.WriteLine(e.ToString());
            }
            
return  table;
        }


        
///   <summary>
        
///  列出某域名下的所有别名.
        
///   </summary>
        
///   <param name="ContainerName"> Name of the Container for the Zone, Cache, or RootHints instance which contains this RR </param>
        
///   <returns></returns>
         public  DataTable ListExistsCNAMEType( string  ContainerName)
        {
            DataTable table 
=   new  DataTable( " MicrosoftDNS_CNAMEType "   +  ContainerName);
            table.Columns.Add(
" 别名 (CNAME) " );
            table.Columns.Add(
" 别名主机 " );
            table.Columns.Add(
" TTL " );
            
try
            {
                Q 
=  QueryDNS( " Select * From MicrosoftDNS_CNAMEType where ContainerName=' "   +  ContainerName  +   " ' " );
                
foreach  (ManagementObject oManObject  in  Q)
                {
                    
try
                    {
                        DataRow row 
=  table.NewRow();
                        row[
" 别名 (CNAME) " =  oManObject[ " OwnerName " ];
                        row[
" 别名主机 " =  oManObject[ " PrimaryName " ];
                        row[
" TTL " =  oManObject[ " TTL " ];
                        table.Rows.Add(row);
                    }
                    
catch  { }
                }
            }
            
catch  (Exception e)
            {
                errMessage 
=  e.Message;
                Console.WriteLine(e.ToString());
            }
            
return  table;
        }


        
///   <summary>
        
///  判断在某MicrosoftDNS_MXType是否在指定的域中存在
        
///   </summary>
        
///   <param name="ContainerName"> 主域名 主域 Name of the Container for the Zone, Cache, or RootHints instance that contains this RR. </param>
        
///   <param name="OwnerName"> Owner name for the RR.  </param>
        
///   <returns></returns>
         public   bool  IsExistsMXType( string  ContainerName,  string  OwnerName)
        {           
            
try
            {

                Q 
=  QueryDNS( " Select * From MicrosoftDNS_MXType Where ContainerName=' "   +  ContainerName  +   " ' and OwnerName=' "   +  OwnerName  +   " ' " );

                
foreach  (ManagementObject oManObject  in  Q)
                {
                  
//   Console.WriteLine(oManObject["MailExchange"].ToString());
                     return   true ;
                }
                
return   false ;
            }
            
catch  (Exception e)
            {
                errMessage 
=  e.Message;
                Console.WriteLine(e.ToString());
                
return   false ;
            }
        }

        
///   <summary>
        
///  创建MicrosoftDNS_MXType记录(邮件交换记录)
        
///   </summary>
        
///   <param name="HostName"> 主机名 [如果为空或NULL,主机名将与域名保持一致.] </param>
        
///   <param name="ContainerName"> 主域 Name of the Container for the Zone, Cache, or RootHints instance that contains this RR. </param>
        
///   <param name="MailExchange"> 目标主机 FQDN specifying a host willing to act as a mail exchange for the owner name </param>
        
///   <param name="Preference"> 优先级 Preference given to this RR among others at the same owner. Lower values are preferred </param>
        
///   <param name="TTL"> Time, in seconds, that the RR can be cached by a DNS resolver </param>
        
///   <returns></returns>
         public   bool  CreateMXType( string  HostName,  string  ContainerName, string  MailExchange,  string  Preference,  string  TTL)
        {
            
try
            {
                
string  OwnerName  =   null ;
                
if  ( string .IsNullOrEmpty(HostName))
                {
                    OwnerName 
=  ContainerName;
                }
                
else
                {
                    OwnerName 
=  HostName  +   " . "   +  ContainerName;
                }

                
this .Create( " MicrosoftDNS_MXType " );
                
// 如果区域不存在
                 if  ( ! IsExistsZone(ContainerName))
                {
                    Console.WriteLine(
" 区域:{0}不存在,创建失败 " , ContainerName);
                    errMessage 
=   string .Format( " 区域:{0}不存在,创建失败 " , ContainerName);
                    
return   false ;
                }
                
if  (IsExistsMXType(ContainerName,OwnerName))
                {
                    Console.WriteLine(
" {0}中已存在{1},创建失败 " , ContainerName,OwnerName );
                    errMessage 
=   string .Format( " {0}中已存在{1},创建失败 " , ContainerName, OwnerName);
                    
return   false ;
                }
                
                MI 
=  DnsClass.GetMethodParameters( " CreateInstanceFromPropertyData " );
              
                MI[
" DnsServerName " =   " localhost " ;
                MI[
" ContainerName " =  ContainerName;
                
//  MI["RecordClass"] = 1;   // Default value is 1.   // 1 IN (Internet)   // 2 CS (CSNET)    // 3 CH (CHAOS)    // 4 HS (Hesiod) 
                MI[ " MailExchange " =  MailExchange;
                MI[
" OwnerName " =  OwnerName;
                MI[
" Preference " =  Preference;

                
if  ( string .IsNullOrEmpty(TTL))
                {
                    TTL 
=   " 3600 " ;
                }
                MI[
" TTL " =  TTL;
                DnsClass.InvokeMethod(
" CreateInstanceFromPropertyData " , MI,  null );
                errMessage 
=   " MX记录: "   +  OwnerName  +   " 创建成功. " ;
                
return   true ;
            }
            
catch  (Exception e)
            {
                errMessage 
=  e.Message;
                Console.WriteLine(e.ToString());
                
return   false ;
            }
           
        }

        
///   <summary>
        
///  修改MicrosoftDNS_MXType记录(修改邮件交换记录)
        
///   </summary>
        
///   <param name="HostName"> 主机名 [如果为空或NULL,主机名将与域名保持一致.] </param>
        
///   <param name="ContainerName"> 主域名 主域 Name of the Container for the Zone, Cache, or RootHints instance that contains this RR. </param>
        
///   <param name="TTL"> [in, optional] Time, in seconds, that the RR can be cached by a DNS resolver.  </param>
        
///   <param name="MailExchange"> [in, optional] FQDN specifying a host willing to act as a mail exchange for the owner name.  </param>
        
///   <param name="Preference"> 邮件优先级 [in, optional] Preference given to this RR among others at the same owner. Lower values are preferred.  </param>
        
///   <returns></returns>
         public   bool  ModifyMXType( string  HostName,  string  ContainerName,  string  TTL,  string  MailExchange, string  Preference)
        {
            
try
            {
                
string  OwnerName  =   null ;
                
if  ( string .IsNullOrEmpty(HostName))
                {
                    OwnerName 
=  ContainerName;
                }
                
else
                {
                    OwnerName 
=  HostName  +   " . "   +  ContainerName;
                }

                
this .Create( " MicrosoftDNS_MXType " );
                
// 如果区域不存在
                 if  ( ! IsExistsZone(ContainerName))
                {
                    Console.WriteLine(
" 区域:{0}不存在,修改失败 " , ContainerName);
                    errMessage 
=   string .Format( " 区域:{0}不存在,修改失败 " , ContainerName);
                    
return   false ;
                }
                
if  ( ! IsExistsMXType(ContainerName, OwnerName))
                {
                    Console.WriteLine(
" {0}中不存在{1},修改失败 " , ContainerName, OwnerName);
                    errMessage 
=   string .Format( " {0}中不存在{1},修改失败 " , ContainerName, OwnerName);
                    
return   false ;
                }
                Q 
=  QueryDNS( " Select * From MicrosoftDNS_MXType Where ContainerName=' "   +  ContainerName  +   " ' and OwnerName=' "   +  OwnerName  +   " ' " ); 
                
foreach  (ManagementObject oManObject  in  Q)
                {
                    MI 
=  oManObject.GetMethodParameters( " Modify " );
                    
if  ( string .IsNullOrEmpty(TTL))
                    {
                        TTL 
=   " 3600 " ;
                    }

                    
if  (ClearEndDot(oManObject[ " MailExchange " ].ToString())  ==  ClearEndDot(MailExchange)  &&  oManObject[ " Preference " ].ToString()  ==  Preference)
                    {
                        errMessage 
=   " MX记录: "   +  OwnerName  +   " 修改失败,必须修改目标主机或邮件优先级. " ;
                        
return   false ;
                    }

                    MI[
" TTL " =  TTL;
                    MI[
" MailExchange " =  MailExchange;
                    MI[
" Preference " =  Preference;
                    oManObject.InvokeMethod(
" Modify " , MI,  null );
                    errMessage 
=   " MX记录: "   +  OwnerName  +   " 修改成功. " ;
                    
return   true ;
                }
                
return   false ;
            }
            
catch  (Exception e)
            {
                errMessage 
=  e.Message;
                Console.WriteLine(e.ToString());
                
return   false ;
            }
        }



        
///   <summary>
        
///  删除MicrosoftDNS_MXType
        
///   </summary>
        
///   <param name="HostName"> 主机名 [如果为空或NULL,主机名将与域名保持一致.] </param>
        
///   <param name="ContainerName"> 主域名 主域 Name of the Container for the Zone, Cache, or RootHints instance that contains this RR. </param>
        
///   <returns></returns>
         public   bool  DelMXType( string  HostName,  string  ContainerName)
        {
            
try
            { 
                
string  OwnerName  =   null ;
                
if  ( string .IsNullOrEmpty(HostName))
                {
                    OwnerName 
=  ContainerName;
                }
                
else
                {
                    OwnerName 
=  HostName  +   " . "   +  ContainerName;
                }

                
this .Create( " MicrosoftDNS_MXType " );
                
// 如果区域不存在
                 if  ( ! IsExistsZone(ContainerName))
                {
                    Console.WriteLine(
" 区域:{0}不存在,删除失败 " , ContainerName);
                    errMessage 
=   string .Format( " 区域:{0}不存在,删除失败 " , ContainerName);
                    
return   false ;
                }
                
if  ( ! IsExistsMXType(ContainerName, OwnerName))
                {
                    Console.WriteLine(
" {0}中不存在{1},删除失败 " , ContainerName, OwnerName);
                    errMessage 
=   string .Format( " {0}中不存在{1},删除失败 " , ContainerName, OwnerName);
                    
return   false ;
                }
                Q 
=  QueryDNS( " Select * From MicrosoftDNS_MXType Where ContainerName=' "   +  ContainerName  +   " ' and OwnerName=' "   +  OwnerName  +   " ' " );

                
foreach  (ManagementObject oManObject  in  Q)
                {
                    oManObject.Delete();
                    errMessage 
=   " MX记录: "   +  OwnerName  +   " 删除成功. " ;
                    
return   true ;
                }
                
return   false ;
            }
            
catch  (Exception e)
            {
                errMessage 
=  e.Message;
                Console.WriteLine(e.ToString());
                
return   false ;
            }
        }


        
///   <summary>
        
///  判断在某MicrosoftDNS_CNAMEType是否在指定的域中存在
        
///   </summary>
        
///   <param name="ContainerName"> 主域名 主域 Name of the Container for the Zone, Cache, or RootHints instance that contains this RR. </param>
        
///   <param name="OwnerName"> Owner name for the RR.  </param>
        
///   <returns></returns>
         public   bool  IsExistsCNAMEType( string  ContainerName,  string  OwnerName)
        {
            
try
            {

                Q 
=  QueryDNS( " Select * From MicrosoftDNS_CNAMEType Where ContainerName=' "   +  ContainerName  +   " ' and OwnerName=' "   +  OwnerName  +   " ' " );

                
foreach  (ManagementObject oManObject  in  Q)
                {
                    
//   Console.WriteLine(oManObject["MailExchange"].ToString());
                     return   true ;
                }
                
return   false ;
            }
            
catch  (Exception e)
            {
                errMessage 
=  e.Message;
                Console.WriteLine(e.ToString());
                
return   false ;
            }
        }

        
///   <summary>
        
///  创建MicrosoftDNS_CNAMEType记录(别名)
        
///   </summary>
        
///   <param name="HostName"> 主机名 [如果为空或NULL,主机名将与域名保持一致.] </param>
        
///   <param name="ContainerName"> 主域 Name of the Container for the Zone, Cache, or RootHints instance that contains this RR. </param>
        
///   <param name="PrimaryName"> in] Primary name of the CNAME RR </param>
        
///   <param name="TTL"> Time, in seconds, that the RR can be cached by a DNS resolver </param>
        
///   <returns></returns>
         public   bool  CreateCNAMEType( string  HostName,  string  ContainerName,  string  PrimaryName,   string  TTL)
        {
            
try
            {
                
string  OwnerName  =   null ;
                
if  ( string .IsNullOrEmpty(HostName))
                {
                    OwnerName 
=  ContainerName;
                }
                
else
                {
                    OwnerName 
=  HostName  +   " . "   +  ContainerName;
                }

                
this .Create( " MicrosoftDNS_CNAMEType " );
                
// 如果区域不存在
                 if  ( ! IsExistsZone(ContainerName))
                {
                    Console.WriteLine(
" 区域:{0}不存在,创建失败 " , ContainerName);
                    errMessage 
=   string .Format( " 区域:{0}不存在,创建失败 " , ContainerName);
                    
return   false ;
                }
                
if  (IsExistsCNAMEType(ContainerName, OwnerName))
                {
                    Console.WriteLine(
" {0}中已存在{1},创建失败 " , ContainerName, OwnerName);
                    errMessage 
=   string .Format( " {0}中已存在{1},创建失败 " , ContainerName, OwnerName);
                    
return   false ;
                }

                MI 
=  DnsClass.GetMethodParameters( " CreateInstanceFromPropertyData " );

                MI[
" DnsServerName " =   " localhost " ;
                MI[
" ContainerName " =  ContainerName;
                
//  MI["RecordClass"] = 1;   // Default value is 1.   // 1 IN (Internet)   // 2 CS (CSNET)    // 3 CH (CHAOS)    // 4 HS (Hesiod) 
                MI[ " PrimaryName " =  PrimaryName;
                MI[
" OwnerName " =  OwnerName;

                
if  ( string .IsNullOrEmpty(TTL))
                {
                    TTL 
=   " 3600 " ;
                }
                MI[
" TTL " =  TTL;
                DnsClass.InvokeMethod(
" CreateInstanceFromPropertyData " , MI,  null );
                errMessage 
=   " CNAME: "   +  OwnerName  +   " 创建成功. " ;
                
return   true ;
            }
            
catch  (Exception e)
            {
                errMessage 
=  e.Message;
                Console.WriteLine(e.ToString());
                
return   false ;
            }
            
        }

        
///   <summary>
        
///  修改MicrosoftDNS_CNAMEType记录(别名)
        
///   </summary>
        
///   <param name="HostName"> 主机名 [如果为空或NULL,主机名将与域名保持一致.] </param>
        
///   <param name="ContainerName"> 主域名 主域 Name of the Container for the Zone, Cache, or RootHints instance that contains this RR. </param>
        
///   <param name="TTL"> [in, optional] Time, in seconds, that the RR can be cached by a DNS resolver.  </param>
        
///   <param name="PrimaryName"> in] Primary name of the CNAME RR </param>
        
///   <returns></returns>
         public   bool  ModifyCNAMEType( string  HostName,  string  ContainerName,  string  TTL,  string  PrimaryName)
        {
            
try
            {
                
string  OwnerName  =   null ;
                
if  ( string .IsNullOrEmpty(HostName))
                {
                    OwnerName 
=  ContainerName;
                }
                
else
                {
                    OwnerName 
=  HostName  +   " . "   +  ContainerName;
                }

                
this .Create( " MicrosoftDNS_CNAMEType " );
                
// 如果区域不存在
                 if  ( ! IsExistsZone(ContainerName))
                {
                    Console.WriteLine(
" 区域:{0}不存在,修改失败 " , ContainerName);
                    errMessage 
=   string .Format( " 区域:{0}不存在,修改失败 " , ContainerName);
                    
return   false ;
                }
                
if  ( ! IsExistsCNAMEType(ContainerName, OwnerName))
                {
                    Console.WriteLine(
" {0}中不存在{1},修改失败 " , ContainerName, OwnerName);
                    errMessage 
=   string .Format( " {0}中不存在{1},修改失败 " , ContainerName, OwnerName);
                    
return   false ;
                }
                Q 
=  QueryDNS( " Select * From MicrosoftDNS_CNAMEType Where ContainerName=' "   +  ContainerName  +   " ' and OwnerName=' "   +  OwnerName  +   " ' " );
                
foreach  (ManagementObject oManObject  in  Q)
                {
                    
if  (ClearEndDot(oManObject[ " PrimaryName " ].ToString())  ==  ClearEndDot(PrimaryName))
                    {
                        errMessage 
=   " CName记录: "   +  OwnerName  +   " 修改失败,必须修改别名主机. " ;
                        
return   false ;
                    }


                    MI 
=  oManObject.GetMethodParameters( " Modify " );
                    
if  ( string .IsNullOrEmpty(TTL))
                    {
                        TTL 
=   " 3600 " ;
                    }
                    MI[
" TTL " =  TTL;
                    MI[
" PrimaryName " =  PrimaryName;
                    oManObject.InvokeMethod(
" Modify " , MI,  null );
                    errMessage 
=   " CNAME: "   +  OwnerName  +   " 修改成功. " ;
                    
return   true ;
                }
                
return   false ;
            }
            
catch  (Exception e)
            {
                errMessage 
=  e.Message;
                Console.WriteLine(e.ToString());
                
return   false ;
            }
        }



        
///   <summary>
        
///  删除MicrosoftDNS_CNAMEType
        
///   </summary>
        
///   <param name="HostName"> 主机名 [如果为空或NULL,主机名将与域名保持一致.] </param>
        
///   <param name="ContainerName"> 主域名 主域 Name of the Container for the Zone, Cache, or RootHints instance that contains this RR. </param>
        
///   <returns></returns>
         public   bool  DelCNAMEType( string  HostName,  string  ContainerName)
        {
            
try
            {
                
string  OwnerName  =   null ;
                
if  ( string .IsNullOrEmpty(HostName))
                {
                    OwnerName 
=  ContainerName;
                }
                
else
                {
                    OwnerName 
=  HostName  +   " . "   +  ContainerName;
                }

                
this .Create( " MicrosoftDNS_CNAMEType " );
                
// 如果区域不存在
                 if  ( ! IsExistsZone(ContainerName))
                {
                    Console.WriteLine(
" 区域:{0}不存在,删除失败 " , ContainerName);
                    errMessage 
=   string .Format( " 区域:{0}不存在,删除失败 " , ContainerName);
                    
return   false ;
                }
                
if  ( ! IsExistsCNAMEType(ContainerName, OwnerName))
                {
                    Console.WriteLine(
" {0}中不存在{1},删除失败 " , ContainerName, OwnerName);
                    errMessage 
=   string .Format( " {0}中不存在{1},删除失败 " , ContainerName, OwnerName);
                    
return   false ;
                }
                Q 
=  QueryDNS( " Select * From MicrosoftDNS_CNAMEType Where ContainerName=' "   +  ContainerName  +   " ' and OwnerName=' "   +  OwnerName  +   " ' " );

                
foreach  (ManagementObject oManObject  in  Q)
                {
                    oManObject.Delete();
                    errMessage 
=   " CNAME: "   +  OwnerName  +   " 删除成功. " ;
                    
return   true ;
                }
                
return   false ;
            }
            
catch  (Exception e)
            {
                errMessage 
=  e.Message;
                Console.WriteLine(e.ToString());
                
return   false ;
            }
        }


        
///   <summary>
        
///  去除以.结尾的字符串的.
        
///   </summary>
        
///   <param name="str"></param>
        
///   <returns></returns>
         private   string  ClearEndDot( string  str)
        {
            
string  returnStr  =  str;
            
if  ( ! string .IsNullOrEmpty(str))
            {
                
int  l  =  str.LastIndexOf( " . " );
                
if  (l  !=   - 1   &&  l  ==  str.Length  -   1 )
                {
                    returnStr 
=  str.Substring( 0 , str.Length  -   1 );
                }
            }
            
return  returnStr;
        }

    }
}



转载于:https://www.cnblogs.com/yaosansi/archive/2006/11/04/DNSServiceInCsharpWithWMI.html

基于SSM框架的智能家政保洁预约系统,是一个旨在提高家政保洁服务预约效率和管理水平的平台。该系统通过集成现代信息技术,为家政公司、家政服务人员和消费者提供了一个便捷的在线预约和管理系统。 系统的主要功能包括: 1. **用户管理**:允许消费者注册、登录,并管理他们的个人资料和预约历史。 2. **家政人员管理**:家政服务人员可以注册并更新自己的个人信息、服务类别和服务时间。 3. **服务预约**:消费者可以浏览不同的家政服务选项,选择合适的服务人员,并在线预约服务。 4. **订单管理**:系统支持订单的创建、跟踪和管理,包括订单的确认、完成和评价。 5. **评价系统**:消费者可以在家政服务完成后对服务进行评价,帮助提高服务质量和透明度。 6. **后台管理**:管理员可以管理用户、家政人员信息、服务类别、预约订单以及处理用户反馈。 系统采用Java语言开发,使用MySQL数据库进行数据存储,通过B/S架构实现用户与服务的在线交互。系统设计考虑了不同用户角色的需求,包括管理员、家政服务人员和普通用户,每个角色都有相应权限和功能。此外,系统还采用了软件组件化、精化体系结构、分离逻辑和数据等方法,以便于未来的系统升级和维护。 智能家政保洁预约系统通过提供一个集中的平台,不仅方便了消费者的预约和管理,也为家政服务人员提供了一个展示和推广自己服务的机会。同时,系统的后台管理功能为家政公司提供了强大的数据支持和决策辅助,有助于提高服务质量和管理效率。该系统的设计与实现,标志着家政保洁服务向现代化和网络化的转型,为管理决策和控制提供保障,是行业发展中的重要里程碑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值