2

数十のテーブルと多数のインデックスを持つ SQL Server データベースを使用して単純なプロジェクトを作成しましたが、特に複雑なことは何もありません。トリガーも、ストアド プロシージャも、追加の「データベース マジック」もありません。コードは C# で書かれており、Entity モデルと Dynamic Data Site を使用して基本をすばやくセットアップするだけなので、タイピング モンキーを動かして基本的なデータ エントリを実行しながら、プロジェクトをより成熟するように変更します。 .

SQL Server 2005 でテストしたところ、すべて正常に動作しました。そこで、Visual Studio を使用してセットアップを行い、それを入力中の Monkeys とその管理者に送信しました。1) 新しいデータベースを作成します。2) データベースの Create スクリプトを実行します。3) 私が提供したセットアップをインストールします。4) 便宜上、特別な構成ファイルに配置されている接続文字列を変更します。5) Web インターフェイスを使用して、問題が発生した場合は通知してください。

そして、何かがうまくいかなかった。この完全なエラー:行 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 例外、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 メソッド) +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.ObjectQuery 1.GetResults(Nullable1 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 引数、作成者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 システム。 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


このアプリケーションは、以前は SQL Server 2000 システム上に構築されていましたが、問題なく動作しました。ただし、テスト データベースは 2005 にアップグレードされましたが、本番データベースはまだ 2000 を使用しています。これで問題は発生しないはずですが、私の推測は正しいですか?

4

4 に答える 4

5

これは古いスレッドであることは知っていますが、それでもある程度の重要性があると思います。

私は同じ問題に遭遇しました。私はsql2008サーバーで開発し、sql2000サーバーにデプロイしていました。2000マシンで開発する代わりに、ワードパッドで.edmxファイルを開き、マニフェストトークンを「2000」に変更します。次に、再構築して公開します。別のマシンで開発するよりもはるかに簡単です。

于 2010-07-16T14:00:42.733 に答える
2

さて、簡単なテストをしました。プロジェクトを SQL Server 2000 データベースに接続し、データベースをインストールして、SQL スクリプトを実行しました。次に、再コンパイルせずに、自分のサイトを使用してこのデータベースに接続しましたが、失敗しました。同じエラーでした。

次に、テストの次の部分: プロジェクトのエンティティ モデルを更新し、プロジェクト全体を再コンパイルしました。まだ SQL Server 2000 に接続していたので、サイトを再開したところ、私の美しいサイトがありました。:-)

エンティティ モデル (および LINQ-TO-SQL) は、プロジェクトをコンパイルするときに使用するデータベースを検出します。2005 を使用すると、最終的なコードが 2005 用に最適化され、すべてを SQL Server 2000 にインストールできなくなります。

面倒なことですが、SQL Server 2000 マシンで開発を続ける必要があります。(そして、エンドユーザーと同様のシステムで私のセットアップをテストすることになっていたので、誰かのお尻を蹴ってください!)

于 2009-06-23T08:58:59.517 に答える
2

ROW_NUMBER()少なくとも SQL Server 2005/2008 では、Skip/などを実行するために使用されます。Take以前のバージョンの SQL Server をターゲットにしている場合、混乱する可能性があります。

LINQ-to-SQL は SQL 2000 をサポートする合理的な試みを行っています (ただし、すべてがサポートされているわけではありません)。正直なところ、EF がサポートしているかどうかはわかりません。

于 2009-06-23T07:58:23.790 に答える
2

例外を見ると、接続が SQL 2005 ではない SQL Server データベースを指しているようです。

ROW_NUMBER は SQL 2005 でサポートされています。

于 2009-06-23T07:58:45.443 に答える