我创建了一个简单的项目,其中包含一个 SQL Server 数据库,其中包含数十个表和大量索引,但没有什么复杂的。没有触发器,没有存储过程,没有额外的“数据库魔法”。代码是用 C# 编写的,使用实体模型和动态数据站点来快速设置基础知识,所以可以让一些打字猴子工作并做一些基本的数据输入,而我将修改项目变得更加成熟.
在 SQL Server 2005 上对其进行了测试,一切正常。因此,我通过 Visual Studio 进行了设置,并将其发送给打字猴子及其管理员。他们所要做的就是:1)创建一个新数据库。2) 执行数据库的创建脚本。3)安装我给他们的设置。4)修改连接字符串,为了方便起见,它恰好放在一个特殊的配置文件中。5) 使用网络界面,如果出现问题,请通知我。
出了点问题。这个完整的错误:第 1 行:'(' 附近的语法不正确。'row_number' 不是可识别的函数名。关键字'AS' 附近的语法不正确。
我不在我的代码中使用“row_number”。我只是使用 Linq 进行查询。此外,由于实体模型,我什至不必担心做任何 SQL 的事情。(尽管我很擅长。)
我的第一个猜测是他们使用了错误的连接字符串。他们可能正在 SQL Server 上安装此应用程序(应该仍然可以工作),但他们没有完全更改连接字符串,现在我的项目认为它正在使用 SQL Server 2005。(或其他。)我是对的还是这是由某些原因引起的其他讨厌的错误?
完整错误:
[SqlException (0x80131904):第 1 行:'(' 附近的语法不正确。'row_number' 不是可识别的函数名。关键字'AS' 附近的语法不正确。]
System.Data.SqlClient.SqlConnection.OnError(SqlException 异常,布尔值breakConnection)+1950890 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException 异常,布尔 breakConnection)+4846875 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 方法, DbAsyncResult 结果) +162
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String 方法) +32 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior 行为, String 方法) +141
System.Data.SqlClient.SqlCommand。 ExecuteDbDataReader(CommandBehavior 行为)+12
System.Data.Common.DbCommand.ExecuteReader(CommandBehavior 行为)+10
System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand,CommandBehavior 行为)+387[EntityCommandExecutionException:执行命令定义时发生错误。有关详细信息,请参阅内部异常。]
System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior) +423
System.Data.Objects.Internal.ObjectQueryExecutionPlan.Execute(ObjectContext context, ObjectParameterCollection parameterValues) +743
System.Data。 Objects.ObjectQuery1.GetResults(Nullable
1 forMergeOption) +157
System.Data.Objects.ObjectQuery`1.GetIListSourceListInternal() +13 System.Data.Objects.ObjectQuery.System.ComponentModel.IListSource.GetList() +7 System.Web.UI.WebControls.EntityDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments, Creator qbConstructor)+1168 System.Web.UI.WebControls.EntityDataSourceView.ExecuteSelect(DataSourceSelectArguments 参数)+102
System.Web.UI.DataSourceView.Select(DataSourceSelectArguments 参数,DataSourceViewSelectCallback 回调) +19 System.Web.UI.WebControls.DataBoundControl.PerformSelect() +142 System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +73 System. Web.UI.WebControls.GridView.DataBind() +4 System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() +82 System.Web.UI.WebControls.CompositeDataBoundControl.CreateChildControls() +72 System.Web.UI.Control .EnsureChildControls() +87 System.Web.UI.Control.PreRenderRecursiveInternal() +44 System.Web.UI.Control.PreRenderRecursiveInternal() +171 System.Web.UI.Control.PreRenderRecursiveInternal() +171 System.Web.UI .Control.PreRenderRecursiveInternal() +171 System.Web.UI.Control.PreRenderRecursiveInternal() +171 System.Web.UI.Control。PreRenderRecursiveInternal() +171 System.Web.UI.Page.ProcessRequestMain(布尔型 includeStagesBeforeAsyncPoint,布尔型 includeStagesAfterAsyncPoint)+842
这个应用程序以前是在 SQL Server 2000 系统上构建的,然后它也可以正常工作。但是,测试数据库升级到 2005,而生产数据库仍然使用 2000。我希望这不会造成任何问题,但我的假设是否正确?