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
上記のフォルダに必要なアクセス許可を与えたため、「または指定されたファイルを開くことができません」という問題にはなりません。このフォーラムで同じエラーに関連するすべての投稿を見ると、明らかにこのエラーの深さを知ることができます。しかし、解決策はどれも私の問題を解決しません。私が試したリソースのいくつかは次のとおりです。
私は解決策を待ち望んでいます。
私もこの問題を抱えていて、それは苦痛でした。接続文字列を構成し、問題を解決できました。接続文字列で、値DataDirectory |\dbfilename.mdfをAttachDbFilenameプロパティに、ファイルへのパスに置き換えました。 | DataDirectory |データベースファイルが同じプロジェクト内のApp_Dataフォルダーにある場合にのみ使用できます。
AttachDbFilenameプロパティをmdfファイルの直接パスに変更すると、問題が修正されました。
AttachDbFilename = C:\ MyApp\App\DAL\db.mdf
これがお役に立てば幸いです。
以下のように接続文字列を作成してみてください。
<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"/>
それは私のために働いています。
同様のエラーが発生しましたが、構成ファイルではなくコードで構成された接続を使用しました。私にとっての解決策は、単に「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ファイルへのフルパスであり、まだ存在する必要はありません。
<add name="Connections" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;User Instance=True" providerName="System.Data.SqlClient"/>
.NetでWebアプリを開発する際の最も厄介なエラーの1つ。 1年前に行っていたプロジェクトでこの問題が発生しました。これは私のために働いたものです:私はsaアカウントでSQL Management Studioにログインし、オブジェクトエクスプローラにデータベースを添付しました(データベース->右クリック->添付)。次に、[セキュリティ]-> [ログイン]-> [myWindowsUsername]を開き、[ユーザーマッピング]タブを編集して、接続されたデータベースにdbowner権限を付与します。
Management Studioを使用せずにコンソールコマンドを使用してこれらの操作を実行できると確信していますが、T-SQLについてはあまり得意ではないため、アドバイスはできません。
web-configファイルを確認してください。同じ名前の接続文字列が複数ある場合があります
私はEFのコードファーストプロジェクトであり、ファイルが削除されると起動します。ランニング Update-Database
Package ManagerコンソールからDBを作成し、それで問題ありません。
ほとんどの場合、単体テストプロジェクトはメインプロジェクトから分離されています。これにより、dbがソリューションに対してローカルである場合、app_dataフォルダーが見つからないため、生成された接続文字列が無効になります。
| DataDirectory |を置き換えることができます単体テストプロジェクトから接続する必要がある場合は、メインプロジェクトのdbへの相対パスを使用します。
問題を解決するために私がこれまでに見つけたのは、以下の方法でmdfファイルを作成すると、Visual Studioでうまく機能することです。
サーバーExplorarのデータ接続を右クリック->接続の追加-> Microsoft SQL Serverデータベースファイルの選択、データベース名の選択、OKの選択。その後、この問題は発生しません。ビデオをフォローしてください: youtubeリンク
EFでも同じ問題がありました。絶対パスソリューションが機能しました。しかし、プログラムを新しい場所に移動したい場合、それは素晴らしい解決策ではありません。私にとってこれが問題でした。
.mdf
プロジェクトフォルダー内のファイル、VSが2つのファイルを同期する場合があります.mdf
ファイルはデバッグに同期されませんでした私の回避策:
.mdf
および.ldf
ファイルを一時フォルダーに.mdf
ファイルをプロジェクトフォルダーに入れ、受け入れます.mdf
ファイルは、デバッグフォルダーにも表示されます。接続文字列でデータベースのパスを確認してください。同じエラーメッセージが表示され、後で問題のパスが間違っていることがわかりました。
これを変更するとエラーが修正されました
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:パーティションを作成しましたが、問題は解決しました。
理由は、データベースディレクトリに、同じ名前の.mdfファイルが含まれているからだと思います。そのため、AttachDbFilenameを置き換えることができる完全なパスを指定することが最善です。データベースファイルのフルパスを取得し、app.configファイルにあるAttachDbFilenameに割り当てるだけです。
私は自分のアプリケーションで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を含めて、そのプロパティを使用します。コピーを出力ディレクトリに設定します。
アプリのインストール中に、インストールファイルをプログラムファイルからCディレクトリに変更しました。その後、私の問題は解決されます
これを試して、それは私のために働く
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);
}
同じプロジェクト内のフォルダーにdbを移動した後、同様の問題が発生しました。
最後に、データベースのプロパティに移動し、「identity」の下にリストされたパスをコピーし、「AttachDbFilename =」のパスを置き換えるだけでした。
うまくいきました。