2009-09-12 107 views
14

Hãy giúp ai đó giúp tôi! Tôi có một ứng dụng chạy trên Windows 2003 với máy chủ sql 2005. Khi tôi cố triển khai một số ứng dụng này trên máy chủ khác cửa sổ 2003 với SQL Server 2000, một số trang của ứng dụng hiển thị thông báo dưới đây:SqlException (0x80131904): Dòng 28: Cú pháp không chính xác gần '('.]

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 

một unsing các tecnologies rống lên:

  • asp.net MVC 1

  • ADO.net và LINQ

hãy giúp tôi!

+7

Nó sẽ rất khó khăn để khắc phục sự cố này mà không có một truy vấn thực tế . –

+1

Thử dán truy vấn của bạn chứ không phải ngăn xếp –

+0

khi nhìn vào dấu vết ngăn xếp dường như với tôi đây có thể là sự cố tương thích với MVC và SQL2000 – BlackTigerX

Trả lời

0

Có vẻ như bạn đang cố gắng sử dụng cái gì đó mà SQL 2005 có và SQL 2000 thì không. Biểu thức bảng chung?

1

Rất khó để biết được truy vấn của bạn trông như thế nào. Ngoại lệ đặc biệt này đã cho tôi trước với các biểu thức SELECT TOP. Trong SQL 2005 + một đơn giản CHỌN TOP có thể trông như thế này:

SELECT TOP (50) FROM Events 

Tuy nhiên bạn sẽ nhận được ngoại lệ lỗi cú pháp chính xác mà bạn đang nói về trong SQL 2000 vì SQL 2000 không cho phép ngoặc trong biểu thức TOP SELECT. Nói cách khác, nó cần phải trông như thế này:

SELECT TOP 50 FROM Events 

Một mẹo để thử và tìm hiểu tường tận của việc này là để có được các câu lệnh SQL chính xác tạo ra, sau đó đi vào SQL 2000 Enterprise Manager và chạy nó. Khi nó cung cấp cho bạn cùng một lỗi trong một số trường hợp EM sẽ chỉ cho bạn gần hơn một chút về nơi xảy ra vấn đề cú pháp (thử chia nhỏ truy vấn của bạn trên nhiều dòng)

2

Một số truy vấn SQL Server 2005 ROW_NUMBER(), biểu thức bảng chung [ví dụ VỚI x AS (...) SELECT ... FROM x], vv không tương thích ngược với SQL Server 2000.

Bạn phải đảm bảo rằng ứng dụng của bạn chỉ chạy trên SQL Server 2005 hoặc bạn phải làm lại truy vấn của mình cụ thể cho SQL Server 2005 để hỗ trợ SQL Server 2000, 2005 và có lẽ năm 2008 cũng là biện pháp tốt. Có rất nhiều tài liệu có sẵn như những gì khác biệt trong cú pháp T-SQL và ngữ nghĩa giữa các phiên bản khác nhau của SQL Server.

Tôi e rằng bạn sẽ không nhận được trợ giúp cụ thể hơn từ bất kỳ ai mà không tiết lộ văn bản truy vấn thực tế. Điều đó sẽ giống như tôi yêu cầu bạn sửa lỗi chính tả của tôi trên dòng 12 của bài học kỳ hạn 3 năm tiếng Anh của tôi. Không, bạn không thể có nó, nhưng bạn có thể đọc lại cho tôi không?

0

Tôi không tìm thấy lý do thực sự. Nhưng nó có vẻ là một cái gì đó về linq và sql2000, chính xác như Charles Conway nói.

Đoạn code dưới đây làm việc cho tôi:

thay thế:

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

tới:

//.. 
     Interests original = null; 

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

tôi không thích nó, nhưng hoạt động ...

24

mở .edmx mô hình của bạn với biên tập xml, và sửa đổi này

ProviderManifestToken="2008" 

để

ProviderManifestToken="2000" 

nó có thể là linq .first() tạo tập lệnh sql 'Top (1)' hoạt động trong sql2005, nhưng phải là 'top 1' với out '(' và ')' trong sql 2000

nó hoạt động trong giải pháp của tôi.

+0

phải là tệp edmx chứ không phải ecmx. Tôi muốn chỉnh sửa nếu tôi có thể ... –

+0

Tôi muốn tôi xem xét ở đây đầu tiên, cảm ơn +1 – Jodrell

+0

tôi có cùng một vấn đề nhưng đưa ra cú pháp sai gần '-'. thay vì "cú pháp sai gần '('." những gì tôi sẽ làm –

1

Lỗi này chỉ xảy ra với tôi sử dụng Entity Framework với SQL Server 2008 trong một dịch vụ Windows chạy trên NET framework 4.

Đó là đơn giản thực sự, hãy kiểm tra truy vấn của bạn là loại an toàn trong LINQ. IE không thực hiện điều khoản where như fld > 0 nếu fldvarchar, bạn nên làm tại nơi fld isnot nothing. Các vấn đề tôi nghĩ là khi. Net cố gắng để phù hợp lên các loại LINQ để các loại lĩnh vực db và SQL Server không giống như chạy SQL tạo ra.

Vì vậy, về cơ bản lỗi này là một chuyến dã ngoại không phải là trục trặc phần mềm.

truy vấn của tôi mà đi splat là

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

Các truy vấn mà giải quyết được vấn đề là

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

Hope this helps

Các vấn đề liên quan