SqlException (0x80131904): строка 28: неправильный синтаксис рядом с '('.] - PullRequest
14 голосов
/ 12 сентября 2009

Пожалуйста, кто-нибудь, помогите мне! У меня есть приложение, работающее на Windows 2003 с SQL Server 2005. Когда я пытаюсь развернуть это приложение на другом сервере на Windows 2003 с SQL Server 2000, на некоторых страницах приложения отображается сообщение:

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

нижеуказанные технологии:

  • asp.net mvc 1

  • ADO.net и LINQ

пожалуйста, помогите мне!

Ответы [ 8 ]

24 голосов
/ 29 сентября 2010

откройте вашу модель .edmx в редакторе xml и измените это

 ProviderManifestToken="2008"

до

 ProviderManifestToken="2000"

это может быть linq .first (), который генерирует скрипт sql 'Top (1)', который работает в sql2005, но должен быть 'top 1' без '(' и ')' в sql 2000

это работает в моем решении.

5 голосов
/ 22 марта 2010

В файле .edmx необходимо изменить ProviderManifestToken на 2000 в теге схемы на ProviderManifestToken = "2000" (это будет ProviderManifestToken = "2005")

ref: Entity Framework в Sql 2000 против Sql 2005 и ProviderManifestToken

2 голосов
/ 12 сентября 2009

Некоторые запросы SQL Server 2005, которые содержат специфичные для 2005 расширения, такие как ROW_NUMBER (), общие табличные выражения [например, WITH x AS (...) SELECT ... FROM x] и т. Д. Не имеют обратной совместимости с SQL Server 2000.

Вы должны либо убедиться, что ваше приложение работает только на SQL Server 2005, либо вы должны переработать свои запросы, относящиеся к SQL Server 2005, для поддержки SQL Server 2000, 2005 и, вероятно, 2008 года, а также для хорошей меры. Существует множество документов, касающихся различий в синтаксисе и семантике T-SQL между различными версиями SQL Server.

Боюсь, что вы не получите более конкретной помощи от кого-либо, не раскрывая текст запроса. Это было бы похоже на то, как я прошу вас исправить мою орфографическую ошибку в строке 12 моей курсовой работы на английском языке за третий год. Нет, ты не можешь получить это, но можешь ли ты перечитать это для меня?

1 голос
/ 26 ноября 2010

Эта ошибка только что произошла со мной при использовании Entity Framework с SQL Server 2008 в службе Windows, работающей в .NET Framework 4.

На самом деле все было просто, дважды проверьте, что ваш запрос безопасен в linq. IE не делает предложение where вроде fld > 0, если fld равно varchar, вы должны делать где fld isnot nothing. Я думаю, что проблема заключается в том, что .net пытается сопоставить типы linq с типами полей db, а SQL Server не нравится запускать сгенерированный SQL.

Так что в основном эта ошибка - пикник, а не программный сбой.

Мой запрос, который получил знак "*", был

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

Запрос, решивший проблему, был

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

Надеюсь, это поможет

1 голос
/ 12 сентября 2009

Довольно сложно понять, как выглядит ваш запрос. Это конкретное исключение уже помогло мне с выражениями SELECT TOP. В SQL 2005+ простой SELECT TOP может выглядеть так:

SELECT TOP (50) FROM Events

Однако вы получите точное исключение синтаксической ошибки, о котором вы говорите в SQL 2000, потому что SQL 2000 не допускает скобки в выражении SELECT TOP. Другими словами, это должно выглядеть так:

SELECT TOP 50 FROM Events

Еще один совет, чтобы попытаться докопаться до сути этого, - получить точный сгенерированный оператор SQL, а затем перейти к SQL 2000 Enterprise Manager и запустить его. Когда в некоторых случаях выдает ту же ошибку, EM немного укажет вам, где существует проблема с синтаксисом (попробуйте разбить ваш запрос на несколько строк)

0 голосов
/ 13 сентября 2009

Я не нашел реальную причину. Но, похоже, что-то вроде linq и sql2000, как сказал Чарльз Конуэй.

Код ниже работает для меня:

заменить:

//...
    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;
        }
    //...

Мне это не нравится, но работает ...

0 голосов
/ 12 сентября 2009

Это может быть LINQ. Это не на 100% совместимо с Sql 2000 .

0 голосов
/ 12 сентября 2009

Возможно, вы пытаетесь использовать то, что есть в SQL 2005, а в SQL 2000 - нет. Общие табличные выражения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...