VB.NETでDBへ再度接続できないエラーの対処方法は?

このQ&Aのポイント
  • VB.NETでDBへ再度接続しようとすると、「物理ファイルが開けません」というエラーメッセージが表示されることがあります。
  • このエラーメッセージは、過去の同じ名前のデータベースが存在している可能性や、指定したファイルが開けない可能性があります。
  • 解決するためには、データベースが存在する場所やファイルへのアクセス権限を確認し、必要ならば削除して再度アタッチを試みることが必要です。
回答を見る
  • ベストアンサー

VB.NETでDBへ再度接続したいのですが

Windows7 Home(64bit) Visual Basic 2010 Proで開発を行っています。 データベースのプログラム作成において、サーバーエクスプローラーよりSQL Server 2008 R2で作成したDBを接続してプログラミングしていましたが、諸事情により、DBファイルは別の場所に保存して、サーバーエクスプローラーで「削除」した後に、再度同じDBファイルにアタッチを試みると「物理ファイル "xxxx.mdf"を開けません。オペレーティングシステムエラー5:"5(アクセスが拒否されました。)ファイルxxxx.mdfの自動的に名前がつけられたデータベースをアタッチできませんでした。同じ名前のデータベースが既に存在するか、指定されたファイルを開けないか、UNC共有に配置されています」と表示され、接続できません。どこかに過去のDBの情報が記録されているのではないかと思うのですが、どのような対処をすれば再度同じDBへ接続できるでしょうか? 宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

普通は「デタッチ」→「ファイルの移動」→「アタッチ」ですから、削除の場合、余計なデータが残っているか、必要な情報が欠如している可能性はありますね。 削除前のフルバックアップデータがあれば、それを元の環境にもどしてアタッチかけてみるとか。

AGRESS
質問者

補足

早速のお返事ありがとうございます。 残念ながらバックアップ等は一切ありません。 >余計なデータが残っているか、必要な情報が欠如している可能性はありますね。 これが原因だと思うのですが、どう対処すれば良いのか、が一番知りたい情報です。

その他の回答 (1)

noname#212058
noname#212058
回答No.2

SQL Server 2008 R2 のサービス、もしくは OS を再起動してみてください。 おそらく、古いテンポラリファイルをサービスが掴んだままになっているせいで、新しいファイル用のテンポラリファイルが作れないんだと思います。

AGRESS
質問者

お礼

nora1962様、shitaba様、回答ありがとうございます。 結局、SQL Serverをサーバーより一旦アンインストールし、再インストールするという 強引(?)な手法でデータベースを接続し、クライアント側からも接続まで成功しました。 ということで、この質問に関しては一旦締め切らせて頂きます。 ただ、今度はプログラムからデータベースの内容が見えないという現象が発生しました。 この件に関して別件で質問をさせて頂きます。 ありがとうございました。

AGRESS
質問者

補足

SQL Server 2008 R2 のサービス、OSの再起動も試みましたが、全く変化なし状態です。

