2009-09-12 6 views
14

S'il vous plaît quelqu'un m'aider! J'ai une application fonctionnant sur Windows 2003 avec sql server 2005. Quand j'essaye de déployer cette application dans un autre serveur windows 2003 avec le serveur SQL 2000, certaines pages de l'application affiche le message ci-dessous:SqlException (0x80131904): Ligne 28: Syntaxe incorrecte près de '('.)

Server Error in '/' Application. 
Line 1: Incorrect syntax near '('. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Data.SqlClient.SqlException: Line 1: Incorrect syntax near '('. 

Source Error: 
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. 


Stack Trace: 

[SqlException (0x80131904): Line 1: Incorrect syntax near '('.] 
    System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) +1948826 
    System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) +4844747 
    System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) +194 
    System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +2392 
    System.Data.SqlClient.SqlDataReader.ConsumeMetaData() +33 
    System.Data.SqlClient.SqlDataReader.get_MetaData() +83 
    System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +297 
    System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) +954 
    System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) +162 
    System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +32 
    System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) +141 
    System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) +12 
    System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior) +10 
    System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior) +383 

[EntityCommandExecutionException: An error occurred while executing the command definition. See the inner exception for details.] 
    System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior) +422 
    System.Data.Objects.Internal.ObjectQueryExecutionPlan.Execute(ObjectContext context, ObjectParameterCollection parameterValues) +745 
    System.Data.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption) +162 
    System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator() +45 
    System.Linq.Enumerable.FirstOrDefault(IEnumerable`1 source) +203 
    System.Data.Objects.ELinq.ObjectQueryProvider.<GetElementFunction>b__1(IEnumerable`1 sequence) +40 
    System.Data.Objects.ELinq.ObjectQueryProvider.ExecuteSingle(IEnumerable`1 query, Expression queryRoot) +60 
    System.Data.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute(Expression expression) +109 
    System.Linq.Queryable.FirstOrDefault(IQueryable`1 source) +269 
    SebraeFE.Models.Repositories.InterestsRepository.DeleteInterests(Interests interestsToDelete) +418 
    SebraeFE.Models.Managers.InterestsManager.DeleteInterests(Interests interestsToDelete) +41 
    SebraeFE.Models.Facades.InterestsFacade.DeleteInterests(Interests interestsToDelete) +41 
    SebraeFE.Controllers.OportunidadeController.ApagarInteresse(Int32 Id) +265 
    lambda_method(ExecutionScope , ControllerBase , Object[]) +78 
    System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +17 
    System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +178 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +24 
    System.Web.Mvc.<>c__DisplayClassa.<InvokeActionMethodWithFilters>b__7() +53 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +258 
    System.Web.Mvc.<>c__DisplayClassc.<InvokeActionMethodWithFilters>b__9() +20 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +258 
    System.Web.Mvc.<>c__DisplayClassc.<InvokeActionMethodWithFilters>b__9() +20 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +193 
    System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +382 
    System.Web.Mvc.Controller.ExecuteCore() +123 
    System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +23 
    System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +7 
    System.Web.Mvc.MvcHandler.ProcessRequest(HttpContextBase httpContext) +144 
    System.Web.Mvc.MvcHandler.ProcessRequest(HttpContext httpContext) +54 
    System.Web.Mvc.MvcHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext httpContext) +7 
    System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +406 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +76 


Version Information: Microsoft .NET Framework Version:2.0.50727.3053; ASP.NET Version:2.0.50727.3053 

un unsing les tecnologies ci-dessous:

  • asp.net mvc 1

  • ADO.net et LINQ

aidez-moi s'il vous plaît!

+7

Il va être très difficile de résoudre ce sans requête réelle . –

+1

Essayez coller votre requête plutôt que le stacktrace –

+0

de regarder la trace de la pile me semble que cela pourrait être un problème de compatibilité avec MVC et SQL2000 – BlackTigerX

Répondre

0

Il semble tout à fait possible que vous essayiez d'utiliser quelque chose que SQL 2005 a et SQL 2000 n'a pas. Expressions de table communes?

1

Il est assez difficile d'avoir une idée de ce à quoi ressemble votre requête. Cette exception particulière m'a déjà eu avec SELECT TOP expressions. Dans SQL 2005+ simple TOP SELECT pourrait ressembler à ceci:

