5

ここ数日、Entity Framework を使用して C# アプリケーション (Visual Studio 2010 Express を使用) を SQL Server 2008 R2 データベースに接続する方法を最終的に研究していましたが、完全に行き詰まりました。

VS で新しい DataSource を追加したい場合、db ファイルのパスを見つけるだけで、最終的にそれを見つけて選択しようとすると、次のエラーがスローされます。

このファイルは既に使用されています。別のアプリケーションで使用されている新しい名前を入力するか、そのファイルを閉じます

データベース ファイルを 2 日間使用していなかったので、それはナンセンスに思えます。そのため、少しグーグルで調べた後、最終的に解決策を見つけ、SQL Server Configuration Manager に入り、唯一の SQL Server を再起動しました。

その後、私の DataSource 接続がついに機能し、今では無敵であり、一日の終わりまでコードを書くつもりだと思っていましたが、数分後に別の問題が発生しました:O (私がここに書いている理由)。

VS アプリケーションで SQL Server の一部を使用すると、 SQL Server が動作しなくなります。そこのデータベースを参照できません。何も変更できません。クエリも使用できません。何もできません。このデータベースは既に使用されていることがわかります。

逆にやっても同じです。

SQL Server 構成マネージャーを使用して SQL Server を再起動し (SQL Server を再び使用できるようにするため)、たとえば、DB クエリ タスクを使用しますSELECT * FROM nameDatabase

次に、SQL Server がいくつかの名前を入力する必要があるコンボボックスがある C# アプリケーションをデバッグしようとしましたが、SQL Server にアクセスできないというエラーが表示されました。(正確なエラーは今は言えませんが、グーグルで調べたところ、SQL Server にアクセスできないことを意味していることがわかりました)。

誰かがそのコードを見たい場合は、次のとおりです。

using (var entities = new PropertyDatabaseEntities())
{
    var userNames = entities.Login
                .Select(login => login.Username)
                .ToArray();

    comboboxLogin.Items.Clear();
    comboboxLogin.Items.AddRange(userNames);
}

しかし、SQL Server を再起動して、SQL Server から何かを使用する前にこのデバッグを有効にすると、機能します。

一部の人々は、接続を閉じていないと言っていましたが、SQL Server を最初に使用しても、VS と SQL Server 間の接続を使用できないため、そうではありません。

私は本当に立ち往生しています。

*接続文字列

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
  </configSections>
  <connectionStrings><add name="Final.Properties.Settings.PropertyDatabaseConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=&quot;C:\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\PropertyDatabase.mdf&quot;;Integrated Security=True;Connect Timeout=30;User Instance=True" providerName="System.Data.SqlClient" /><add name="LoginEntities" connectionString="metadata=res://*/DataAccess.LoginModel.csdl|res://*/DataAccess.LoginModel.ssdl|res://*/DataAccess.LoginModel.msl;provider=System.Data.SqlClient;provider connection string='Data Source=.\SQLEXPRESS;AttachDbFilename=&quot;C:\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\Login.mdf&quot;;Integrated Security=True;Connect Timeout=30;User Instance=True;MultipleActiveResultSets=True'" providerName="System.Data.EntityClient" /><add name="PropertyEntities" connectionString="metadata=res://*/DataAccess.PropertyModel.csdl|res://*/DataAccess.PropertyModel.ssdl|res://*/DataAccess.PropertyModel.msl;provider=System.Data.SqlClient;provider connection string='Data Source=.\SQLEXPRESS;AttachDbFilename=&quot;C:\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\Property.mdf&quot;;Integrated Security=True;Connect Timeout=30;User Instance=True;MultipleActiveResultSets=True'" providerName="System.Data.EntityClient" /><add name="PropertyDatabaseEntities" connectionString="metadata=res://*/DataAccess.PropertyDatabaseModel.csdl|res://*/DataAccess.PropertyDatabaseModel.ssdl|res://*/DataAccess.PropertyDatabaseModel.msl;provider=System.Data.SqlClient;provider connection string='Data Source=.\SQLEXPRESS;AttachDbFilename=&quot;C:\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\PropertyDatabase.mdf&quot;;Integrated Security=True;Connect Timeout=30;User Instance=True;MultipleActiveResultSets=True'" providerName="System.Data.EntityClient" /></connectionStrings>
</configuration>
4

2 に答える 2

2

AttachDBFilename は、SQL Express に固有です。Database は単に使用するデータベースの名前であり、追加の意味はありません。運用サーバーでは、AttachDBFilename を使用しない可能性が最も高いでしょう。シングルユーザーモードでの開発と実験に非常に役立ちます。

本番サーバーで data source=.\SQLEXPRESS を変更し、接続文字列から attachdbfilename セクションを削除する必要がありました

それがあなたを助けることを願っています。

于 2012-09-06T13:43:18.253 に答える
1

接続文字列でファイル名/パスの代わりに論理名を使用してみてください。「 AttachDbFileName =」機能は SQL Server EXPRESS エディション用だと思います。ただし、少なくとも本番環境では推奨されておらず、接続を確立するための推奨される方法ではありません。

ファイル名とパスの代わりに

Data Source=.\SQLEXPRESS;AttachDbFilename=&quot;C:\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\PropertyDatabase.mdf&quot

論理名を試す

サーバー=localhost\SQLEXPR5;データベース=あなたのデータベース; ユーザー ID = sa;パスワード =;

www.connectionstrings.comをご覧ください。

于 2012-06-17T16:42:40.957 に答える