DataConvert,实现MDB到Oracle属性、空间数据的插入

        public static class DataConvert
        {
        #region 将mdb中要素类转换追加到sde数据库已有的要素类中  
        /// <summary>
        /// 将mdb中要素类转换追加到sde数据库已有的要素类中  
        /// </summary>
        /// <param name="sourceWorkspace">源工作空间</param>
        /// <param name="targetWorkspace">目标工作空间</param>
        /// <param name="nameOfSourceFeatureClass">源FeatureClass名称</param>
        /// <param name="nameOfTargetFeatureClass">目标FeatureClass名称</param>
        public static void AddMDBFeatureClassToSDE(IWorkspace sourceWorkspace, IWorkspace targetWorkspace,string nameOfSourceAttributeTable, string nameOfSourceSpatialTable, string nameOfTargetSpatialTable)
        {
            try
            {
                IFeatureWorkspace pSourceFW = sourceWorkspace as IFeatureWorkspace;
                //源空间表
                IFeatureClass pSourceFc = pSourceFW.OpenFeatureClass(nameOfSourceSpatialTable);
                //源属性表
                ITable pSourceAttributeTable = pSourceFW.OpenTable(nameOfSourceAttributeTable);

                IFeatureWorkspace pTargetFW = targetWorkspace as IFeatureWorkspace;
                //目标空间表
                IFeatureClass pTargetFc = pTargetFW.OpenFeatureClass(nameOfTargetSpatialTable);


                if (pTargetFc.AliasName == "采伐小班")
                {
                    //空间数据从mdb导入到oracle数据库
                    mdb2fc(targetWorkspace, pSourceFc, pTargetFc);
                    //属性数据从mdb导入到oracle数据库
                    mdb2fcOfAttributeTable_Cf(targetWorkspace, pSourceAttributeTable, pTargetFc);
                }
                if (pTargetFc.AliasName == "征占小班")
                {
                    //空间数据从mdb导入到oracle数据库
                    mdb2fc(targetWorkspace, pSourceFc, pTargetFc);
                    mdb2fcOfAttributeTable_Zz(targetWorkspace, pSourceAttributeTable, pTargetFc);
                }
            }
            catch(Exception ex)
            {
                ForeStar.CoreUI.Message.MessageManager.Show(ForeStar.CoreUI.Message.MessageType.Error,ex.Message, "提示");
                return;
            }
        }

       
        #endregion

        #region 空间数据导入——追加要素到SDE的featureclass中
        /// <summary>
        /// 追加要素到SDE的featureclass中  
        /// </summary>
        /// <param name="targetWorkspace">源工作空间</param>
        /// <param name="pSourceFc"></param>
        /// <param name="pTargetFc"></param>
        private static void mdb2fc(IWorkspace targetWorkspace, IFeatureClass pSourceFc, IFeatureClass pTargetFc)
        {
            IFeatureCursor pFeaCursor = pSourceFc.Search(null, false);
            //目标工作空间开启编辑模式
            IWorkspaceEdit workSpaceEdit = targetWorkspace as IWorkspaceEdit;
            workSpaceEdit.StartEditing(false);
            workSpaceEdit.StartEditOperation();

            IFeature pFeature = pFeaCursor.NextFeature();

            IField pField = new FieldClass();
            int iIndex = 0;
            while (pFeature != null)
            {
                ESRI.ArcGIS.Geodatabase.IFeature tempFeature = pTargetFc.CreateFeature();
                tempFeature.Shape = pFeature.Shape;
                try
                {
                    //添加字段值  
                    for (int j = 0; j < pSourceFc.Fields.FieldCount; j++)
                    {
                        pField = pSourceFc.Fields.get_Field(j);
                        iIndex = tempFeature.Fields.FindField(pField.Name);
                        for (int i = 0; i < pTargetFc.Fields.FieldCount; i++)
                        {
                            IField pTargetField = new FieldClass();
                            pTargetField = pTargetFc.Fields.get_Field(i);
                            if (pTargetField.Name == pField.Name && iIndex != -1)
                            {
                                if (pTargetField.Name == "OBJECTID" || pTargetField.Name == "SHAPE")
                                {
                                    continue;
                                }
                                tempFeature.set_Value(iIndex, pFeature.get_Value(j));
                            }
                        }
                    }
                    tempFeature.Store();
                }
                catch (System.Exception ex)
                {
                    ForeStar.CoreUI.Message.MessageManager.Show(ForeStar.CoreUI.Message.MessageType.Error, "要素写入异常!" + ex.Message, "提示");
                    return;
                }
                pFeature = pFeaCursor.NextFeature();
            }
            //目标工作空间停止编辑模式并保存编辑结果
            workSpaceEdit.StopEditing(true);
            workSpaceEdit.StopEditOperation();
        }
        #endregion

        #region 属性数据导入——征占——根据对应条件(XIANGMU_BH)补充pTargetFc中信息
        /// <summary>
        /// 征占——根据对应条件(XIANGMU_BH)补充pTargetFc中信息
        /// </summary>
        /// <param name="targetWorkspace">目标工作空间</param>
        /// <param name="pSourceAttributeTable">源ITable</param>
        /// <param name="pTargetFc">目标IFeatureClass</param>
        private static void mdb2fcOfAttributeTable_Zz(IWorkspace targetWorkspace, ITable pSourceAttributeTable, IFeatureClass pTargetFc)
        {
            try
            {
                IFeatureCursor pTargetFeatureCursor = pTargetFc.Search(null, false);

                //目标工作空间开启编辑模式
                IWorkspaceEdit workSpaceEdit = targetWorkspace as IWorkspaceEdit;
                workSpaceEdit.StartEditing(false);
                workSpaceEdit.StartEditOperation();

                int j = 0;
                IFeature pTargetFeatureRow = pTargetFeatureCursor.NextFeature();

                while (j < pTargetFc.FeatureCount(null))
                {
                    string strTargetFcProductID = pTargetFeatureRow.get_Value(1).ToString();
                    int i = 0;
                    ICursor pSourceFeatureCursor = pSourceAttributeTable.Search(null, false);
                    IRow pSourceTableRow = pSourceFeatureCursor.NextRow();
                    while (i < pSourceAttributeTable.RowCount(null))
                    {
                        //源数据该行ProductID
                        string strSourceAttributeTableProductID = pSourceTableRow.get_Value(0).ToString();
                        if (!string.IsNullOrEmpty(strTargetFcProductID) && strTargetFcProductID == strSourceAttributeTableProductID)
                        {
                            pTargetFeatureRow.set_Value(48, pSourceTableRow.get_Value(1));
                            pTargetFeatureRow.set_Value(49, pSourceTableRow.get_Value(2));
                            pTargetFeatureRow.set_Value(50, pSourceTableRow.get_Value(3));
                            pTargetFeatureRow.set_Value(51, pSourceTableRow.get_Value(4));
                            pTargetFeatureRow.set_Value(52, pSourceTableRow.get_Value(5));
                            pTargetFeatureRow.set_Value(53, pSourceTableRow.get_Value(6));
                            pTargetFeatureRow.set_Value(54, pSourceTableRow.get_Value(7));
                            pTargetFeatureRow.set_Value(55, pSourceTableRow.get_Value(8));
                            pTargetFeatureRow.set_Value(56, pSourceTableRow.get_Value(9));
                            pTargetFeatureRow.set_Value(57, pSourceTableRow.get_Value(10));
                            pTargetFeatureRow.set_Value(58, pSourceTableRow.get_Value(11));
                            pTargetFeatureRow.set_Value(59, pSourceTableRow.get_Value(12));
                            pTargetFeatureRow.set_Value(60, pSourceTableRow.get_Value(13));
                            pTargetFeatureRow.set_Value(61, pSourceTableRow.get_Value(14));
                            pTargetFeatureRow.set_Value(62, pSourceTableRow.get_Value(15));
                            pTargetFeatureRow.set_Value(63, pSourceTableRow.get_Value(16));
                            pTargetFeatureRow.set_Value(64, pSourceTableRow.get_Value(17));
                            pTargetFeatureRow.set_Value(65, pSourceTableRow.get_Value(18));
                            pTargetFeatureRow.set_Value(66, pSourceTableRow.get_Value(19));
                            pTargetFeatureRow.set_Value(67, pSourceTableRow.get_Value(20));
                            pTargetFeatureRow.set_Value(68, pSourceTableRow.get_Value(21));
                            pTargetFeatureRow.set_Value(69, pSourceTableRow.get_Value(22));
                            pTargetFeatureRow.set_Value(70, pSourceTableRow.get_Value(23));
                            pTargetFeatureRow.set_Value(71, pSourceTableRow.get_Value(24));
                            pTargetFeatureRow.set_Value(72, pSourceTableRow.get_Value(25));
                            pTargetFeatureRow.set_Value(73, pSourceTableRow.get_Value(26));
                            pTargetFeatureRow.set_Value(74, pSourceTableRow.get_Value(27));
                            pTargetFeatureRow.set_Value(75, pSourceTableRow.get_Value(28));
                            pTargetFeatureRow.set_Value(76, pSourceTableRow.get_Value(29));
                            pTargetFeatureRow.set_Value(77, pSourceTableRow.get_Value(30));
                            pTargetFeatureRow.set_Value(78, pSourceTableRow.get_Value(31));
                            pTargetFeatureRow.set_Value(79, pSourceTableRow.get_Value(32));
                            pTargetFeatureRow.set_Value(80, pSourceTableRow.get_Value(33));
                            pTargetFeatureRow.set_Value(81, pSourceTableRow.get_Value(34));
                            pTargetFeatureRow.set_Value(82, pSourceTableRow.get_Value(35));
                            pTargetFeatureRow.set_Value(83, pSourceTableRow.get_Value(36));
                            pTargetFeatureRow.set_Value(84, pSourceTableRow.get_Value(37));
                            pTargetFeatureRow.set_Value(85, pSourceTableRow.get_Value(38));
                            pTargetFeatureRow.set_Value(86, pSourceTableRow.get_Value(39));
                            pTargetFeatureRow.set_Value(87, pSourceTableRow.get_Value(40));
                            pTargetFeatureRow.set_Value(88, pSourceTableRow.get_Value(41));
                            pTargetFeatureRow.set_Value(89, pSourceTableRow.get_Value(42));
                            pTargetFeatureRow.set_Value(90, pSourceTableRow.get_Value(43));
                            pTargetFeatureRow.set_Value(91, pSourceTableRow.get_Value(44));
                            pTargetFeatureRow.Store();
                        }
                        pSourceTableRow = pSourceFeatureCursor.NextRow();
                        i++;
                    }
                    pTargetFeatureRow = pTargetFeatureCursor.NextFeature();
                    j++;
                }
                //目标工作空间停止编辑模式并保存编辑结果
                workSpaceEdit.StopEditing(true);
                workSpaceEdit.StopEditOperation();
            }
            catch (System.Exception ex)
            {
                ForeStar.CoreUI.Message.MessageManager.Show(ForeStar.CoreUI.Message.MessageType.Error, "要素写入异常!" + ex.Message, "提示");
                return;
            }
        } 
        #endregion

        #region 属性数据导入——采伐——根据对应条件(ProductID)补充pTargetFc中信息
        /// <summary>
        /// 采伐——根据对应条件(ProductID)补充pTargetFc中信息
        /// </summary>
        /// <param name="targetWorkspace">目标工作空间</param>
        /// <param name="pSourceAttributeTable">源ITable</param>
        /// <param name="pTargetFc">目标IFeatureClass</param>
        private static void mdb2fcOfAttributeTable_Cf(IWorkspace targetWorkspace, ITable pSourceAttributeTable, IFeatureClass pTargetFc)
        {
            try
            {
                IFeatureCursor pTargetFeatureCursor = pTargetFc.Search(null, false);

                //目标工作空间开启编辑模式
                IWorkspaceEdit workSpaceEdit = targetWorkspace as IWorkspaceEdit;
                workSpaceEdit.StartEditing(false);
                workSpaceEdit.StartEditOperation();

                int j = 0;
                IFeature pTargetFeatureRow = pTargetFeatureCursor.NextFeature();

                while (j < pTargetFc.FeatureCount(null))
                {
                    string strTargetFcProductID = pTargetFeatureRow.get_Value(1).ToString();
                    int i = 0;
                    ICursor pSourceFeatureCursor = pSourceAttributeTable.Search(null, false);
                    IRow pSourceTableRow = pSourceFeatureCursor.NextRow();
                    while (i < pSourceAttributeTable.RowCount(null))
                    {
                        //源数据该行ProductID
                        string strSourceAttributeTableProductID = pSourceTableRow.get_Value(0).ToString();
                        if (!string.IsNullOrEmpty(strTargetFcProductID) && strTargetFcProductID == strSourceAttributeTableProductID)
                        {
                            pTargetFeatureRow.set_Value(88, pSourceTableRow.get_Value(1));
                            pTargetFeatureRow.set_Value(89, pSourceTableRow.get_Value(2));
                            pTargetFeatureRow.set_Value(90, pSourceTableRow.get_Value(3));
                            pTargetFeatureRow.set_Value(91, pSourceTableRow.get_Value(4));
                            pTargetFeatureRow.set_Value(92, pSourceTableRow.get_Value(5));
                            pTargetFeatureRow.set_Value(93, pSourceTableRow.get_Value(6));
                            pTargetFeatureRow.set_Value(94, pSourceTableRow.get_Value(7));
                            pTargetFeatureRow.set_Value(95, pSourceTableRow.get_Value(8));
                            pTargetFeatureRow.set_Value(96, pSourceTableRow.get_Value(9));
                            pTargetFeatureRow.set_Value(97, pSourceTableRow.get_Value(10));
                            pTargetFeatureRow.set_Value(98, pSourceTableRow.get_Value(11));
                            pTargetFeatureRow.set_Value(99, pSourceTableRow.get_Value(12));
                            pTargetFeatureRow.set_Value(100, pSourceTableRow.get_Value(13));
                            pTargetFeatureRow.set_Value(101, pSourceTableRow.get_Value(14));
                            pTargetFeatureRow.set_Value(102, pSourceTableRow.get_Value(15));
                            pTargetFeatureRow.set_Value(103, pSourceTableRow.get_Value(16));
                            pTargetFeatureRow.set_Value(104, pSourceTableRow.get_Value(17));
                            pTargetFeatureRow.set_Value(105, pSourceTableRow.get_Value(18));
                            pTargetFeatureRow.set_Value(106, pSourceTableRow.get_Value(19));
                            pTargetFeatureRow.set_Value(107, pSourceTableRow.get_Value(20));
                            pTargetFeatureRow.set_Value(108, pSourceTableRow.get_Value(21));
                            pTargetFeatureRow.set_Value(109, pSourceTableRow.get_Value(22));
                            pTargetFeatureRow.set_Value(110, pSourceTableRow.get_Value(23));
                            pTargetFeatureRow.set_Value(111, pSourceTableRow.get_Value(24));
                            pTargetFeatureRow.set_Value(112, pSourceTableRow.get_Value(25));
                            pTargetFeatureRow.Store();
                        }
                        pSourceTableRow = pSourceFeatureCursor.NextRow();
                        i++;
                    }
                    pTargetFeatureRow = pTargetFeatureCursor.NextFeature();
                    j++;
                }
                //目标工作空间停止编辑模式并保存编辑结果
                workSpaceEdit.StopEditing(true);
                workSpaceEdit.StopEditOperation();
            }
            catch (System.Exception ex)
            {
                ForeStar.CoreUI.Message.MessageManager.Show(ForeStar.CoreUI.Message.MessageType.Error, "要素写入异常!" + ex.Message, "提示");
                return;
            }
        }
        #endregion

     





        #region 将mdb中的要素数据集转换到sde数据库中 (数据库根目录)
        /// <summary>
        /// 将mdb中的要素数据集转换到sde数据库中 (数据库根目录)
        /// </summary>
        /// <param name="lName"></param>
        /// <param name="inWorkspace"></param>
        /// <param name="outWorkspace"></param>
        /// <returns></returns>
        public static bool impLayerByName(ESRI.ArcGIS.esriSystem.IName lName, ESRI.ArcGIS.Geodatabase.IWorkspace inWorkspace,
          ESRI.ArcGIS.Geodatabase.IWorkspace outWorkspace)
        {
            try
            {
                //输入要素         
                ESRI.ArcGIS.Geodatabase.IFeatureClass inFeatureClass = (ESRI.ArcGIS.Geodatabase.IFeatureClass)lName.Open();
                ESRI.ArcGIS.Geodatabase.IFeatureClassName inFeatureClassName = (ESRI.ArcGIS.Geodatabase.IFeatureClassName)lName;
                // 输出要素
                ESRI.ArcGIS.Geodatabase.IFeatureClassName outFeatureClassName = new ESRI.ArcGIS.Geodatabase.FeatureClassNameClass();
                ESRI.ArcGIS.Geodatabase.IDatasetName outDatasetName = (ESRI.ArcGIS.Geodatabase.IDatasetName)outFeatureClassName;
                ESRI.ArcGIS.Geodatabase.IDataset outWorkspaceDataset = (ESRI.ArcGIS.Geodatabase.IDataset)outWorkspace;
                ESRI.ArcGIS.Geodatabase.IWorkspaceName outWorkspaceName = (ESRI.ArcGIS.Geodatabase.IWorkspaceName)outWorkspaceDataset.FullName;
                outDatasetName.WorkspaceName = outWorkspaceName;
                //string outFullName = ((IDatasetName)lName).Name;
                //string outFileName = outFullName.Substring(outFullName.LastIndexOf(".") + 1);
                //outDatasetName.Name = "SDE." + ((ESRI.ArcGIS.Geodatabase.IDatasetName)lName).Name;
                outDatasetName.Name = "XYLYZY." + ((ESRI.ArcGIS.Geodatabase.IDatasetName)lName).Name;
                //验证字段
                ESRI.ArcGIS.Geodatabase.IFieldChecker fieldChecker = new ESRI.ArcGIS.Geodatabase.FieldCheckerClass();
                ESRI.ArcGIS.Geodatabase.IFields outFeatureClassFields;
                ESRI.ArcGIS.Geodatabase.IFields inFeatureClassFields = inFeatureClass.Fields;
                ESRI.ArcGIS.Geodatabase.IEnumFieldError enumFieldError;
                fieldChecker.InputWorkspace = inWorkspace;
                fieldChecker.ValidateWorkspace = outWorkspace;

                fieldChecker.Validate(inFeatureClassFields, out enumFieldError, out outFeatureClassFields);
                // Set up the geometry definition.
                ESRI.ArcGIS.Geodatabase.IField geometryField;
                geometryField = outFeatureClassFields.get_Field(outFeatureClassFields.FindField(inFeatureClass.ShapeFieldName));
                // Get the geometry field's geometry definition.
                ESRI.ArcGIS.Geodatabase.IGeometryDef geometryDef = geometryField.GeometryDef;

                ESRI.ArcGIS.Geodatabase.QueryFilter qf = new ESRI.ArcGIS.Geodatabase.QueryFilterClass();
                qf.WhereClause = "";

                ESRI.ArcGIS.Geodatabase.IFeatureDataConverter fctofc = new ESRI.ArcGIS.Geodatabase.FeatureDataConverterClass();
                ESRI.ArcGIS.Geodatabase.IEnumInvalidObject enumErrors = fctofc.ConvertFeatureClass(inFeatureClassName, qf, null, outFeatureClassName, geometryDef, outFeatureClassFields, "", 1000, 0);
                return true;
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.Message);
                return false;
            }
        }
        #endregion

        #region 将mdb中的要素数据集转换到sde数据库中  ConvertFeatureDataset
        /// <summary>  
        /// 将mdb中的要素数据集转换到sde数据库中  
        /// </summary>  
        /// <param name="sourceWorkspace"></param>  
        /// <param name="targetWorkspace"></param>  
        /// <param name="nameOfSourceFeatureDataset"></param>  
        /// <param name="nameOfTargetFeatureDataset"></param>  
        public static void ConvertMDBFeatureDatasetToSDE(IWorkspace sourceWorkspace, IWorkspace targetWorkspace,
            string nameOfSourceFeatureDataset, string nameOfTargetFeatureDataset)
        {
            if (sourceWorkspace == null || targetWorkspace == null)
            {
                return;
            }
            //创建源工作空间名        
            IDataset sourceWorkspaceDataset = (IDataset)sourceWorkspace;
            IWorkspaceName sourceWorkspaceName = (IWorkspaceName)sourceWorkspaceDataset.FullName;
            //创建源数据集名  
            IFeatureDatasetName sourceFeatureDatasetName = new FeatureDatasetNameClass();
            IDatasetName sourceDatasetName = (IDatasetName)sourceFeatureDatasetName;
            sourceDatasetName.WorkspaceName = sourceWorkspaceName;
            sourceDatasetName.Name = nameOfSourceFeatureDataset;
            //创建目标工作空间名  
            IDataset targetWorkspaceDataset = (IDataset)targetWorkspace;
            IWorkspaceName targetWorkspaceName = (IWorkspaceName)targetWorkspaceDataset.FullName;
            //创建目标数据集名  
            IFeatureDatasetName targetFeatureDatasetName = new FeatureDatasetNameClass();
            IDatasetName targetDatasetName = (IDatasetName)targetFeatureDatasetName;
            targetDatasetName.WorkspaceName = targetWorkspaceName;
            targetDatasetName.Name = nameOfTargetFeatureDataset;
            //转换(复制)源数据集到目标数据集  
            IFeatureDataConverter featureDataConverter = new FeatureDataConverter();
            featureDataConverter.ConvertFeatureDataset(sourceFeatureDatasetName, targetFeatureDatasetName, null, "", 1000, 0);

        } 
        #endregion

        #region  将mdb中的要素数据集转换到sde数据库中 (数据集中)
        /// <summary>
        /// 将mdb中的要素数据集转换到sde数据库中 (数据集中)
        /// </summary>
        /// <param name="lName"></param>
        /// <param name="inWorkspace"></param>
        /// <param name="featureDataset"></param>
        /// <returns></returns>
        public static bool impLayerByNameIntoDataset(ESRI.ArcGIS.esriSystem.IName lName, IWorkspace inWorkspace, IFeatureDataset featureDataset)
        {
            try
            {
                //IFeatureClassDescription fcDesc = new FeatureClassDescriptionClass();
                //IObjectClassDescription ocDesc = (IObjectClassDescription)fcDesc;
                //Open input Featureclass to get field definitions.            
                IFeatureClass inFeatureClass = (IFeatureClass)lName.Open();
                IFeatureClassName inFeatureClassName = (IFeatureClassName)lName;
                // Set out dataset and feature class names.
                IFeatureClassName outFeatureClassName = new FeatureClassNameClass();
                IDatasetName outDatasetName = (IDatasetName)outFeatureClassName;
                IDataset outWorkspaceDataset = (IDataset)featureDataset.Workspace;
                IWorkspaceName outWorkspaceName = (IWorkspaceName)outWorkspaceDataset.FullName;
                outDatasetName.WorkspaceName = outWorkspaceName;
                outDatasetName.Name = "SDE." + ((IDatasetName)lName).Name;
                //Validate the field names.
                IFieldChecker fieldChecker = new FieldCheckerClass();
                IFields outFeatureClassFields;
                IFields inFeatureClassFields = inFeatureClass.Fields;
                IEnumFieldError enumFieldError;
                fieldChecker.InputWorkspace = inWorkspace;
                fieldChecker.ValidateWorkspace = featureDataset.Workspace;

                // Validate the fields.
                fieldChecker.Validate(inFeatureClassFields, out enumFieldError, out outFeatureClassFields);
                //featureDataset.CreateFeatureClass("SDE." + ((IDatasetName)lName).Name,outFeatureClassFields,ocDesc.InstanceCLSID,ocDesc.ClassExtensionCLSID,esriFeatureType.esriFTSimple,fcDesc.ShapeFieldName,"");
                // Set up the geometry definition.
                IField geometryField;
                geometryField = outFeatureClassFields.get_Field(outFeatureClassFields.FindField(inFeatureClass.ShapeFieldName));
                // Get the geometry field's geometry definition.
                IGeometryDef geometryDef = geometryField.GeometryDef;
                //Set up the IQueryFilter to convert all the features by leaving a blank WhereClause
                IQueryFilter qf = new QueryFilterClass();
                qf.WhereClause = "";
                //Load the feature class
                IFeatureDataConverter fctofc = new FeatureDataConverterClass();
                IEnumInvalidObject enumErrors = fctofc.ConvertFeatureClass(inFeatureClassName, qf, (IFeatureDatasetName)featureDataset.FullName, outFeatureClassName, geometryDef, outFeatureClassFields, "", 1000, 0);

                return true;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return false;
            }

        } 
        #endregion

    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值