SELECT TOP (50) FROM Events 

Cependant, vous recevrez l'exception exacte d'erreur de syntaxe que vous parlez dans SQL 2000 parce que SQL 2000 ne permet pas entre parenthèses dans l'expression SELECT TOP. En d'autres termes, il doit ressembler à ceci:

SELECT TOP 50 FROM Events 

Une autre astuce pour essayer d'aller au fond de c'est d'obtenir la déclaration exacte SQL généré, puis allez dans SQL 2000 Enterprise Manager et l'exécuter. Quand il vous donne la même erreur dans certains cas EM vous indiquera un peu plus où le problème de syntaxe existe (essayez de fractionner votre requête sur plusieurs lignes)

2

Certaines requêtes SQL Server 2005 qui contiennent des extensions spécifiques à 2005 comme ROW_NUMBER(), expressions de table communes [par exemple WITH x AS (...) SELECT ... FROM x], etc. ne sont pas rétrocompatibles avec SQL Server 2000.

Vous devez vous assurer que votre application s'exécute uniquement sur SQL Server 2005 ou vous devez retravailler vos requêtes qui sont spécifiques à SQL Server 2005 pour prendre en charge SQL Server 2000, 2005 et probablement 2008 aussi pour faire bonne mesure. Il existe une documentation abondante sur les différences de syntaxe et de sémantique T-SQL entre les différentes versions de SQL Server.

Je crains que vous n'obtiendriez pas d'aide beaucoup plus spécifique de quiconque sans révéler le texte de la requête. Ce serait comme si je vous demandais de corriger mon erreur d'orthographe à la ligne 12 de mon mémoire de troisième année en anglais. Non, vous ne pouvez pas l'avoir, mais pouvez-vous le relire pour moi?

0

Je n'ai pas trouvé la vraie raison. Mais il semble que ce soit quelque chose à propos du linq et du sql2000, exactement comme l'a dit Charles Conway.

Le code ci-dessous fonctionne pour moi:

remplacer:

//... 
    Interests original = (from m in _db.InterestsSet where m.Id == interestsToDelete.Id select m).FirstOrDefault(); 
//... 

à:

//.. 
     Interests original = null; 

     foreach (var i in from m in _db.InterestsSet where m.Id == interestsToDelete.Id select m){ 
      original = i; 
      break; 
     } 
    //... 

Je ne l'aime pas, mais fonctionne ...

24

ouvrir votre .edmx modèle avec l'éditeur XML et modifier cette

ProviderManifestToken="2008" 

à

ProviderManifestToken="2000" 

il pourrait être le linq .first() qui génère le script sql 'Top (1)' qui fonctionne dans sql2005, mais devrait être 'top 1' avec out '(' et ')' dans sql 2000

cela fonctionne dans ma solution.

+0

devrait être le fichier edmx, pas ecmx. Je l'éditerais si je pouvais ... –

+0

Je voudrais avoir regardé ici d'abord, merci +1 – Jodrell

+0

J'ai le même problème, mais il donne une syntaxe incorrecte près de '-'. au lieu de "Syntaxe incorrecte près de" ("." ce que je vais faire –

1

Cette erreur vient de me arriver en utilisant Entity Framework avec SQL Server 2008 dans un service Windows en cours d'exécution sur le .NET Framework 4.

Il était vraiment simple, vérifiez votre requête est de type sécurité dans LINQ. IE ne pas faire une clause where comme fld > 0 si le fld est un varchar, vous devriez le faire où fld isnot nothing. Le problème, je pense, est quand .net essaie de faire correspondre les types de linq aux types de champs db et SQL Server n'aime pas exécuter le SQL généré.

Donc, fondamentalement, cette erreur est un pique-nique et non un problème logiciel.

Ma requête qui a floc était

qry = qry.Where(Function(rslts) (rslts.SubscriptionEndDate <= DeadLine _ 
     And rslts.SubscriptionCancelledByName > 0 _ 
     And rslts.SubscriptionIsRenewalEmailSent = False)) 

La requête qui a résolu le problème était

qry = qry.Where(Function(rslts) (rslts.SubscriptionEndDate <= DeadLine _ 
     And rslts.SubscriptionCancelledByName IsNot Nothing _ 
     And rslts.SubscriptionIsRenewalEmailSent = False)) 

Hope this helps

Questions connexes