web-dev-qa-db-ja.com

ファイル.... database1.mdfの自動名前付きデータベースをアタッチしようとして失敗しました

Visual Studio 2010 Webサイトのデバッグ中に次のエラーが表示されます。

ファイルC:\ Users ...\Desktop\Dpp2012New\App_Data\dppdatabase.mdfの自動名前付きデータベースをアタッチしようとして失敗しました。同じ名前のデータベースが存在するか、指定されたファイルを開けないか、UNC共有にあります。

説明:現在のWeb要求の実行中に未処理の例外が発生しました。エラーの詳細およびコードのどこで発生したかについては、スタックトレースを確認してください。

例外の詳細:System.Data.SqlClient.SqlException:ファイルC:\ Users ...\Desktop\Dpp2012New\App_Data\dppdatabase.mdfの自動名前付きデータベースをアタッチしようとして失敗しました。同じ名前のデータベースが存在するか、指定されたファイルを開けないか、UNC共有にあります。

web.configからの接続文字列は次のとおりです。

<connectionStrings>
    <add name="ApplicationServices" 
         connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true" 
         providerName="System.Data.SqlClient"/>
    <add name="ConnectionString" 
         connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\dppdatabase.mdf;Integrated Security=SSPI" 
         providerName="System.Data.SqlClient"/>
</connectionStrings>

そして、私は私のウェブサイトから次のようにアクセスします:

Dim connectionString As String = ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString

スタックトレースには、エラー行が次のように表示されます。

 Dim conn As New SqlConnection(connectionString)
 Dim dr As SqlDataReader
 conn.Open() 'This is the error line as per stacktrace

上記のフォルダに必要なアクセス許可を与えたため、「または指定されたファイルを開くことができません」という問題にはなりません。このフォーラムで同じエラーに関連するすべての投稿を見ると、明らかにこのエラーの深さを知ることができます。しかし、解決策はどれも私の問題を解決しません。私が試したリソースのいくつかは次のとおりです。

  1. http://weblogs.asp.net/scottgu/archive/2005/08/25/423703.aspx
  2. http://blogs.msdn.com/b/webdevelopertips/archive/2010/05/06/tip-106-did-you-know-how-to-create-the-aspnetdb-mdf-file。 aspx
  3. http://forums.asp.net/t/1033225.aspx

私は解決策を待ち望んでいます。

27
rahulserver

私もこの問題を抱えていて、それは苦痛でした。接続文字列を構成し、問題を解決できました。接続文字列で、値DataDirectory |\dbfilename.mdfAttachDbFilenameプロパティに、ファイルへのパスに置き換えました。 | DataDirectory |データベースファイルが同じプロジェクト内のApp_Dataフォルダーにある場合にのみ使用できます。

AttachDbFilenameプロパティをmdfファイルの直接パスに変更すると、問題が修正されました。

AttachDbFilename = C:\ MyApp\App\DAL\db.mdf

これがお役に立てば幸いです。

27
ray abu

以下のように接続文字列を作成してみてください。

 <add name="ECommerce" connectionString="Data Source=(localdb)\v11.0;Initial Catalog=C:\USERS\dL\DESKTOP\DATABASE\MYSHOP.MDF;Integrated Security=True;Connect Timeout=15;Encrypt=False;TrustServerCertificate=False" providerName="System.Data.SqlClient"/>

それは私のために働いています。

8
user3198801

同様のエラーが発生しましたが、構成ファイルではなくコードで構成された接続を使用しました。私にとっての解決策は、単に「Initial Catalog = MyDatabase」部分を追加することでした。私のコードは次のようになります...

DbConnection connection = new SqlConnection(String.Format(@"Data Source=.\SQLEXPRESS; Integrated Security=SSPI; AttachDbFilename={0}; User Instance=True; Initial Catalog=IPDatabase;", Location));

場所はmdbファイルへのフルパスであり、まだ存在する必要はありません。

4
flobadob
<add name="Connections" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;User Instance=True" providerName="System.Data.SqlClient"/>
4
Radha

.NetでWebアプリを開発する際の最も厄介なエラーの1つ。 1年前に行っていたプロジェクトでこの問題が発生しました。これは私のために働いたものです:私はsaアカウントでSQL Management Studioにログインし、オブジェクトエクスプローラにデータベースを添付しました(データベース->右クリック->添付)。次に、[セキュリティ]-> [ログイン]-> [myWindowsUsername]を開き、[ユーザーマッピング]タブを編集して、接続されたデータベースにdbowner権限を付与します。

Management Studioを使用せずにコンソールコマンドを使用してこれらの操作を実行できると確信していますが、T-SQLについてはあまり得意ではないため、アドバイスはできません。

3
george.zakaryan

web-configファイルを確認してください。同じ名前の接続文字列が複数ある場合があります

1
Ravindra Bagale

私はEFのコードファーストプロジェクトであり、ファイルが削除されると起動します。ランニング Update-Database Package ManagerコンソールからDBを作成し、それで問題ありません。

1
Luke Puplett

