キーワードはサポートされていないデータソース


82

デフォルトのメンバーシップデータベースを備えたasp.net-mvcアプリケーションがあります。ADO.NET EntityFrameworkからアクセスしています。

今度はIISに移動したいのですが、いくつか問題が発生しました。SQL Server Management Studioをインストールし、新しいDBを作成し、以前の.MDFファイルからすべてのデータをインポートする必要がありました。(私が知る限り)あとは接続文字列に変更するだけです。しかし、私はこれについて実際に経験しておらず、サポートされていないキーワード「データソース」を取得し続けています。例外。これが私の接続文字列です:

<add name="ASPNETDBEntities" 
     connectionString="Data Source=MONTGOMERY-DEV\SQLEXPRESS;Initial Catalog=ASPNETDB;Integrated Security=True;" 
     providerName="System.Data.EntityClient" />

何かアイデア、何が問題なのですか?


間違ったスタートアッププロジェクトを選択したためにVSが接続文字列を見つけることができなかったときに、このエラーが発生しました。app.configを使用したスタートアッププロジェクトが選択されていることを確認します。
wnbates

回答:


147

あなたが持っているのは有効なADO.NET接続文字列です-しかしそれはそうではありません

EF接続文字列は次のようになります。

<connectionStrings> 
  <add name="NorthwindEntities" connectionString=
     "metadata=.\Northwind.csdl|.\Northwind.ssdl|.\Northwind.msl;
      provider=System.Data.SqlClient;
      provider connection string=&quot;Data Source=SERVER\SQL2000;Initial Catalog=Northwind;Integrated Security=True;MultipleActiveResultSets=False&quot;" 
      providerName="System.Data.EntityClient" /> 
</connectionStrings>

EF接続文字列のすべての要素metadata=providerName=要素が欠落しています......基本的には、provider connection stringパーツに含まれているものだけがあります。

EDMXデザイナを使用すると、web.configまたはapp.configに有効なEF接続文字列を作成する必要があります。

マーク

更新:わかりました。あなたがやろうとしていることを理解しました。ASP.NETユーザー/メンバーシップデータベース専用の2番目の「ADO.NET」接続文字列が必要です。文字列は問題ありませんが、providerNameが間違っています-「System.Data.SqlClient」である必要があります-この接続はENTity Frameworkを使用しません-その場合は「EntityClient」を指定しないでください!

<add name="ASPNETMembership" 
     connectionString="Data Source=MONTGOMERY-DEV\SQLEXPRESS;Initial Catalog=ASPNETDB;Integrated Security=True;" 
     providerName="System.Data.SqlClient" />

providerName=System.Data.EntityClient==> Entity Framework接続文字列(metadata =およびすべてを含む)を指定した場合。

必要に応じて、すべてのEFを追加せずにproviderName=System.Data.SqlClient==>ストレートADO.NET SQLServer接続文字列を指定します


実際にはそうなりましたが、物理ファイル「C:\ OVSS \ Stavicky \ trunk \ Stavicky \ App_Data \ aspnetdb.mdf」を開くことができませんという例外が発生します。オペレーティングシステムエラー5:「5(このエラーのテキストを取得できませんでした。理由:15105)」。ファイルC:\ OVSS \ Stavicky \ trunk \ Stavicky \ App_Data \ aspnetdb.mdfの自動名前付きデータベースをアタッチしようとして失敗しました。同じ名前のデータベースが存在するか、指定されたファイルを開くことができないか、UNC共有にあります。いくつかの情報源から、これは間違っていると思いました。とにかくありがとう。
Trimack 2009

2番目の接続文字列の問題を理解できません。デザイナーが生成したものをそこに置いて、あなたが書いたASPNETMembershipを追加する必要がありますか?
Trimack 2009

EDMXデザイナにエンティティがある場合は、「EntityClient」とEF接続文字列を使用してエンティティにアクセスする必要があります。「すぐに使用できる」ASP.NETメンバーシップシステムを使用する場合、それはEFモデルの一部ではないため、ASP.NETメンバーシップデータベースの接続文字列を作成するときに、「EntityClient」をとして使用することはできません。プロバイダー-SqlClientを使用します。
marc_s 2009

