1、Arcengine调用GP服务,抛出异常方法
object sev = null; try { Application.DoEvents(); gp.Execute(gpBuildPyramidsandStatistics, null); Application.DoEvents(); Console.WriteLine(gp.GetMessages(ref sev)); } catch (Exception ex) { // Print geoprocessing execution error messages. MessageBox.Show(gp.GetMessages(ref sev)); } //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;
2、日志生成类
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Windows.Forms; namespace Geoway.IDB.FileCheck.Utility { //////目的:日志操作类 ///创建人:jwh ///创建日期:2016/7/11 ///修改描述: ///修改人: ///修改日期: ///备注: /// public class LogExport { private static object _lockerForLog = new object(); public static string LOGPATH = Application.StartupPath + "\\log\\checklog";//日志文件夹 /// /// 记录日志 /// /// /// 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 = new StreamWriter(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 { } } } }
3、获取数据库中的镶嵌数据集
////// 获取界面上选择的镶嵌数据集 /// /// public IMosaicDataset GetMosaicDataset() { try { _selMosicName = cmbMosicData.SelectedItem.ToString(); IPropertySet propertySet = new PropertySetClass(); 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 = new SdeWorkspaceFactoryClass(); IWorkspace pWorkspace = workspaceFactory2.Open(propertySet, 0); IMosaicDataset pMosicDataset = null; IMosaicWorkspaceExtensionHelper pMosaicWsExHelper = new MosaicWorkspaceExtensionHelperClass(); IMosaicWorkspaceExtension pMosaicWsExt = pMosaicWsExHelper.FindExtension(pWorkspace); if (pMosaicWsExt != null) { try { pMosicDataset = pMosaicWsExt.OpenMosaicDataset(_selMosicName); } catch (Exception ex) { return pMosicDataset; } } return pMosicDataset; } catch (Exception ex) { return null; } }
4、跨线程调用控件的属性和方法
//定义两个委托 delegate void SetTextValueCallback(Control oControl, string propName, object propValue); delegate void SetUCLogValueHandler(string log, EnumLogType enumLogType); ////// 设置控件参数 /// /// 控件 /// 参数名称 /// 参数值 private void SetTextPropertyValue(Control oControl, string propName, object propValue) { if (oControl.InvokeRequired) { SetTextValueCallback d = new SetTextValueCallback(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 in props) { if (p.Name.ToUpper() == propName.ToUpper()) { p.SetValue(oControl, propValue, null); } } } } /// /// 设置UCLog控件输出 /// /// /// private void SetUClogValue(string log, EnumLogType enumLogType) { if (_ucLog.InvokeRequired == true) { SetUCLogValueHandler set = new SetUCLogValueHandler(_ucLog.AddMsg);//委托的方法参数应和SetCalResult一致 _ucLog.Invoke(set, new object[] { log, enumLogType }); //此方法第二参数用于传入方法,代替形参result } } //实例化 SetTextValueCallback setControlvalue = new SetTextValueCallback(SetTextPropertyValue); SetUCLogValueHandler setUClogValue = new SetUCLogValueHandler(SetUClogValue); //调用 setControlvalue(_progresslabal, "Text", "正在创建金字塔... ..."); setUClogValue(_selMosicName + "数据BuildPyramids处理成功." + log, EnumLogType.SuccessAudit);
5、创建XML文件
public static void CreateXmlFile(string xmlPath, string rootName) { XmlDocument xmlDoc = new XmlDocument(); //创建类型声明节点 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) { } } ////// 创建节点 /// /// xml文档 /// 父节点 /// 节点名 /// 节点值 /// public static void CreateNode(XmlDocument xmlDoc, XmlNode parentNode, string name, string value) { XmlNode node = xmlDoc.CreateNode(XmlNodeType.Element, name, null); node.InnerText = value; parentNode.AppendChild(node); }
6、我们在执行控制台应用程序或者其他程序时,有时候加了断点也无法调试,一个可能是我们设置了新的项目生成配置,而该配置默认的不生成.pdb文件,导致无法调试,解决方案是在“生成”页面的“高级”里把输出——>调试信息改成full。
7、查询用户job的运行状态
select job,what,failures,broken from user_jobs
8、arcengine删除表
////// 从工作空间中删除指定表 /// /// /// /// public static bool DeleteTable(IWorkspace pWorkspace,String tableName) { try { IFeatureWorkspace pFeatureworkspace = pWorkspace as IFeatureWorkspace; IFeatureClass pFeatureClass = pFeatureworkspace.OpenFeatureClass(tableName);//存在删除 if (pFeatureClass != null) { IDataset pDataset = pFeatureClass as IDataset; if (pDataset.CanDelete()) { pDataset.Delete(); return true;//删除成功 } } } catch { } return false;//删除失败 }
9、C#向Oracle的Blob字段插入值(引用自网络)
(1)先插入其它字段,BLOB字段初始化的时候,先初始化一个EMPTY_BLOB(),相当于一个BLOB对象的空壳,内部啥也没有,但是是一个对象。
(2)SELECT
(3)如果在程序中就直接得到一个BLOB对象的引用(相当于指针),如果过程中,上述修改为SELECT INTO到一个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 = new OracleConnection(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(); }
10、Dev Treelist使用方法
右击节点信息
TreeListHitInfo hInfo = treeList1.CalcHitInfo(new Point(e.X, e.Y)); TreeListNode node = hInfo.Node; treeList1.FocusedNode = node;
代码初始化Treelist
DataTable dt = new DataTable(); 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;
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
11、DEV XtraForm 皮肤设置
在启动的main函数里加上: BonusSkins.Register(); AppearanceObject.DefaultFont = new Font("微软雅黑", 9); UserLookAndFeel.Default.SetSkinStyle("标准风格"); SkinManager.EnableFormSkins(); 引用:using DevExpress.LookAndFeel; using DevExpress.Skins; using DevExpress.UserSkins; using DevExpress.Utils; using System.Drawing;
12、两个类之间实时传值(利用委托)
假设FormA窗体中有一个数据处理的ProcessBar需要实时更新状态,但是FormA中的数据处理方法在ClassA,这样,我们就行要根据ClassA中方法执行的状态, 实时给FormA中的ProcessBar传值; 在ClassA中定义如下: //委托 public delegate void ExecutingEeventHandler(int nodeIndex,int nodeCount); ////// 传递processbar序号 /// public event ExecutingEeventHandler Executing; //事件触发函数 private void OnExcuting(int index, int nodeCount) { if (Executing != null) { Executing(index, nodeCount); } } 在ClassA的执行方法中加入事件触发函数:OnExcuting(index, catalogNodeLists.Count); 在FormA中把ProcessBar状态更新的函数注册到ExecutingEeventHandler中; classA.Executing += new ClassA.ExecutingEeventHandler(expOper_Executing); void expOper_Executing(int nodeIndex, int nodeCount) { _Processbar.SetProgress(nodeIndex, nodeCount); }
13、dev treelist 只允许同级拖拽,不变成子目录设置
private void treeList1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e) { TreeListNode dragNode, targetNode; TreeList tl = sender as TreeList; Point p = tl.PointToClient(new Point(e.X, e.Y)); dragNode = e.Data.GetData(typeof(TreeListNode)) as TreeListNode; targetNode = tl.CalcHitInfo(p).Node; tl.SetNodeIndex(dragNode, tl.GetNodeIndex(targetNode)); e.Effect = DragDropEffects.None; }
14、GridView 列对齐
col.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
15、设置TableLayoutPanel等宽高(http://blog.csdn.net/langyuewu/article/details/38865423#),最好在代码中初始化TableLayoutPanel
private void InitLayoutDemo() { TableLayoutPanel demoLayoutPanel = new TableLayoutPanel(); 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 = new Button(); btn.Text = string.Format("({0},{1})", i, j); btn.Dock = DockStyle.Fill; demoLayoutPanel.Controls.Add(btn); demoLayoutPanel.SetRow(btn, i); demoLayoutPanel.SetColumn(btn, j); } } } ////// 动态布局 /// /// 布局面板 /// 行 /// 列 private void DynamicLayout(TableLayoutPanel layoutPanel, int row, int col) { layoutPanel.RowCount = row; //设置分成几行 for (int i = 0; i < row; i++) { layoutPanel.RowStyles.Add(new RowStyle(SizeType.Percent, 100F)); } layoutPanel.ColumnCount = col; //设置分成几列 for (int i = 0; i < col; i++) { layoutPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F)); } }
15、XML操作
1 最常见的XML数据类型有:Element, Attribute,Comment, Text. 2 3 Element, 指形如Tom 的节点。它可以包括:Element, Text, Comment, ProcessingInstruction, CDATA, and EntityReference. 4 5 Attribute, 指在 中的粗体部分。 6 7 Comment,指形如: 的节点。 8 9 Text,指在 154 155Tom 的粗体部分。 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 is Nothing) 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 134 135 136 137 138 139 Cai WuBu 140 141Zhang Bin 142 143144 145 146 147 12345 148 149Zhang Bin 150 151male 152 153156 157 10101 158 159Zhang QI 160 161female 162 163 164 165166 167 10102 168 169Zhang Xia 170 171male 172 173 174 175176 177 10201 178 179ZhangChuang 180 181male 182 183 184 185186 187 10202 188 189Zhang Jun 190 191male 192 193 194 195 196 197 198 199200 201 KaiFa Bu 202 203Wang Bin 204 205206 207 208 209 22345 210 211Wang Bin 212 213male 214 215 216 217218 219 20101 220 221Wang QI 222 223female 224 225 226 227228 229 20102 230 231Wang Xia 232 233male 234 235 236 237238 239 20201 240 241Wang Chuang 242 243male 244 245 246 247248 249 20201 250 251Wang Jun 252 253male 254 255 256 257 258 259 260 261
16、shp图层属性表读写效率
http://blog.csdn.net/freewaywalker/article/details/23703863