C# + ArcEngine 常用方法(不定时更新)

摘要:
1、Arcengine调用GP服务,抛出异常方法objectsev=null;try{Application.DoEvents();gp.Execute(gpBuildPyramidsandStatistics,null);Application.DoEvents();Console.WriteLine(gp.GetMessages(refsev));}catch(Exceptionex){//P

1、Arcengine调用GP服务,抛出异常方法

        
                   object sev = null;
                    try{
                        Application.DoEvents();
                        gp.Execute(gpBuildPyramidsandStatistics, null);
                        Application.DoEvents();
                        Console.WriteLine(gp.GetMessages(refsev));
                    }
                    catch(Exception ex)
                    {
                        //Print geoprocessing execution error messages.
                        MessageBox.Show(gp.GetMessages(refsev));
                    }

    //ps:调用GP服务处理数据库中的数据,必须添加gp的环境变量workspace.http://www.ithao123.cn/content-7464230.html
    //Geoprocessor GP = new Geoprocessor(); 

    //string sWorkPath;   

    //IWorkspace pWork;   
    //if(pWork.Type == esriWorkspaceType.esriRemoteDatabaseWorkspace)
    //{  

          //sWorkPath = System.IO.Path.Combine(Application.StartupPath,"gpenvwk.sde");   
          //pWork.WorkspaceFactory.Create(Application.StartupPath,"gpenvwk.sde",pWork.ConnectionProperties,0);   
    //}
    //else
    //{ 
          //sWorkPath = pWork.PathName;   
    //}   
    //GP.SetEnvironmentValue("workspace",sWorkPath);   
    //GP.OverwriteOutput = true; 
        
View Code

2、日志生成类

usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.IO;
usingSystem.Windows.Forms;

namespaceGeoway.IDB.FileCheck.Utility
{
    ///<summary>
    ///目的:日志操作类
    ///创建人:jwh
    ///创建日期:2016/7/11
    ///修改描述:
    ///修改人:
    ///修改日期:
    ///备注:
    ///</summary>
    public classLogExport
    {
        private static object _lockerForLog = new object();
        public static string LOGPATH = Application.StartupPath + "\log\checklog";//日志文件夹

        /// <summary>
        ///记录日志
        /// </summary>
        /// <param name="content"></param>
        /// <param name="logPath"></param>
        public static void SaveLog(string content, string logPath = "")
        {
            try{
                if (string.IsNullOrEmpty(logPath))
                {
                    logPath =LOGPATH;
                }

                lock(_lockerForLog)
                {
                    FileStream fs;
                    if (!Directory.Exists(logPath))
                    {
                        Directory.CreateDirectory(logPath);
                    }
                    fs = new FileStream(Path.Combine(logPath, DateTime.Now.ToString("yyyyMMdd") + ".log"), FileMode.OpenOrCreate);
                    StreamWriter streamWriter = newStreamWriter(fs);
                    streamWriter.BaseStream.Seek(0, SeekOrigin.End);
                    streamWriter.WriteLine(DateTime.Now.ToString("yyyy-MM-dd-HH:mm:ss") + " " +content);
                    streamWriter.Flush();
                    streamWriter.Close();
                    fs.Close();
                }
            }
            catch{
            }
        }
    }
}
View Code

3、获取数据库中的镶嵌数据集

/// <summary>
        ///获取界面上选择的镶嵌数据集
        /// </summary>
        /// <returns></returns>
        publicIMosaicDataset GetMosaicDataset()
        {
            try{
                _selMosicName =cmbMosicData.SelectedItem.ToString();           
                
                IPropertySet propertySet = newPropertySetClass();
                propertySet.SetProperty("SERVER", "");
                propertySet.SetProperty("INSTANCE", "sde:oracle11g:XXX.XXX.XXX/db11g");
                propertySet.SetProperty("USER", "XXX");

                propertySet.SetProperty("PASSWORD", "XXX");
                propertySet.SetProperty("DATABASE", "");
                propertySet.SetProperty("VERSION", "");
                IWorkspaceFactory2 workspaceFactory2 = newSdeWorkspaceFactoryClass();
                IWorkspace pWorkspace = workspaceFactory2.Open(propertySet, 0);
              
                IMosaicDataset pMosicDataset = null;
                IMosaicWorkspaceExtensionHelper pMosaicWsExHelper = newMosaicWorkspaceExtensionHelperClass();
                IMosaicWorkspaceExtension pMosaicWsExt =pMosaicWsExHelper.FindExtension(pWorkspace);
                if (pMosaicWsExt != null)
                {
                    try{
                        pMosicDataset =pMosaicWsExt.OpenMosaicDataset(_selMosicName);
                    }
                    catch(Exception ex)
                    {
                        returnpMosicDataset;
                    }
                }
                returnpMosicDataset;
            }
            catch(Exception ex)
            {                
                return null;
            }
        }
View Code

4、跨线程调用控件的属性和方法

//定义两个委托
        delegate void SetTextValueCallback(Control oControl, string propName, objectpropValue);
        delegate void SetUCLogValueHandler(stringlog, EnumLogType enumLogType);     
        
        
        
        /// <summary>
        ///设置控件参数
        /// </summary>
        /// <param name="oControl">控件</param>
        /// <param name="propName">参数名称</param>
        /// <param name="propValue">参数值</param>
        private void SetTextPropertyValue(Control oControl, string propName, objectpropValue)
        {
            if(oControl.InvokeRequired)
            {
                SetTextValueCallback d = newSetTextValueCallback(SetTextPropertyValue);
                oControl.Invoke(d, new object[] { oControl, propName, propValue });
            }
            else{
                Type t =oControl.GetType();
                System.Reflection.PropertyInfo[] props =t.GetProperties();
                foreach (System.Reflection.PropertyInfo p inprops)
                {
                    if (p.Name.ToUpper() ==propName.ToUpper())
                    {
                        p.SetValue(oControl, propValue, null);
                    }
                }
            }
        }

        /// <summary>
        ///设置UCLog控件输出
        /// </summary>
        /// <param name="log"></param>
        /// <param name="enumLogType"></param>
        private void SetUClogValue(stringlog, EnumLogType enumLogType)
        {
            if (_ucLog.InvokeRequired == true)
            {
                SetUCLogValueHandler set = new SetUCLogValueHandler(_ucLog.AddMsg);//委托的方法参数应和SetCalResult一致
                _ucLog.Invoke(set, new object[] { log, enumLogType }); //此方法第二参数用于传入方法,代替形参result
}

        }
        
        //实例化
         SetTextValueCallback setControlvalue = newSetTextValueCallback(SetTextPropertyValue);         
         SetUCLogValueHandler setUClogValue = newSetUCLogValueHandler(SetUClogValue);
         //调用
         setControlvalue(_progresslabal, "Text", "正在创建金字塔... ...");
         setUClogValue(_selMosicName + "数据BuildPyramids处理成功." +log, EnumLogType.SuccessAudit);
        
View Code

5、创建XML文件

 public static void CreateXmlFile(string xmlPath, stringrootName)
        {
            XmlDocument xmlDoc = newXmlDocument();
            //创建类型声明节点  
            XmlNode node = xmlDoc.CreateXmlDeclaration("1.0", "GB2312", "");
            xmlDoc.AppendChild(node);
            //创建根节点  
            XmlNode root =xmlDoc.CreateElement(rootName);
            xmlDoc.AppendChild(root);
            
            CreateNode(xmlDoc, root, "NodeName", "value");
           
            try{
                xmlDoc.Save(xmlPath);
            }
            catch(Exception ex)
            {
            }
        }

        /// <summary>    
        ///创建节点    
        /// </summary>    
        /// <param name="xmldoc"></param>xml文档  
        /// <param name="parentnode"></param>父节点    
        /// <param name="name"></param>节点名  
        /// <param name="value"></param>节点值  
        ///   
        public static void CreateNode(XmlDocument xmlDoc, XmlNode parentNode, string name, stringvalue)
        {
            XmlNode node = xmlDoc.CreateNode(XmlNodeType.Element, name, null);
            node.InnerText =value;
            parentNode.AppendChild(node);
        }
View Code

6、我们在执行控制台应用程序或者其他程序时,有时候加了断点也无法调试,一个可能是我们设置了新的项目生成配置,而该配置默认的不生成.pdb文件,导致无法调试,解决方案是在“生成”页面的“高级”里把输出——>调试信息改成full。

7、查询用户job的运行状态

select job,what,failures,broken from user_jobs

8、arcengine删除表

        /// <summary>
        ///从工作空间中删除指定表
        /// </summary>
        /// <param name="pWorkSpace"></param>
        /// <param name="tableName"></param>
        /// <returns></returns>
        public static boolDeleteTable(IWorkspace pWorkspace,String tableName)
        {
            try{
                IFeatureWorkspace pFeatureworkspace = pWorkspace asIFeatureWorkspace;
                IFeatureClass pFeatureClass = pFeatureworkspace.OpenFeatureClass(tableName);//存在删除
                if (pFeatureClass != null)
                {
                    IDataset pDataset = pFeatureClass asIDataset;
                    if(pDataset.CanDelete())
                    {
                        pDataset.Delete();
                        return true;//删除成功
}
                }
            }
            catch
            { }
            return false;//删除失败 
        }
View Code

9、C#向Oracle的Blob字段插入值(引用自网络)

(1)先插入其它字段,BLOB字段初始化的时候,先初始化一个EMPTY_BLOB(),相当于一个BLOB对象的空壳,内部啥也没有,但是是一个对象。
(2)SELECT<BLOB字段>FROM<表名称>WHERE<关键字>=<插入关键值>FORUPDATE;--FORUPDATE是必须的。
(3)如果在程序中就直接得到一个BLOB对象的引用(相当于指针),如果过程中,上述修改为SELECTINTO到一个BLOB类型的变量中,其实也是BLOB对象的指针,然后对这个BLOB进行编辑,过程中对其进行编辑使用DBMS_LOB包来完成编辑工作,程序中将前端提交的内容(可能是图片或者上传文件直接可以转为byte[]数组、可能是文本字符串需要根据相应字符集转义为byte[]数组),通过java.sql.Blob接口对应的驱动实现类内部的setBytes(....)方法来完成写入。

(4)不论是程序还是过程,使用UPDATE<表名称>WHERE<关键字>=<插入关键值>;COMMIT;即可完成编辑过程。

static void Main(string[] args)
{
    int nSize = 50000;
    byte[] bArray = new byte[nSize];
    for (int i = 0; i < nSize; i++)
    {
        bArray[i] = 68;
    }

    /** 须使用OracleClient命名空间
     * 须安装支持OLEDB 的ORACLE 客户端
     */
    string sConn = "Data Source=192.168.0.5;User ID=hpbjjy;Unicode=True;Password=hpbjjy";
    OracleConnection conn = newOracleConnection(sConn);
    OracleTransaction tra = null;
    try{
        conn.Open();
        Console.WriteLine("打开成功!");
        OracleCommand com =conn.CreateCommand();
        tra =conn.BeginTransaction();
        com.Transaction =tra;

        /** 先使用查询获得该BLOB字段的对象
         * 同时使用for update 锁定该字段,否则无法修改
         */
        string SQL = "select tag2 from sysconf where name='HotelName' for update";   //tag2字段类型为BLOB
        com.CommandText =SQL;
        OracleDataReader reader =com.ExecuteReader();
        OracleLob lob =OracleLob.Null;
        reader.Read();
        lob = reader.GetOracleLob(0);               //获取BLOB对象
lob.Write(bArray, 0, bArray.Length);        //将数据写入该对象
        SQL = "update sysconf set tag2=:t where name='HotelName'";
        com.CommandText =SQL;
        com.Parameters.Add("t", OracleType.Blob).Value =lob;
        com.ExecuteNonQuery();

        tra.Commit();
        Console.WriteLine("成功完成!");
    }
    catch(Exception ex)
    {
        Console.WriteLine(ex.Message);
        if (tra != null)
            tra.Rollback();
    }

    if (conn.State ==ConnectionState.Open)
        conn.Close();
    Console.Read();
}
View Code

10、Dev Treelist使用方法

右击节点信息

                TreeListHitInfo hInfo = treeList1.CalcHitInfo(newPoint(e.X, e.Y));
                TreeListNode node =hInfo.Node;
                treeList1.FocusedNode = node;
View Code

代码初始化Treelist

DataTable dt = newDataTable();
            DataColumn dcOID = new DataColumn("KeyFieldName", Type.GetType("System.Int32"));
            DataColumn dcParentOID = new DataColumn("ParentFieldName", Type.GetType("System.Int32"));
            DataColumn dcNodeName = new DataColumn("NodeName", Type.GetType("System.String"));
            DataColumn dcNodeCode = new DataColumn("NodeCode", Type.GetType("System.String"));

            dt.Columns.Add(dcOID);
            dt.Columns.Add(dcParentOID);
            dt.Columns.Add(dcNodeName);
            dt.Columns.Add(dcNodeCode);

            DataRow dr1 =dt.NewRow();
            dr1["KeyFieldName"] = 1;
            dr1["ParentFieldName"] = 0;
            dr1["NodeName"] = "第三次农业普查";
            dr1["NodeCode"] = "根节点编码";
            dt.Rows.Add(dr1);

            DataRow dr2 =dt.NewRow();
            dr2["KeyFieldName"] = 2;
            dr2["ParentFieldName"] = 1;
            dr2["NodeName"] = "农作物总播种面积";
            dr2["NodeCode"] = "节点子节点编码2";
            dt.Rows.Add(dr2);

            DataRow dr3 =dt.NewRow();
            dr3["KeyFieldName"] = 3;
            dr3["ParentFieldName"] = 1;
            dr3["NodeName"] = "主要农作物播种面积";
            dr3["NodeCode"] = "节点子节点编码3";
            dt.Rows.Add(dr3);

            
            treeList_SNP.BeginUnboundLoad();
            treeList_SNP.KeyFieldName = "KeyFieldName";
            treeList_SNP.ParentFieldName = "ParentFieldName";
            treeList_SNP.DataSource =dt;
            treeList_SNP.EndUnboundLoad();
            treeList_SNP.ExpandAll();
            TreeList_SNP =treeList_SNP;
            treeList_SNP.Nodes.FirstNode.Nodes[0].Checked = true;
View Code
http://blog.163.com/china__xuhua/blog/static/199723169201203111653783/

http://www.dxper.net/thread-62-1-1.html

http://www.jb51.net/article/53337.htm
View Code

11、DEV XtraForm 皮肤设置

在启动的main函数里加上:

            BonusSkins.Register();
            AppearanceObject.DefaultFont = new Font("微软雅黑", 9);
            UserLookAndFeel.Default.SetSkinStyle("标准风格");
            SkinManager.EnableFormSkins();

   引用:usingDevExpress.LookAndFeel;
            usingDevExpress.Skins;
           usingDevExpress.UserSkins;
           usingDevExpress.Utils;
           using System.Drawing;
View Code

12、两个类之间实时传值(利用委托)

假设FormA窗体中有一个数据处理的ProcessBar需要实时更新状态,但是FormA中的数据处理方法在ClassA,这样,我们就行要根据ClassA中方法执行的状态,
实时给FormA中的ProcessBar传值;

在ClassA中定义如下:

        //委托
        public delegate void ExecutingEeventHandler(int nodeIndex,intnodeCount);

        /// <summary>
        ///传递processbar序号
        /// </summary>
        public eventExecutingEeventHandler Executing;
        
        //事件触发函数
        private void OnExcuting(int index, intnodeCount)
        {
            if (Executing != null)
            {
                Executing(index, nodeCount);
            }
        }
        
        在ClassA的执行方法中加入事件触发函数:OnExcuting(index, catalogNodeLists.Count);
        
在FormA中把ProcessBar状态更新的函数注册到ExecutingEeventHandler中;
       classA.Executing += newClassA.ExecutingEeventHandler(expOper_Executing);
       void expOper_Executing(int nodeIndex, intnodeCount)
        {
            _Processbar.SetProgress(nodeIndex, nodeCount);
        }
        
View Code

13、dev treelist 只允许同级拖拽,不变成子目录设置

private void treeList1_DragDrop(objectsender, System.Windows.Forms.DragEventArgs e)
 {
    TreeListNode dragNode, targetNode;
    TreeList tl = sender asTreeList;
    Point p = tl.PointToClient(newPoint(e.X, e.Y));
    dragNode = e.Data.GetData(typeof(TreeListNode)) asTreeListNode;
    targetNode =tl.CalcHitInfo(p).Node;
    tl.SetNodeIndex(dragNode, tl.GetNodeIndex(targetNode));
    e.Effect =DragDropEffects.None;
}
View Code

14、GridView 列对齐

col.AppearanceCell.TextOptions.HAlignment=DevExpress.Utils.HorzAlignment.Center;

15、设置TableLayoutPanel等宽高(http://blog.csdn.net/langyuewu/article/details/38865423#),最好在代码中初始化TableLayoutPanel

private voidInitLayoutDemo()  
        {  
            TableLayoutPanel demoLayoutPanel = newTableLayoutPanel();  
            demoLayoutPanel.Dock =DockStyle.Fill;  
            this.Controls.Add(demoLayoutPanel);  
            int row = 3, col = 3;  
            DynamicLayout(demoLayoutPanel, row, col);  
            for (int i = 0; i < row; i++)  
            {  
                for (int j = 0; j < col; j++)  
                {  
                    Button btn = newButton();  
                    btn.Text = string.Format("({0},{1})", i, j);  
                    btn.Dock =DockStyle.Fill;  
                    demoLayoutPanel.Controls.Add(btn);  
                    demoLayoutPanel.SetRow(btn, i);  
                    demoLayoutPanel.SetColumn(btn, j);  
                }  
            }  
        }  
  
        /// <summary>  
        ///动态布局  
        /// </summary>  
        /// <param name="layoutPanel">布局面板</param>  
        /// <param name="row"></param>  
        /// <param name="col"></param>  
        private void DynamicLayout(TableLayoutPanel layoutPanel, int row, intcol)  
        {  
            layoutPanel.RowCount = row;    //设置分成几行  
            for (int i = 0; i < row; i++)  
            {  
                layoutPanel.RowStyles.Add(newRowStyle(SizeType.Percent, 100F));  
            }  
            layoutPanel.ColumnCount = col;    //设置分成几列  
            for (int i = 0; i < col; i++)  
            {  
                layoutPanel.ColumnStyles.Add(newColumnStyle(SizeType.Percent, 100F));  
            }  
        }  
View Code

15、XML操作

1 最常见的XML数据类型有:Element, Attribute,Comment, Text.
2 
3    Element, 指形如<Name>Tom<Name>的节点。它可以包括:Element, Text, Comment, ProcessingInstruction, CDATA, and EntityReference.
4 
5    Attribute, 指在<Employee >中的粗体部分。
6 
7    Comment,指形如:<!-- my comment -->的节点。
8 
9    Text,指在<Name>Tom<Name>的粗体部分。
10 
11 在XML中,可以用XmlNode对象来参照各种XML数据类型。
12 
13    2.1查询已知绝对路径的节点(集)
14 
15    objNodeList = objDoc.SelectNodes(“Company/Department/Employees/Employee”)
16 
17 或者
18 
19    objNodeList = objNode.SelectNodes(“/Company/Department/Employees/Employee”)
20 
21 以上两种方法可返回一个NodeList对象,如果要返回单个节点可使用SelectSingleNode方法,该方法如果查询到一个或多个节点,返回第一个节点;如果没有查询的任何节点返回 Nothing。例如:
22 
23    objNode = objNode.SelectSingleNode(“/Company/Department/Employees/Employee”)
24 
25    If Not (objNode isNothing) then
26 
27    ‘-Do process
28 
29 End If
30 
31    2.2查询已知相对路径的节点(集)
32 
33 可使用类似于文件路径的相对路径的方式来查询XML的数据
34 
35    objNode = objDoc.SelectSingleNode(“Company/Department”)
36 
37    objNodeList = objNode.SelectNodes(“../Department)
38 
39    objNode = objNode.SelectNode(“Employees/Employee”)
40 
41    2.3查询已知元素名的节点(集)
42 
43   在使用不规则的层次文档时,由于不知道中间层次的元素名,可使用//符号来越过中间的节点,查询其子,孙或多层次下的其他所有元素。例如:
44 
45    objNodeList = objDoc.SelectNodes(“Company//Employee”)
46 
47    2.4查询属性(attribute)节点
48 
49 以上的各种方法都返回元素(element)节点(集),返回属性(attribute),只需要采用相应的方法,在属性名前加一个@符号即可,例如:
50 
51    objNodeList = objDoc.SelectNodes(“Company/Department/Employees/Employee/@id”)
52 
53    objNodeList = objDoc.SelectNodes(“Company//@id”)
54 
55    2.5查询Text节点
56 
57 使用text()来获取Text节点。
58 
59    objNode = objDoc.SelectSingleNode(“Company/Department/Deparmt_Name/text()”)
60 
61    2.6查询特定条件的节点
62 
63 使用[]符号来查询特定条件的节点。例如:
64 
65 a. 返回id号为 10102的Employee节点
66 
67    objNode = objDoc.SelectSingleNode(“Company/Department/Employees/Employee[@id=’10102’]”)
68 
69 b. 返回Name为Zhang Qi的Name 节点
70 
71    objNode = objDoc.SelectSingleNode(“Company/Department/Employees/Employee/Name[text()=’Zhang Qi’]”)
72 
73 c. 返回部门含有职员22345的部门名称节点
74 
75    objNode = objDoc.SelectSingleNode("Company/Department[Employees/Employee/@id='22345']/Department_Name")
76 
77    2.7查询多重模式的节点
78 
79   使用 |符号可以获得多重模式的节点。例如:
80 
81    objNodeList = objDoc.SelectNodes(“Company/Department/Department_Name | Company/Department/Manager”)
82 
83    2.8查询任意子节点
84 
85   使用*符号可以返回当前节点的所有子节点。
86 
87    objNodeList = objDoc.SelectNodes(“Company/*/Manager)
88 
89 或者
90 
91 objNodeList = objNode.ChildNodes
92 
93   
94 
95 3 XML数据的编辑
96 
97 3.1 增加一个元素的属性(attribute)节点
98 
99 Dim objNodeAttr As XmlNode
100 
101 objNodeAttr = objDoc.CreateAttribute("id", Nothing)
102 
103 objNodeAttr.InnerXml = "101"
104 
105 objNode.Attributes.Append(objNodeAttr)
106 
107 3.2 删除一个元素的属性
108 
109 objNode.Attributes.Remove(objNodeAttr)
110 
111 3.3 增加一个子元素(Element)
112 
113 Dim objNodeChild As XmlNode
114 
115 objNodeChild = objDoc.CreateElement(Nothing, "ID", Nothing)
116 
117 objNodeChild.InnerXml = "101"
118 
119 objNode.AppendChild(objNodeChild)
120 
121 3.4 删除一个子元素
122 
123 objNode.RemoveChild(objNodeChild)
124 
125 3.5 替换一个子元素
126 
127 objNOde.ReplaceChild(newChild,oldChild)
128 
129   
130 
131 4 参考数据
132 
133 <?xml version="1.0" encoding="UTF-8"?>
134 
135 <Company>
136 
137 <Department >
138 
139 <Department_Name>Cai WuBu</Department_Name>
140 
141 <Manager>Zhang Bin</Manager>
142 
143 <Employees>
144 
145 <Employee >
146 
147 <Employee_ID>12345</Employee_ID>
148 
149 <Name>Zhang Bin</Name>
150 
151 <Gender>male</Gender>
152 
153 </Employee>
154 
155 <Employee >
156 
157 <Employee_ID>10101</Employee_ID>
158 
159 <Name>Zhang QI</Name>
160 
161 <Gender>female</Gender>
162 
163 </Employee>
164 
165 <Employee >
166 
167 <Employee_ID>10102</Employee_ID>
168 
169 <Name>Zhang Xia</Name>
170 
171 <Gender>male</Gender>
172 
173 </Employee>
174 
175 <Employee >
176 
177 <Employee_ID>10201</Employee_ID>
178 
179 <Name>ZhangChuang</Name>
180 
181 <Gender>male</Gender>
182 
183 </Employee>
184 
185 <Employee >
186 
187 <Employee_ID>10202</Employee_ID>
188 
189 <Name>Zhang Jun</Name>
190 
191 <Gender>male</Gender>
192 
193 </Employee>
194 
195 </Employees>
196 
197 </Department>
198 
199 <Department >
200 
201 <Department_Name>KaiFa Bu</Department_Name>
202 
203 <Manager>Wang Bin</Manager>
204 
205 <Employees>
206 
207 <Employee >
208 
209 <Employee_ID>22345</Employee_ID>
210 
211 <Name>Wang Bin</Name>
212 
213 <Gender>male</Gender>
214 
215 </Employee>
216 
217 <Employee >
218 
219 <Employee_ID>20101</Employee_ID>
220 
221 <Name>Wang QI</Name>
222 
223 <Gender>female</Gender>
224 
225 </Employee>
226 
227 <Employee >
228 
229 <Employee_ID>20102</Employee_ID>
230 
231 <Name>Wang Xia</Name>
232 
233 <Gender>male</Gender>
234 
235 </Employee>
236 
237 <Employee >
238 
239 <Employee_ID>20201</Employee_ID>
240 
241 <Name>Wang Chuang</Name>
242 
243 <Gender>male</Gender>
244 
245 </Employee>
246 
247 <Employee >
248 
249 <Employee_ID>20201</Employee_ID>
250 
251 <Name>Wang Jun</Name>
252 
253 <Gender>male</Gender>
254 
255 </Employee>
256 
257 </Employees>
258 
259 </Department>
260 
261 </Company>
View Code

16、shp图层属性表读写效率

http://blog.csdn.net/freewaywalker/article/details/23703863

免责声明:文章转载自《C# + ArcEngine 常用方法(不定时更新)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Java跨域解决WebView JS与RN进行通讯下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

字符串包括

字符串包括 题目:如果这有一个各种字母组成的字符串A,和另外一个字符串B,字符串里B的字母数相对少一些。什么方法能最快的查出全部小字符串B 里的字母在大字符串A里都有? <<<<<<<<<<<<<<<<<<<<<<&l...

Delphi7中 string, AnsiString, Utf8String,WideString的区别分析(转)

Windows系统上的 Notepad.exe 打开文件后,点击“文件”菜单中的“另存为”命令,会跳出一个对话框,在最底部有一个“编码”的下拉条。里面有四个选项:ANSI,Unicode,Unicode big endian 和 UTF-8。1)ANSI是默认的编码方式。对于英文文件是ASCII编码,对于简体中文文件是GB2312编码(只针对Windows...

JAVA-产生唯一32位GUID

import java.net.*; import java.util.*; import java.security.*; import org.apache.log4j.Logger; /** * 產生唯一GUID */ public class RandomGUID extends Object { public String val...

Unity面试题汇总(第一部分)

一、什么是渲染管道? 答:就是告诉GPU一些数据,经过一系列的操作,得到最终要显示的数据。渲染管道中的很多步骤,总的来说是将几何物体从一个坐标系变换到另一个坐标系中去。 主要步骤如下: 本地坐标系 -- 经过世界变换矩阵 --> 世界坐标系 -- 经过视图变换矩阵 --> 视图坐标系 -- 经过投影变换矩阵 --> 投影坐标系 -- 经过...

Delphi Byte数组与Int String之间的相互转换

http://www.cnblogs.com/lcw/p/3352864.html string   string = AnsiString = 长字符串,理论上长度不受限制,但其实受限于最大寻址范围2的32次方=4G字节;   变量Str名字是一个指针,指向位于堆内存的字符序列,字符序列起始于@Str[1],@Str[1]偏移负16个字节的空间存储着字串...

Java中String的 "引用" 传递

1、来看一段有趣但又让人困惑的代码片段 public static voidmain(String[] args){ String x = new String("ab"); change(x); System.out.println(x); } public static void...