5 votos

Cuál es el mejor enfoque para el uso de IQueryFilter.WhereClause en ArcObjects?

¿Cuál es tu preferida / mejor enfoque para el uso de IQueryFilter.WhereClause declaraciones en ArcObjects (por ejemplo, cuando las características de selección por atributos)?

Usted necesita para comprobar el tipo de fuente (shapefile / personal / geodatabase de archivos, etc.), a continuación, compruebe los tipos de campo y así sucesivamente, antes de que realmente puede construir el WhereClause declaración y encontrar la correcta sintaxis de SQL. Me parece bastante fácil perderse en todos los apóstrofes, comillas, etc, especialmente si hay varios campos que se utilizan en la consulta.

¿Cuál es la mejor manera de construir fácilmente el WhereClause instrucción que sigue a la validez de la sintaxis de SQL..?

11voto

auramo Puntos 161

Utilizar los métodos disponibles en la ISQLSyntax interfaz para hacer que su código de área de trabajo independiente.

Como la ayuda en IQueryFilter.WhereClause explica, el uso de la ISQLSyntax.GetSpecialCharacter método para devolver el identificador delimitado prefijo y sufijo específico para tu área de trabajo y agregarlos a su identificadores de columna.

Ejemplo:

ISQLSyntax sqlSyntax = (ISQLSyntax)((IDataset)table).Workspace;
string fieldPrefixDelimiter = sqlSyntax.GetSpecialCharacter(
    esriSQLSpecialCharacters.esriSQL_DelimitedIdentifierPrefix);
string fieldSuffixDelimiter = sqlSyntax.GetSpecialCharacter(
    esriSQLSpecialCharacters.esriSQL_DelimitedIdentifierSuffix);
whereClause = String.Format("{0}{1}{2} IN({3})",
    fieldPrefixDelimiter,
    fieldName,
    fieldSuffixDelimiter,
    delimitedValueString);

Por supuesto, usted todavía tiene que comprobar los tipos de campo para construir la parte después de que el operador -- delimitedValueString es producido por alguna otra lógica que comprueba el tipo de campo y genera una lista de valores para poner en la IN declaración.

Esa parte es la aplicación específica en cuanto a qué tipos de campo que desea apoyar. En mi caso acabo de envoltura de las cadenas y el Guid en una sola cita, pase tipos numéricos a través de cambios, y tirar un error, para otros no compatibles los tipos de campo (no sé cómo o quiere controlar los campos de fecha, por ejemplo).

1voto

John Kramlich Puntos 286

Entiendo el dolor de cabeza cuando la construcción de un whereclause pero en VB que recientemente han adoptado el enfoque de la utilización de la VB función CHR (), cuando se trata con geodatabase de Archivos campos que necesitan ser encerrado en comillas dobles.

Entonces, para hacer que la cadena de cláusula: ""ID" = 6" yo lo haría así:

pQueryFilter.WhereClause = chr(34) & "ID" & chr(34) & "= 6"

Duncan

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X