2012-07-04 3 views
-4

que quelqu'un peut me aider avec celui-ci, im obtenir une erreur de syntaxe quand je lance mon code, je ne sais pas ce qu'il pourrait être .. merci d'avanceSyntaxe incorrecte '. '

SqlCommand scGetPostings = new SqlCommand ("SELECT D1.dr,D1.cr,d1.asset_no ,(open_bal+dr-cr) as closing_balance FROM" + 
"(SELECT COALESCE(SUM(dr_amount),0) as dr, COALESCE(SUM(cr_amount),0) as cr,invasset.asset_no FROM posting,sysasset,invasset" + 
"WHERE posting.asset_no = invasset.asset_no AND posting.asset_no = @AssetNo, AND period >= asset_open_per GROUP BY invasset.asset_no)" + 
"as D1,asset", DataAccess.AConnection); 
+0

Essayez de le copier dans Sql Manager ... il devrait vous dire où l'erreur est ... – Kek

+1

'comme D1, actif' peut-être que cela devrait être 'comme D1.asset' –

+1

Vous avez une virgule entre vos déclarations ET – stuartd

Répondre

1

Le problème est dans la clause where:

WHERE posting.asset_no = invasset.asset_no AND posting.asset_no = @AssetNo, AND period >= asset_open_per 

Retirez la virgule et il devrait fonctionner. Comme ceci:

WHERE posting.asset_no = invasset.asset_no AND posting.asset_no = @AssetNo AND period >= asset_open_per 
2

Ajouter quelques espaces à la fin de votre lignes, sinon cela est le résultat de la concaténation:

FROM(SELECT 
invassetWHERE posting.asset_no 

...

MISE À JOUR: l'erreur réelle provient de WHERE posting.asset_no < - ce point. Parce que là où l'article ne sont pas analysées et posting.asset_no est attendu comme un nom de table

+0

Les espaces ne sont pas syntaxiquement requis ici. 'sélectionnez c depuis (sélectionnez 1 comme c) t fonctionne correctement. –

+0

@MS - Oui, ça va marcher, je l'ai ajouté juste par exemple. La ligne suivante ne fonctionnera pas cependant. – Tisho

+0

D'accord. Je ne suis pas sûr que les conditions de jointure soient correctes non plus. Et qui sait ce que «comme D1, actif» est censé être pour ... –

1
SqlCommand scGetPostings = new SqlCommand ("SELECT D1.dr,D1.cr,d1.asset_no ,(open_bal+dr-cr) as closing_balance FROM " + 
"(SELECT COALESCE(SUM(dr_amount),0) as dr, COALESCE(SUM(cr_amount),0) as cr,invasset.asset_no FROM posting,sysasset,invasset" + 
" WHERE posting.asset_no = invasset.asset_no AND posting.asset_no = @AssetNo AND period >= asset_open_per GROUP BY invasset.asset_no)" + 
"AS D1,asset", DataAccess.AConnection); 
+0

Pouvez-vous expliquer ce que vous avez changé et pourquoi? Les réponses au code seulement ne sont pas de très bonnes explications. – David

1

Ajouter des espaces à la fin des fragments de chaîne!

"(SELECT ...,sysasset,invasset " + 
"WHERE ... invasset.asset_no)" 

au lieu de

"(SELECT ...,sysasset,invasset" + 
"WHERE ... invasset.asset_no)" 
1

Débarrassez-vous de la , après AND posting.asset_no = @AssetNo