private bool OpenConnection(SdeConnection sdeConnection, IDataset dataset) { _errMsg = ""; if (sdeConnection.SeConnection.handle != IntPtr.Zero) { CloseConnection(sdeConnection); } string server = ConfigTextStream.ExtractValue(_connectionString, "server"); string instance = ConfigTextStream.ExtractValue(_connectionString, "instance"); string database = ConfigTextStream.ExtractValue(_connectionString, "database"); string username = ConfigTextStream.ExtractValue(_connectionString, "usr"); string password = ConfigTextStream.ExtractValue(_connectionString, "pwd"); string pooling = ConfigTextStream.ExtractValue(_connectionString, "pooling"); if (!String.IsNullOrWhiteSpace(pooling) && (pooling.ToLower() == "false" || pooling.ToLower() == "no")) { sdeConnection.Pooling = false; } else { sdeConnection.Pooling = true; } sdeConnection.Dataset = dataset; SE_ERROR error = new SE_ERROR(); try { System.Int32 errCode = Wrapper10.SE_connection_create( server, instance, database, username, password, ref error, ref sdeConnection.SeConnection); if (errCode != 0) { error.sde_error = errCode; _errMsg = errCode + " " + Wrapper10.GetErrorMsg(sdeConnection.SeConnection, error); return(false); } } catch (Exception ex) { _errMsg = "SDE ERROR: " + ex.Message; return(false); } return(true); }
private string FetchNString(System.Int16 index, int size) { try { byte[] buffer = new byte[(size + 1) * 2]; System.Int32 err_no = Wrapper10.SE_stream_get_nstring(_stream.SeStream, index, buffer); if (err_no == -1004) { return(String.Empty); //return null; } if (err_no != 0) { return("<ERROR>:" + Wrapper10.GetErrorMsg(_connection.SeConnection, err_no)); } return(System.Text.Encoding.Unicode.GetString(buffer).Replace("\0", "")); } catch (Exception ex) { return("<EXCEPTION>:" + ex.Message); } }
protected override SdeConnection OpenConnection(IDataset dataset) { _errMsg = ""; SdeConnection connection = new SdeConnection(dataset); string server = ConfigTextStream.ExtractValue(_connectionString, "server"); string instance = ConfigTextStream.ExtractValue(_connectionString, "instance"); string database = ConfigTextStream.ExtractValue(_connectionString, "database"); string username = ConfigTextStream.ExtractValue(_connectionString, "usr"); string password = ConfigTextStream.ExtractValue(_connectionString, "pwd"); SE_ERROR error = new SE_ERROR(); try { if (Wrapper10.SE_connection_create( server, instance, database, username, password, ref error, ref connection.SeConnection) != 0) { _errMsg = Wrapper10.GetErrorMsg(connection.SeConnection, error); return(null); } } catch (Exception ex) { _errMsg = "SDE ERROR: " + ex.Message; return(null); } return(connection); }
public SdeFeatureCursor(SdeDataset dataset, ITableClass tc, IQueryFilter filter) : base((tc is IFeatureClass) && ((IFeatureClass)tc).SpatialReference != null ? ((IFeatureClass)tc).SpatialReference : filter.ContextLayerDefaultSpatialReference, (filter != null) ? filter.FeatureSpatialReference : null) { try { if (filter != null && !filter.SubFields.Contains("*")) { filter.AddField(tc.IDFieldName, false); } filter.fieldPrefix = tc.Name + "."; filter.fieldPostfix = ""; if (filter is ISpatialFilter && (((ISpatialFilter)filter).SpatialRelation != spatialRelation.SpatialRelationMapEnvelopeIntersects)) { if (tc is IFeatureClass) { filter.AddField(((IFeatureClass)tc).ShapeFieldName); } _spatialFilter = (ISpatialFilter)filter; } Int32 err_no = 0; _dataset = dataset; if (_dataset == null) { return; } //_connection = _dataset.AllocConnection(); _connection = new ArcSdeConnection(dataset.ConnectionString); if (!_connection.Open(this._dataset)) { return; } _queryInfo = new SdeQueryInfo(_connection, tc, filter); if (_queryInfo.ErrorMessage != "") { Dispose(); return; } //if (Wrapper10.SE_stream_create(_connection.SeConnection, ref _stream) != 0) //{ // Dispose(); // return; //} //_connection.ResetStream(); _stream = _connection.CreateStream(); // SE_stream_set_state sollte auch aufgerufen werden (siehe mapsde.c von UMN) if (Wrapper10.SE_stream_set_state( _stream.SeStream, CONST.SE_DEFAULT_STATE_ID, CONST.SE_DEFAULT_STATE_ID, CONST.SE_STATE_DIFF_NOCHECK) != 0) { Dispose(); return; } if ((err_no = Wrapper10.SE_stream_query_with_info(_stream.SeStream, _queryInfo.SeQueryInfo)) != 0) { Dispose(); return; } if (_queryInfo.IsSpatial) { SE_FILTER se_filter = _queryInfo.Filter_Shape; if ((err_no = Wrapper10.SE_stream_set_spatial_constraints(_stream.SeStream, CONST.SE_SPATIAL_FIRST, false, 1, ref se_filter)) != 0) { _errMsg = Wrapper10.GetErrorMsg(_connection.SeConnection, err_no); Dispose(); return; } } else { /* * SE_FILTER se_filter = _queryInfo.Filter_Id; * if (Wrapper10.SE_stream_set_spatial_constraints(_stream, CONST.SE_SPATIAL_FIRST, false, 1, ref se_filter) != 0) * { * Release(); * return; * } * */ } if (Wrapper10.SE_stream_execute(_stream.SeStream) != 0) { Dispose(); return; } _queryFields = _queryInfo.QueryFields; _queryInfo.Dispose(); _queryInfo = null; } catch (Exception ex) { _errMsg = ex.Message + "\n" + ex.StackTrace; Dispose(); } }
public SdeQueryInfo(ArcSdeConnection connection, ITableClass tc, IQueryFilter filter) { if (tc == null) { return; } try { if (filter is ISpatialFilter && ((ISpatialFilter)filter).Geometry != null && tc is IFeatureClass && tc.Dataset is SdeDataset) { SE_ENVELOPE maxExtent = new SE_ENVELOPE(); SE_COORDREF coordRef = ((SdeDataset)tc.Dataset).GetSeCoordRef(connection, tc.Name, ((IFeatureClass)tc).ShapeFieldName, ref maxExtent); if (((SdeDataset)tc.Dataset).lastErrorMsg != "") { return; } _isSpatial = true; _err_no = Wrapper10.SE_shape_create(coordRef, ref _shape); ((SdeDataset)tc.Dataset).FreeSeCoordRef(coordRef); if (_err_no != 0) { return; } //IEnvelope env = ((ISpatialFilter)filter).Geometry.Envelope; //SE_ENVELOPE seEnvelope = new SE_ENVELOPE(); //seEnvelope.minx = Math.Max(env.minx, maxExtent.minx); //seEnvelope.miny = Math.Max(env.miny, maxExtent.miny); //seEnvelope.maxx = Math.Min(env.maxx, maxExtent.maxx); //seEnvelope.maxy = Math.Min(env.maxy, maxExtent.maxy); //if (seEnvelope.minx == seEnvelope.maxx && seEnvelope.miny == seEnvelope.maxy) //{ // /* fudge a rectangle so we have a valid one for generate_rectangle */ // /* FIXME: use the real shape for the query and set the filter_type // to be an appropriate type */ // seEnvelope.minx = seEnvelope.minx - 0.001; // seEnvelope.maxx = seEnvelope.maxx + 0.001; // seEnvelope.miny = seEnvelope.miny - 0.001; // seEnvelope.maxy = seEnvelope.maxy + 0.001; //} //_err_no = Wrapper10.SE_shape_generate_rectangle(ref seEnvelope, _shape); _err_no = gView.SDEWrapper.a10.Functions.SE_GenerateGeometry(_shape, ((ISpatialFilter)filter).Geometry, maxExtent); if (_err_no != 0) { return; } _seFilter.shape = _shape; /* set spatial constraint column and table */ _seFilter.table = tc.Name.PadRight(CONST.SE_QUALIFIED_TABLE_NAME, '\0');; _seFilter.column = ((IFeatureClass)tc).ShapeFieldName.PadRight(CONST.SE_MAX_COLUMN_LEN, '\0'); /* set a couple of other spatial constraint properties */ switch (((ISpatialFilter)filter).SpatialRelation) { /*case spatialRelation.SpatialRelationMapEnvelopeIntersects: * _seFilter.method = CONST.SM_ENVP_BY_GRID; * break; * */ case spatialRelation.SpatialRelationEnvelopeIntersects: _seFilter.method = CONST.SM_ENVP; break; default: _seFilter.method = CONST.SM_AI; break; } _seFilter.filter_type = CONST.SE_SHAPE_FILTER; _seFilter.truth = true; // True; } _err_no = Wrapper10.SE_queryinfo_create(ref _queryInfo); if (_err_no != 0) { return; } _err_no = Wrapper10.SE_queryinfo_set_tables(_queryInfo, 1, new string[] { tc.Name }, null); if (_err_no != 0) { return; } string [] fields; if (filter.SubFields == "" || filter.SubFields.Contains("*") || filter.SubFields == null) { StringBuilder subFields = new StringBuilder(); foreach (IField field in tc.Fields.ToEnumerable()) { if (subFields.Length != 0) { subFields.Append(" "); } subFields.Append(tc.Name + "." + field.name); _queryFields.Add(field); } fields = subFields.ToString().Split(' '); } else { fields = filter.SubFields.Split(' '); foreach (string fieldname in fields) { string fname = fieldname; if (fieldname.ToLower().IndexOf("distinct(") == 0) { fname = fieldname.Substring(9, fieldname.IndexOf(")") - 9); } IField field = tc.FindField(fname); if (field == null) { if (filter.IgnoreUndefinedFields) { continue; } _errMsg = "Can't get Field " + fname; Cleanup(); return; } _queryFields.Add(field); } } _err_no = Wrapper10.SE_queryinfo_set_columns(_queryInfo, fields.Length, fields); if (_err_no != 0) { return; } string where = ""; if (filter != null) { if (filter is IRowIDFilter) { where = ((IRowIDFilter)filter).RowIDWhereClause; } else { where = filter.WhereClause; } } if (where != "") { _err_no = Wrapper10.SE_queryinfo_set_where_clause(_queryInfo, where); if (_err_no != 0) { return; } } _err_no = Wrapper10.SE_queryinfo_set_query_type(_queryInfo, CONST.SE_QUERYTYPE_JSFA); if (_err_no != 0) { return; } } catch (Exception ex) { _errMsg = "SeQueryInfo:" + ex.Message + "\n" + ex.StackTrace; _err_no = -1; } finally { if (_err_no != 0) { _errMsg = Wrapper10.GetErrorMsg(new SE_CONNECTION(), _err_no); Cleanup(); } } }
/* * internal SdeConnection AllocConnection() * { * if (_sConnection == null) return null; * return _current = _sConnection.AllocConnection(); * } * * internal void FreeConnection() * { * if (_sConnection == null) return; * _current = null; * _sConnection.FreeConnection(); * } */ internal SE_COORDREF GetSeCoordRef(ArcSdeConnection connection, string table, string spatialColumnName, ref SE_ENVELOPE envelope) { _errMsg = ""; if (connection == null || connection.SeConnection.handle == IntPtr.Zero) { _errMsg = "GetSeCoordRef:\n No Connection allocated!"; return(new SE_COORDREF()); } SE_COORDREF coordRef = new SE_COORDREF(); SE_LAYERINFO layerInfo = new SE_LAYERINFO(); Int32 _err_no = 0; try { _err_no = Wrapper10.SE_coordref_create(ref coordRef); if (_err_no != 0) { return(new SE_COORDREF()); } _err_no = Wrapper10.SE_layerinfo_create(coordRef, ref layerInfo); if (_err_no != 0) { return(new SE_COORDREF()); } _err_no = Wrapper10.SE_layer_get_info(connection.SeConnection, table, spatialColumnName, layerInfo); if (_err_no != 0) { return(new SE_COORDREF()); } _err_no = Wrapper10.SE_layerinfo_get_coordref(layerInfo, coordRef); if (_err_no != 0) { return(new SE_COORDREF()); } _err_no = Wrapper10.SE_coordref_get_xy_envelope(coordRef, ref envelope); if (_err_no != 0) { return(new SE_COORDREF()); } return(coordRef); } catch (Exception ex) { _errMsg = "GetSeCoordRef:\n " + ex.Message + "\n" + ex.StackTrace; return(new SE_COORDREF()); } finally { if (layerInfo.handle != IntPtr.Zero) { Wrapper10.SE_layerinfo_free(layerInfo); } if (_err_no != 0) { if (coordRef.handle != IntPtr.Zero) { Wrapper10.SE_coordref_free(coordRef); } _errMsg = Wrapper10.GetErrorMsg(new SE_CONNECTION(), _err_no); } } }
internal ISpatialReference GetLayerSpatialReference(SE_CONNECTION connection, string table, string spatialColumnName) { _errMsg = ""; if (connection.handle == IntPtr.Zero) { _errMsg = "GetLayerSpatialReference:\n No Connection allocated!"; return(null); } SE_COORDREF coordRef = new SE_COORDREF(); SE_LAYERINFO layerInfo = new SE_LAYERINFO(); Int32 _err_no = 0; try { _err_no = Wrapper10.SE_coordref_create(ref coordRef); if (_err_no != 0) { return(null); } _err_no = Wrapper10.SE_layerinfo_create(coordRef, ref layerInfo); if (_err_no != 0) { return(null); } _err_no = Wrapper10.SE_layer_get_info(connection, table, spatialColumnName, layerInfo); if (_err_no != 0) { return(null); } _err_no = Wrapper10.SE_layerinfo_get_coordref(layerInfo, coordRef); if (_err_no != 0) { return(null); } System.Int32 srid = 0; _err_no = Wrapper10.SE_coordref_get_srid(coordRef, ref srid); if (_err_no != 0) { return(null); } byte[] description = new byte[1024 * 4]; _err_no = Wrapper10.SE_coordref_get_description(coordRef, description); if (_err_no != 0) { return(null); } string wkt = Functions.GetASCIIString(description); ISpatialReference sRef = gView.Framework.Geometry.SpatialReference.FromWKT(wkt); return(sRef); } catch (Exception ex) { _errMsg = "GetLayerSpatialReference:\n " + ex.Message + "\n" + ex.StackTrace; return(null); } finally { if (layerInfo.handle != IntPtr.Zero) { Wrapper10.SE_layerinfo_free(layerInfo); } if (coordRef.handle != IntPtr.Zero) { Wrapper10.SE_coordref_free(coordRef); } if (_err_no != 0) { _errMsg = Wrapper10.GetErrorMsg(new SE_CONNECTION(), _err_no); } } }