SqlException (0x80131904): Zeile 28: Falsche Syntax in der Nähe von '(').

Bitte jemand hilf mir! Ich habe eine App auf Windows 2003 mit SQL server 2005. Wenn ich versuche, diese einige App in anderen server auf Windows 2003 mit SQL server 2000 zu installieren, zeigen einige Seiten der App die Meldung unten:

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 

ein unsing die tecnologies unten:

  • asp.net mvc 1

  • ADO.net und LINQ

Bitte hilf mir!

öffne dein modell .edmx mit xml editor und modifiziere das

  ProviderManifestToken="2008" 

nach

  ProviderManifestToken="2000" 

Es könnte der linq .first () sein, der das sql-Skript 'Top (1)' erzeugt, das in sql2005 funktioniert, aber sollte 'top 1' mit out '(' und ')' in sql 2000 sein

es funktioniert in meiner lösung

In der .edmx-file musst du das ProviderManifestToken auf 2000 im Schema-Tag an ProviderManifestToken = "2000" ändern (es wird ProviderManifestToken = "2005") sein.

ref: Entity Framework auf Sql 2000 vs. Sql 2005 und ProviderManifestToken

Einige SQL server 2005-Abfragen, die 2005-spezifische Erweiterungen wie ROW_NUMBER (), gemeinsame Tabellenausdrücke [zB WITH x AS (…) SELECT … FROM x] usw. enthalten, sind nicht rückwärtskompatibel mit SQL server 2000.

Sie müssen entweder sicherstellen, dass Ihre Anwendung nur auf SQL server 2005 ausgeführt wird oder Sie müssen Ihre Abfragen, die spezifisch für SQL server 2005 sind, um SQL server 2000, 2005 und wahrscheinlich 2008 auch für eine gute Maßnahme zu überarbeiten. Es gibt viele Unterlagen, was die Unterschiede in T-SQL-Syntax und Semantik unter den verschiedenen Versionen von SQL server sind.

Ich fürchte, du wirst nicht viel mehr spezifische Hilfe von jedermann bekommen, ohne den tatsächlichen Abfragetext zu enthüllen. Das wäre so, als würde ich dich bitten, meinen Rechtschreiberrors in Zeile 12 meines 3. Jahres englischen Begriffs Papier zu korrigieren. Nein, du kannst es nicht haben, aber kannst du es für mich korrigieren?

Es ist ziemlich schwierig, eine Vorstellung davon zu haben, wie deine Abfrage aussieht. Diese besondere exception hat mich vorher mit SELECT TOP Ausdrücken bekommen. In SQL 2005+ könnte ein einfaches SELECT TOP so aussehen:

 SELECT TOP (50) FROM Events 

Allerdings get die exakte Syntaxerrors-exception, von der Sie in SQL 2000 sprechen, da SQL 2000 keine Klammer im SELECT TOP-Ausdruck zulässt. Mit anderen Worten, es muss so aussehen:

 SELECT TOP 50 FROM Events 

Ein weiterer Tipp, um zu versuchen, auf den Boden zu kommen ist, um die genaue SQL-statement generiert zu bekommen, dann gehen Sie in SQL 2000 Enterprise Manager und führen Sie es aus. Wenn es Ihnen den gleichen Fehler gibt in einigen Fällen EM wird Sie ein wenig näher, wo die Syntax-Problem existiert (versuchen Sie teilen Ihre Abfrage auf mehrere Zeilen)

Dieser Fehler ist gerade bei mir mit Entity Framework mit SQL server 2008 in einem Windows-Dienst ausgeführt, der auf .NET Framework 4 ausgeführt wird.

Es war einfach wirklich, doppelte Überprüfung Ihrer Abfrage ist Typ sicher in linq. IE nicht tun, wo Klausel wie fld > 0 wenn die fld ist ein varchar , sollten Sie tun, wo fld isnot nothing . Das Problem, das ich denke, ist, wenn .net versucht, die linq-Typen an die db-Feldtypen anzupassen, und SQL server mag das Ausführen des erzeugten SQL nicht.

Also im Grunde ist dieser Fehler ein Picknick nicht ein Software-Glitch.

Meine Abfrage, die splat ging, war

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

Die Frage, die das Problem getriggers hat, war

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

Hoffe das hilft

Es klingt ganz möglich, dass du versuchst, etwas zu verwenden, das SQL 2005 hat und SQL 2000 nicht. Gemeinsame Tabellenausdrücke?

Es könnte LINQ sein. Es ist nicht 100% kompatibel mit Sql 2000 .

Ich habe den richtigen Grund nicht gefunden. Aber es scheint etwas über die linq und sql2000 zu sein, genau wie Charles Conway sagte.

Der Code unten funktioniert für mich:

replace:

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

nach:

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

Ich mag es nicht, aber funktioniert …