2017-06-27 8 views
0

AppDataフォルダに格納されているローカルデータベースを使用するアプリケーションを作成します。データベースが存在する場合、それはチェックし、アプリケーションの各開始時データベースファイルが削除された場合、C#DataContext CreateDatabaseが機能しない

private NorthWindDataContext northWindDataContext = new NorthWindDataContext(connectionString); 

:私は、データを取得するためにDataContextを作成しました。それが存在していない場合は、データベースを作成する必要があります。

DB: 
if (!northWindDataContext.DatabaseExists()) 
{ 
    try 
    { 
     northWindDataContext.CreateDatabase(); 
    } 
    catch (Exception ex1) 
    { 
     try 
     { 
      northWindDataContext.DeleteDatabase(); 
     } 
     catch (Exception ex2) 
     { 

     } 
    } 
    goto DB; 
} 

をこれが正常に動作しますが、私はディレクトリ内のファイルを削除し、再度アプリケーションを起動した場合、私はそれがCreateDatabaseを使用してデータベースを作成するときに、以下のExeceptionを取得します:

"データベース 'C:\ Users \ me \ AppData \ Local \ Test \ Northwind.mdf'は既に存在します。別のデータベース名を選択してください。

CreateDatabase -methodが失敗した場合、それはDeleteDatabaseを使用して(実際には存在しない)データベースを削除する必要があります。ここでは、アプリケーションによってスローされた例外はありません。次に、データベースを再度作成しようとする必要があります。今度はアプリケーションがCreateDatabaseにExeceptionをスローしませんが、作成されたデータベースファイルではありません。

これは、データベースファイルがユーザーによって削除された場合、アプリケーションの起動時に発生するため、何が間違っているのか、または何か不足していることがありますか?

+0

データベースを追加/削除するには、AttachとDeAttachを使用する必要があります。 – jdweng

+0

'DataContext'クラスには' Attach'や 'DeAttach'などのメソッドはありません。 – daniel59

答えて

0

デフォルトでは、データコンテキストはlocaldbのインスタンスを使用しています...データベースファイル(.mdf)を削除すると、データベースがlocaldbのこのインスタンスにもう存在しないことを意味するわけではありません。すべてのMDFファイルを削除し、サーバー

select * from sys.databases 

のマスターデータベースをキシにすることにより、データベースが既にファイルを削除した後でも存在していることを見つけることを確認し、uが作成しようとした場合のウルは、データベースの終了のエラーを取得する理由のthatsデータベースおそらく条件!northWindDataContext.DatabaseExists()が満たされませんlocaldbがdbをまだ持っていると思うので

SQL Server Management Studioを開き、そこからデータベースを削除しようとしましたが、ファイルが見つかりませんでした。この時点でlocaldbはデータベースが削除され、オブジェクトエクスプローラとsys.databasesビューから削除されていることに気付きました

+0

ファイルが存在しない場合、データベースを自動的に削除する必要があります。 C#でこれを行う簡単な方法はありますか? – daniel59

関連する問題