2010-06-08 5 views
0

Je travaille sur un projet C# qui utilise un backend de base de données d'objet Versant et j'essaie de créer une requête contenant un opérateur arithmétique. La documentation indique qu'elle est supportée mais manque d'exemple.Instruction Versant OQL avec un opérateur arithmétique

Je suis en train de construire quelque chose comme ceci:

SELECT * FROM _orderItemObject WHERE _qtyOrdered - _qtySent > 0 

Si je tente cette déclaration dans l'inspecteur d'objets que je reçois une erreur de synthaxe près de la « - ».

Quelqu'un at-il un exemple de VQL fonctionnant avec ce type d'instruction?

Merci

Répondre

0

Je ne suis pas sûr que l'inspecteur d'objets saura la syntaxe pour l'expression arithmtic. Cependant, dans votre code, vous devriez faire référence à la classe entièrement qualifiée. Ensuite, la syntaxe que vous utilisez devrait être parfaitement bien.

Requête query = new Requête (session, "select * from com.yourCompany.yourClass où _qtyOrdered - _qtySent> 0");

QueryResult result = query.execute(); Je viens de l'essayer sur l'un de mes cours et ça a bien fonctionné.

Cheers, -Robert

+0

Après beaucoup de tests, il semble que vous avez raison, Inspecteur d'objets ne semble pas être en mesure de soutenir. Mais le problème était plus profond que cela. Il semble que le décimal de type C# est étrangement supporté dans Versant et est transformé en un tableau char. Cela explique mon erreur. Merci pour la réponse. – Pascal

0

avec C# et OQL vous devez vous assurer que vous sélectionnez l'étendue de la classe appropriée. Ceci est fait en ajoutant le suffixe "Extent" au nom de la classe. Par exemple, dans ma classe Pet, j'identifierais tous les familiers avec "PetExtent" dans la chaîne OQL.

Les membres de classe sont accédés dans le prédicat en définissant un nom local, p dans le code ci-dessous. Toutes les expressions arithmétiques seront évaluées par le moteur de requête.

string query="SELECT * FROM PetExtent AS p WHERE p.Name = \"Ferris\" AND (p.age + 5) > 4"; 
IQueryResult result = scope.GetOqlQuery(query).Execute(); 

foreach (object o in result) 
    Out(o.ToString()); 

La meilleure façon de tester OQL avec C# de la liaison est à Versant utiliser l'OQL Query Browser intégré dans Visual Studio. Regardez dans le menu Versant déroulant dans Visual Studio.

Cordialement,

Derek

+0

Merci d'avoir signalé le navigateur de requêtes OQL. Cela me sauvera beaucoup de tracas à l'avenir. – Pascal

+0

System.Decimal et BigDecimal (liaison JDO) sont en effet traduits en chaînes pour le stockage sur le serveur. Si vous avez besoin de faire des calculs dans vos requêtes, vous devez vous en tenir à l'un des types entiers ou à virgule flottante. Il existe une table dans les documents C# qui explique les mappages de type de valeur des types CLR aux types de serveur Versant. – Derek

Questions connexes