2009-06-23 7 views
2

J'ai créé un projet simple avec une base de données SQL Server avec des dizaines de tables et beaucoup d'index mais rien de très compliqué. Aucun déclencheur, aucune procédure stockée, aucune "base de données magique" supplémentaire. Le code est écrit en C#, en utilisant le modèle Entity et le site de données dynamique pour configurer les bases très rapidement, donc certains singes de frappe pourraient être mis au travail et faire quelques entrées de données de base pendant que je modifierais le projet mature.'row_number' n'est pas un nom de fonction reconnu. Syntaxe incorrecte près du mot-clé 'AS'

Testé sur SQL Server 2005 et tout a bien fonctionné. J'ai donc fait une configuration via Visual Studio et l'ai envoyée à l'utilisateur Monkeys et à son administrateur. Tout ce qu'ils avaient à faire était: 1) Créer une nouvelle base de données. 2) Exécutez le script Create pour la base de données. 3) Installez la configuration que je leur ai donnée. 4) Modifiez la chaîne de connexion, qui se trouve être placée dans un fichier de configuration spécial pour leur commodité. 5) Utilisez l'interface Web et signalez-moi si quelque chose ne va pas.

Et quelque chose s'est mal passé. Cette erreur complète: Ligne 1:. Syntaxe incorrecte près « (» « row_number » est pas un nom de fonction reconnue syntaxe incorrecte près du mot-clé « AS »

Je n'utilise « row_number » dans mon code.. Je n'utilise que Linq pour les requêtes, d'ailleurs, à cause du modèle d'entité, je n'ai même pas à m'inquiéter de faire des choses SQL (même si je suis bon.)

Ma première estimation est Ils utilisent peut-être une chaîne de connexion défectueuse Ils peuvent installer cette application sur SQL Server (qui devrait fonctionner) mais ils n'ont pas complètement changé la chaîne de connexion et maintenant mon projet pense qu'il utilise SQL Server 2005. (Ou quoi que ce soit.) Ai-je raison ou est-ce causé par un autre insecte méchant?

erreur complète:

[SqlException (0x80131904): Line 1: Incorrect syntax near '('. 'row_number' is not a recognized function name. Incorrect syntax near the keyword 'AS'.]
System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) +1950890 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean 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 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) +387

[EntityCommandExecutionException: An error occurred while executing the command definition. See the inner exception for details.]
System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior) +423
System.Data.Objects.Internal.ObjectQueryExecutionPlan.Execute(ObjectContext context, ObjectParameterCollection parameterValues) +743
System.Data.Objects.ObjectQuery 1.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 arguments) +102
System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) +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(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +842


Cette application a été construit précédemment sur un système SQL Server 2000, puis il a travaillé aussi bien. Cependant, la base de données de test a été mise à jour jusqu'en 2005 alors que la base de données de production utilise encore 2000. Je m'attendrais à ce que cela ne pose aucun problème, mais ai-je raison dans mon hypothèse?

+0

"Ils pourraient installer cette application sur SQL Server ..." Vous ne nous avez pas dit quelle version - est-ce 2000? –

+0

Ils ne m'ont pas dit non plus, mais sur la base de l'erreur, je soupçonne qu'ils ont essayé 2000 ... -sigh- –

Répondre

2

Eh bien, je l'ai fait un test simple. J'ai connecté mon projet avec une base de données SQL Server 2000, installé la base de données et exécuté les scripts SQL. Ensuite, sans recompilation, j'ai utilisé mon site pour me connecter à cette base de données et il a échoué. C'était la même erreur. Puis la partie suivante du test: J'ai rafraîchi les modèles d'entité dans mon projet et recompilé l'ensemble du projet. Toujours connecté à SQL Server 2000, j'ai recommencé le site et voilà, mon beau site.:-)

Il s'avère que le modèle Entity (et LINQ-TO-SQL) détectera la base de données que vous utilisez lorsque vous compilez votre projet. Si vous utilisez 2005, le code final est optimisé pour 2005 et vous ne pourrez pas installer le tout sur SQL Server 2000.

Donc, aussi ennuyeux que cela puisse être, je devrai continuer à développer sur SQL Machine Server 2000 (Et botter le cul de quelqu'un parce qu'il était censé tester mon installation sur un système similaire à l'utilisateur final!)

+0

Je viens de botter le cul du type responsable de la maintenance des bases de données. La base de données de développement a de nouveau été rétrogradée à 2000, ce qui la rapproche de la base de données de production. –

2

ROW_NUMBER() est utilisé pour effectuer des opérations telles que Skip/Take, au moins sur SQL Server 2005/2008. Si vous ciblez une version antérieure de SQL Server, elle risque d'être confuse.

LINQ to SQL fait une raisonnable pour tenter de soutenir SQL 2000 (bien que tout ne soit pas pris en charge) - Honnêtement, je ne sais pas si EF fait, cependant.

2

Regarder l'exception, il semble que la connexion pointe vers une base de données SQL Server qui n'est pas SQL 2005.

ROW_NUMBER est pris en charge dans SQL 2005.

5

Je sais que c'est un vieux fil de discussion, mais je pense qu'il a encore de l'importance.

J'ai rencontré le même problème. Je développais sur un serveur sql2008 et déployais sur un serveur sql2000. Au lieu de développer sur votre machine 2000, ouvrez votre fichier .edmx dans le bloc-notes et remplacez le jeton du manifeste par "2000". Ensuite, reconstruisez et publiez. Beaucoup plus facile que de développer sur une machine différente.

Questions connexes