関連するQ&A

  • 作成したDBを使いたい

    SQL Server 2008 Express のマネジメントスタジオで簡単なデータベースとテーブルを作りました。それをVisual Basic 2008 Express で使うためにデータベースエクスプローラで表示させたいのですが表示されません。 なので接続の追加で直接mdfファイルを開こうとしてみると、 「オペレーティングシステムエラー32: プロセスはファイルにアクセスできません。別のプロセスが使用中です。アタッチできませんでした。同じ名前のデータベースが既に存在するか、指定されたファイルを開けないか、UNC 共有に配置されています。」 と表示されます。 初心者なので分かりやすく教えて欲しいです。 よろしくお願いしますm(__m)

  • SQL Server 2005(2008)とVB.netでのデータベース共有

    現在vb.net 2008 と SQL Server 2005を使ってアプリケーションを作成しています。 vbの方のソリューションエクスプローラーでデータベースを作成し、現在まで稼働させてきましたが、テーブル名の変更などができないなど不便な点が気になり、そろそろSQL Serverで管理したいと考えています。 そこでいろいろ試行錯誤してやってみたのですが、SQL Server側でアタッチしようとすると、ファイル(xxxxx.mdf)のパーミッションの関係で「アクセスが拒否されました」と出てしまいます。 そこでファイルのパーミッションをSQL Serverでもアクセスできるように変更したところ、その状態でアタッチもテーブル名の変更もできるのですが、今度はSQL Server側にパーミッションが変更されるようで、vbからアクセスできないようになってしまいました。 両者からアクセスできるようにするのはどうすればいいのでしょうか。 セキュリティの面もしっかりした状態で実現させたいと思っています。 現在の環境は以下の通りです。 SQL Server Express 2005 Visual Basic 2008 Professional (SQL Server 2005 Developmentも使えます) Windows Vista Ultimate (64bit) SQL Serverはwindows認証で使っていますが、不都合があればSQL Server認証に変更も可能です。

  • VB.NETからリモートSQLServer2000への接続

    サーバーエクスプローラ上で新しいデータ接続作成 をする際に、「接続のテスト」では成功するのですが、「OK」ボタンを押すと「データベースに接続できません。このバージョンのVisual Studioを…」と出てきて新しい接続を作れません。 データフォームウィザードでも同様の表示が出てきます。 回避する方法をご存知の方教えてください。 宜しくお願いします。

  • vb.netでmdfデータベースにアクセスするとき

    こんにちわ。 いまvb.net2005expressでsqlserver2005expressの mdfデータベースにアクセスするコーディングを書いています。 ところが最初のコネクションの確立のところで下記のような コーディングをしているのですが, 後続の"sqlDataAdapter.Fill(sqlDataSet, "MST_User")"の行で, データベースにログインできない,というエラーが出てしまいます。 'DB接続文字列の設定 sqlconn.ConnectionString = "Persist Security Info=False;Integrated Security=SSPI;Initial Catalog=Database1;server=(local)" sqlconn.ConnectionString = "Data Source=(local);Database=Database1;" _ & "Integrated Security=SSPI;" ※なおmdfデータベースのファイル名は"Database1.mdf"です。 なおデータベースエクスプローラで[接続の変更]を開いて接続しようと すると"正しく接続されました"となります。 プログラムでログインできない理由は何でしょうか? 教えてください。よろしくお願いします。

  • mdfファイルの残骸について

    Microsoft SQL Server 2005 Developer Editionを使用しています。 SQL Server Management Studio > オブジェクトエクスプローラ > データベース に使用中のDB一覧が表示されています。 エクスプローラでmdfファイルが保存されているフォルダを確認すると 上記にないデータベース名のmdfファイルがあります。 以前、作成して削除したDBのmdfファイルです。 質問です。 (1)オブジェクトエクスプローラに表示されず、mdfファイルが残っているのはどういう状況でしょうか。 私はいつもSQL Server Management Studioで削除したいDBを選択して、右クリック>削除でDBを削除していますが、 mdfファイルが残ることもあるのでしょうか。 (2)ファイルサイズが非常に大きいため、上記状態のmdfファイルを削除したいのですが、 エクスプローラ上から削除しても問題ないのでしょうか。 削除前に「このmdfファイルは現在使用されていない」ことを確認したいのですが、 どのような方法があるのでしょうか。 前任者からDB管理を引き継いだのですが、上記状態で困っています。 既に前任者はいないため、聞くことが出来ません。 よろしくお願いします。

  • SQL Server Management studioで

    SQL Server Management studioで 新しくデータベース(MyDatabase)、テーブル(NameTable)を作成してみたんですが、 Visual Web developer 2010 Express のデータベースエクスプローラから MyDatabase.mdfを開こうとしても「このファイルは使用されています。…」 というような文言が出てきて、呼び出せません。 Vista,SQL Server 2008,Visual Web developer 2010 Expressの環境です。 どなたか教えて下さい。

  • dbへの接続について

    dbへの接続について Visual Basic2008でVBを勉強中の者です。初心者です。 SQL serverと接続するやりかたを参考書を頼りにコーディングして接続などは問題ないのですが、 プロシージャごとに毎回DBへの接続文字列を指定して接続して、、とやっているのですが何か 無駄なことしている気がしてきました。(同じコードが各フォームの各プロシージャにあるので) DBサーバの情報が変わったときなどもコードを修正するのが大変だと思いました。 こういう場合、何かいい方法はありませんでしょうか?

  • SQL VC#でのDBアプリ作成方法について

    Visual C# 2010 Express(WPFアプリケーション)とSQL Server 2012 Expressでツール(データベースアプリケーション)を作成していますが,いまいち作り方を理解しておらず合っているのかわからないので,教えていただきたいです。 作成しているツールは会社の課内で使用します。 最終的には課内サーバーに保存してあるDBファイルに各社員のパソコンから作成したツール経由でDBへ読み書きします。ツールの開発は私のパソコンで行います。 課内サーバはWindowsServer2010でIPアドレスを仮に\\11.22.33.444とします。 各社員のパソコンはWin7でIPアドレスを仮に\\11.22.33.445とします。 なお本文では下記のように略して記載します。 SQL Server 2012 Express:sqlserver SQL Server Management Studio Express 2012:SSMS Visual C# 2010 Express:VC# ■私が行った作成手順 ※サーバで操作 (1)サーバにsqlserverとSSMSをインストール (2)KANAISQLという名前でインスタンスを作成。Windows認証。 (3)SSMSのセキュリティでログインユーザの中に自分のドメインユーザ名を登録 (4)SSMSで「E:\…DATA」の中に:データベースを作成(BOOKDB.mdf)。テーブル「BOOKInfo」を作成。ついでに1レコード作成。 (5)SSMSでBOOKDB.mdfをデタッチ (6)BOOKDB.mdfを「E:\…booksDB」にコピペ ※開発PCで操作 (7)パソコンにVC#,sqlserver,LocalDB,SSMSをインストール (8)SQLEXPRESSという名前でインスタンスを作成。Windows認証。 (9)VC#でWPFアプリケーションを新規作成 (10)[データ]メニューの[新しいデータ ソースの追加]→[データベース]→[データセット]→[\\11.22.33.444\…booksDB\BOOKDB.mdf]を指定→テスト接続を実行→接続OK →「ローカルにデータをコピーしますか?」といった画面で「OK」をクリック (11)データソースナビゲーションパネルから「BOOKInfo」をDataGridを指定してユーザーフォームにドラッグ&ドロップしてバインド。 (12)デバッグしてみる→正常にレコードが表示された。 (13)Datasetをデザイナーから編集でInsertクエリを作成 (14)ユーザフォームにボタンを追加してInsertクエリとUpdateクエリを実装 (15)デバッグとリビルドしてexeを実行してみる。→ツール上では正常に表示+テーブル追加された。 (16)DBファイルを確認してみた。開発PC内のデバッグフォルダリリースフォルダ内にある「BOOKDB.mdf」は更新されていた。 ※サーバで操作 (17)サーバの[E:\…booksDB\BOOKDB.mdf]が更新されているか確認してみた。 →更新されていない。(6)の時から変更なし。 ■わからないこと 1.ツールからサーバのDBへデータの変更を反映させるためにはどうしたらよいのでしょうか。 2.またツール完成後に各社員がこのツールを使用する場合は,全員sqlserverとLocalDBをパソコンにインストールしなければならないものなのでしょうか。 詳しい方ご教授御願いいたします。

  • VB2010 Dataset内のDB接続先変更

    VB2010のDatasetについてご質問があります。 Datasetにデータベースエクスプローラを使用してデータテーブルを作成し、Fillメソッドを使用してテーブルの参照を行っております。今回、サーバーの入れ替えを行うことになり、データベースの内容は全く変わらないのですが、コンピュータ名とIPアドレスが変更になるということで、今までのDatasetの接続先だけを変更するにはどうしたらいいのだ?で悩んでおります。 さらに、今回みたいなケースは今後もあると思うので、接続先文字列をいつでも変更できるようiniファイル等で外部から変更できるようにしたいと思っております。 ご教授よろしくお願い致します。

  • LDFとMDFの管理

    誤って物理的にLDF削除してしまった場合に、残っているMDFでなんとか再アタッチしてLDF作成したいのですが。 通常は、LDFが認識せず、アタッチ不可。 LDFファイルとMDFファイルの関連付けは、どのDBで管理されていますか?masterの中と思いますが。。。 この関連付けさえ、修正すればなんとか復旧可能になるものでしょうか?

専門家に質問してみよう