ほとんどの場合、単体テストプロジェクトはメインプロジェクトから分離されています。これにより、dbがソリューションに対してローカルである場合、app_dataフォルダーが見つからないため、生成された接続文字列が無効になります。

| DataDirectory |を置き換えることができます単体テストプロジェクトから接続する必要がある場合は、メインプロジェクトのdbへの相対パスを使用します。

0
Vishav Premlall

問題を解決するために私がこれまでに見つけたのは、以下の方法でmdfファイルを作成すると、Visual Studioでうまく機能することです。

サーバーExplorarのデータ接続を右クリック->接続の追加-> Microsoft SQL Serverデータベースファイルの選択、データベース名の選択、OKの選択。その後、この問題は発生しません。ビデオをフォローしてください: youtubeリンク

0
Md. Rafee

EFでも同じ問題がありました。絶対パスソリューションが機能しました。しかし、プログラムを新しい場所に移動したい場合、それは素晴らしい解決策ではありません。私にとってこれが問題でした。

  1. VSは、デバッグフォルダー内のmdfファイルを検索します
  2. .mdfプロジェクトフォルダー内のファイル、VSが2つのファイルを同期する場合があります
  3. 何らかの理由で.mdfファイルはデバッグに同期されませんでした

私の回避策:

  1. .mdfおよび.ldfファイルを一時フォルダーに
  2. Vs/server Explorerで接続します
  3. ADO.Netを追加するとき、新しい接続を使用します
  4. VSは.mdfファイルをプロジェクトフォルダーに入れ、受け入れます
  5. .mdfファイルは、デバッグフォルダーにも表示されます。
  6. Tempフォルダーの接続を削除し、プロジェクトフォルダーに新しい接続を作成します
0
Istvan Heckl

接続文字列でデータベースのパスを確認してください。同じエラーメッセージが表示され、後で問題のパスが間違っていることがわかりました。

0
Albert M

これを変更するとエラーが修正されました

ConfigurationManager.ConnectionStrings[0].ConnectionString

これに

ConfigurationManager.ConnectionStrings["myconnection"].ConnectionString

これには多くの原因があるように見えます...ここは私のものでした。

手がかりはエラーメッセージの最後の行にありました...

System.Data.SqlClient.SqlException: 'ファイルQ:\ Folder\FileName.mdfの自動名前付きデータベースのアタッチに失敗しました。同じ名前のデータベースが存在するか、指定されたファイルを開けないか、UNC共有にあります。

...or it is located on UNC share.

実稼働環境を複製しようとして...元々物理ドライブQ:がありました。開発用マシンがタンクに入った後、再構築して、マップされたドライブを作成しました。このエラーの取得を開始しました...そして戻って別のQ:パーティションを作成しましたが、問題は解決しました。

0
Chris Catignani

理由は、データベースディレクトリに、同じ名前の.mdfファイルが含まれているからだと思います。そのため、AttachDbFilenameを置き換えることができる完全なパスを指定することが最善です。データベースファイルのフルパスを取得し、app.configファイルにあるAttachDbFilenameに割り当てるだけです。

0
dilantha111

私は自分のアプリケーションでmdfの移植性を試してきたので、

    public DbContext IoDatabase()
    {
        var directory = System.IO.Directory.GetCurrentDirectory();
        var connectionString = @"Data Source=(localdb)\mssqllocaldb;AttachDbFilename=" + directory + "\\App_Data\\ITIS.mdf;Integrated Security=True;Connect Timeout=30;";
       return  new NerdDinners(connectionString);
    }

nerdDinnersでは、どこで見つけたか思い出せません

public class NerdDinners : DbContext
{
    public NerdDinners(string connString)
    {
        Database.Connection.ConnectionString = connString;
    }
}

その後、戻り値の型をDbContextとして使用できます。

私が遭遇した主なことは、GetCurrentDirectory()がプロジェクトファイルパスではなくコンパイルされたファイルパスを取得することでしたので、展開をGetCurrentDirectoryに設定し、実際のApp_Dataを参照せずにmdfをコンパイル時にコピーする必要があります。プロジェクトにmdfを含めて、そのプロパティを使用します。コピーを出力ディレクトリに設定します。

0
Stephen Himes

アプリのインストール中に、インストールファイルをプログラムファイルからCディレクトリに変更しました。その後、私の問題は解決されます

0
smoothumut

これを試して、それは私のために働く

try {
    String ConnectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\App_Data\Test.mdf;Integrated Security=True;Connect Timeout=15;Encrypt=False;TrustServerCertificate=True";
    SqlConnection connection = new SqlConnection(ConnectionString);
    connection.Open();
    MessageBox.Show("Connection is opened.!!");
    connection.Close();
} catch(Exception ex)
{
    MessageBox.Show(ex.Message);
}
0
AMMAR ELHAMDO

同じプロジェクト内のフォルダーにdbを移動した後、同様の問題が発生しました。

最後に、データベースのプロパティに移動し、「identity」の下にリストされたパスをコピーし、「AttachDbFilename =」のパスを置き換えるだけでした。

うまくいきました。

0
J Maine