2009-09-12 43 views
14

Por favor, que alguien me ayude Tengo una aplicación ejecutándose en Windows 2003 con sql server 2005. Cuando intento implementar esta aplicación en otro servidor windows 2003 con SQL Server 2000, algunas páginas de la aplicación muestra el mensaje abajo:SqlException (0x80131904): Línea 28: sintaxis incorrecta cerca 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 las tecnologias a continuación:

  • asp.net mvc 1

  • ADO.net y LINQ

por favor ayuda!

+7

que va a ser muy difícil de solucionar esto sin una consulta real . –

+1

Intenta pegar tu consulta en lugar de stacktrace –

+0

al mirar el seguimiento de la pila me parece que esto podría ser un problema de compatibilidad con MVC y SQL2000 – BlackTigerX

Respuesta

0

Parece bastante posible que esté intentando usar algo que SQL 2005 tiene y SQL 2000 no. ¿Expresiones de tabla comunes?

1

Es bastante difícil sin tener una idea de cómo se ve su consulta. Esta excepción en particular me atrapó antes con las expresiones SELECT TOP. En SQL 2005 + un simple SELECT TOP podría tener este aspecto:

SELECT TOP (50) FROM Events 

Sin embargo, recibirá la excepción error de sintaxis exacta que está hablando de 2000 en SQL porque SQL 2000 no permite paréntesis en la expresión TOP SELECT. En otras palabras, se tiene que tener este aspecto:

SELECT TOP 50 FROM Events 

Otro consejo para tratar de llegar al fondo de esto es conseguir la instrucción SQL generada exacta, y luego entrar en el Administrador corporativo de SQL 2000 y ejecutarlo. Cuando le dé el mismo error en algunos casos, EM lo señalará un poco más acerca de dónde existe el problema de sintaxis (intente dividir su consulta en varias líneas)

2

Algunas consultas de SQL Server 2005 que contienen extensiones específicas de 2005 como ROW_NUMBER(), expresiones de tabla comunes [por ej. CON x AS (...) SELECCIONAR ... DESDE x], etc. no son compatibles con versiones anteriores de SQL Server 2000.

Debe asegurarse de que su aplicación se ejecuta solo en SQL Server 2005 o debe volver a procesar sus consultas que son específicos de SQL Server 2005 para admitir SQL Server 2000, 2005 y probablemente 2008 también para una buena medida. Existe una gran cantidad de documentación disponible sobre cuáles son las diferencias en la sintaxis y la semántica de T-SQL entre las diferentes versiones de SQL Server.

Me temo que no obtendrás ayuda mucho más específica de nadie sin revelar el texto de consulta real. Eso sería como que le pida que corrija mi error de ortografía en la línea 12 de mi tercer año de estudio de inglés. No, no puedes tenerlo, pero ¿puedes corregirlo por mí?

0

No encontré el verdadero motivo. Pero parece ser algo sobre el linq y sql2000, exactamente como dijo Charles Conway.

El siguiente código funciona para mí:

reemplazar:

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

a:

//.. 
     Interests original = null; 

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

no me gusta, pero funciona ...

24

abrir su .edmx modelo con el editor de XML, y modificar este

ProviderManifestToken="2008" 

a

ProviderManifestToken="2000" 

que podría ser el linq .first() que genera el script sql 'Top (1)' que funciona en sql2005, pero debe ser 'top 1' sin out '(' y ')' en sql 2000

funciona en mi solución.

+0

debe ser el archivo edmx, no ecmx. Lo editaría si pudiera ... –

+0

Ojalá hubiera mirado aquí primero, gracias +1 – Jodrell

+0

tengo el mismo problema, pero da una sintaxis incorrecta cerca de '-'. en lugar de "Sintaxis incorrecta cerca" ("." lo que haré –

1

Este error me acaba de suceder utilizando Entity Framework con SQL Server 2008 en un servicio de Windows que se ejecuta en la plataforma .NET 4.

Era simple en realidad, revise su consulta es escribir seguro en LINQ. IE no hace una cláusula WHERE como fld > 0 si el fld es un varchar, debe hacer donde fld isnot nothing. El problema creo que es cuando .net intenta hacer coincidir los tipos de linq con los tipos de campo db y SQL Server no quiere ejecutar el SQL generado.

Así que, básicamente, este error es un picnic, no es un error del software.

Mi consulta que fue splat era

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

La consulta que resolvió el problema era

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

espero que esto ayude

Cuestiones relacionadas