そうです-あなたは両方を必要とする-あなたのEDMXシステムがあなたのために生成されたEFの接続文字列、PLUS秒1 -通常のADO.NET接続文字列- ASP.NETメンバーシップシステムのために。
marc_s 2009

1
投稿に対して100回目の賛成票を投じました。メリークリスマス:)
RBT 2016

7

この問題は、web.config(またはapp.config)接続文字列をインデックスで参照するときに発生する可能性があります。

var con = ConfigurationManager.ConnectionStrings[0].ConnectionString;

ゼロベースの接続文字列は、デフォルトでスタックの上位から他の文字列を継承するため、構成ファイル内の接続文字列であるとは限りません。

推奨されるアプローチは、名前で接続にアクセスすることです...

var con = ConfigurationManager.ConnectionStrings["MyConnection"].ConnectionString;

または、最初に設定ファイルのconnnectionStrings要素をクリアします。

<connectionStrings>
    <clear/>
    <add name="MyConnection" connectionString="...

2

私は同じ問題を抱えていました。
しかし、このコードはうまく機能します。試してみてください。

<add name="MyCon" connectionString="Server=****;initial catalog=PortalDb;user id=**;password=**;MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" />

0

Entity Frameworkを使い始めたときにこの問題が発生しました。これは、古いSQLサーバー接続をEntityFrameWork接続に変更しなかったときに発生しました。

解決策:web.configファイル "add name =" Entities "connectionString = XYZ"を介して接続が行われるファイルで、正しい接続を参照していることを確認してください。私の場合は、これを行う必要がありました。

        public static string MyEntityFrameworkConnection
    {
        get
        {
             return ConfigurationManager.ConnectionStrings["Entities"].ConnectionString;
        }

    }

接続を確立する必要があるときはいつでもMyEntityFrameworkConnectionを呼び出します。

private string strConnection= Library.DataAccessLayer.DBfile.AdoSomething.MyEntityFrameworkConnection;

注:エンティティモデルをソリューションに追加すると、web.configファイルの接続が自動的に生成されます。


0

私はこれが古い投稿であることを知っていますが、最近同じエラーが発生したので、その価値について、別の解決策があります:

これは通常、接続文字列エラーです。接続文字列の形式を確認してください。「エンティティフレームワーク接続文字列」を検索するか、上記の提案に従ってください。

ただし、私の場合、接続文字列は問題なく、エラーはまったく異なるものが原因で発生したため、これが誰かに役立つことを願っています。

  1. 最初にEDMXエラーが発生しましたEDMXに新しいデータベーステーブルがあり、そのテーブルがデータベースに存在しませんでした(面白いことに、エラーはEDMXまたは出力ウィンドウに表示されなかったため、あまり明白ではありませんでした)。 VisualStudioの「警告」の下にある「エラーリスト」ウィンドウに隠れていました。不足しているテーブルをデータベースに追加することで、このエラーを解決しました。しかし、私は実際にストアドプロシージャを追加しようとして忙しく、それでも「データソース」エラーが発生するので、以下の解決方法を参照してください。

  2. ストアドプロシージャエラーストアドプロシージャを追加しようとしましたが、EDMXデザインウィンドウを介して追加するたびに、「データソース」エラーが発生しました。解決策は、ストアドプロシージャを空白として追加することでした(ストアドプロシージャの名前と宣言は保持しましたが、ストアドプロシージャの内容を削除し、「select 1」に置き換えて、EDMXへの追加を再試行しました)。機能した!おそらくEFは、ストアドプロシージャ内の何かが気に入らなかったのでしょう。プロシージャをEFに追加すると、データベース上のプロシージャの内容を希望どおりに更新でき、動作し、「データソース」エラーが解決しました。

奇妙さ


0

同じエラーが発生した後、接続文字列を次のように更新しました。

<add name="EmployeeContext" connectionString="data source=*****;initial catalog=EmployeeDB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />

これを試してみてください。問題は解決します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.