2017-09-07 2 views
0

VSTO Excelツールがあり、データソースとしてSQL LocalDBを使用しています。データベースとの接続は、Entity Framework 6.1.3を介して行われます。私はまた、データを表示するためにDataGridを持つWPFフォームを持っています。エンドユーザーのコンピュータにSQL Server LocalDBを展開する

すべてが開発用コンピュータで完全に機能しますが、InstallShield LEを使用してこのツールを展開しようとすると、インストールが正常に完了すると、エラーメッセージなしでWPFデータベースフォームが空になります。数回の試行の後、最終的には、テストコンピュータの1台でデータベースを実行することができました。しかし、私は別のものにインストールしようとしましたが、もう一度空のフォームがあり、データベースとの接続はありません。

インストールがうまくいくことがありますが、ときどきそうでない場合もありますので、コードやインストールプログラムに問題はないと思います。それは他のものでなければなりません。

LocalDBは、データベースへの呼び出しがあるときにのみプロセスとして起動し、その直後に自動的にシャットダウンします。私は比較的新しいデータベースですが、おそらくLocalDBサービスを開始して初めて接続しようとすると時間がかかり、接続が失敗する原因になる可能性があります。

問題は次のとおりです。タイムアウトが接続エラーの原因になる可能性はありますか?はいの場合、このタイムアウトをどのように増やすことができますか? LocalDBインストールの問題を避けるために何をすべきですか?

私はこのツールの開発に多くの時間を費やしましたが、今は公開できません。どんな助けでも本当に感謝しています。ありがとうございました!

答えて

1

LocalDBを使用する私のアプリにも同様の問題がありました。あなたのInstallShieldパッケージはLocalDBエンジンを確実にインストールするものとします。それ以外の場合は、対応するMSMパッケージを要件の1つとして追加します。

はい、LocalDBは、誰かが接続しようとすると自動的に起動します。最初に明示的に起動してSQL接続を確立することはできますが、実際には必要ないことがわかりました。

タイムアウトは接続タイムアウトであり、これはSqlConnectionStringBuilder.ConnectTimeoutプロパティの十分大きな値を設定することで軽減できます。私の場合、顧客の中には非常に遅いHDDを搭載した古いラップトップがあったため、インスタンスを回転させるのにしばらく時間がかかりました。しかし、ほとんどの人にとっては120秒で十分でした。もちろん

、あなたは常にすなわち

sqllocaldb.exe s "InstanceName" 

のようなプロセスを生成し、その完了を待ち、代替パスを選択することができます。最終的には、より信頼できるかもしれません。

+0

ありがとうございますが、私のケースが違うようです。私は運がないConnectTimeoutとCommandTimeoutを増やしました。データベースは、特定のフォルダにインストールした場合にのみ表示されます。どういうわけか私はこのフォルダを "成功"に早くすることができました。同じコンピュータ上のインストールフォルダを変更した場合、または他のコンピュータでこの "成功"フォルダを使用した場合は、動作しません。 多分私は何かを欠いている? LocalDBとの接続を確立するために、インストール後に具体的な作業を行う必要がありますか? – v31

+0

接続文字列を表示してください。実際、LocalDBに固有のオプションがいくつかあります。 –

0

以下は私のApp.configで、Connect Timeoutを3000に増やして、これが問題ではないことを確認しています。

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <connectionStrings> 
    <add name="MDBEntities1" connectionString="metadata=res://*/MDBModel.csdl|res://*/MDBModel.ssdl|res://*/MDBModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=(LocalDB)\MSSQLLocalDB;attachdbfilename=|DataDirectory|\MapDatabase.mdf;integrated security=True;connect timeout=3000;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
    </connectionStrings> 
    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" /> 
    </startup> 
</configuration> 

また、Entity Frameworkコンストラクタでコマンドタイムアウトを増やしました。私はデータベースとの接続が既にこのコード行の前に行われていることに気づいています。

public MDBEntities1() : base("name=MDBEntities1") 
{ 
    Database.CommandTimeout = 30000; 
} 

私にとっては奇妙なことは、接続が特定のフォルダで確立された後、私はアプリをアンインストールした後でも、フォルダを削除し、再度インストール、このフォルダには問題がないということです。

私がフォルダを変更した場合、データベースは空になります。MDFファイルをLocalDBに手動で接続してから削除してから、アプリケーションをインストールする必要があります。この場合、新しいインストールフォルダは、最初のフォルダと同様に正常に動作します。しかし、私は各ユーザーのコンピュータでこれを行うことはできません。インストール中にLocalDBにデータベースを追加させる方法はわかりません。

私の用語が正しくない場合は申し訳ありませんが、私はデータベースに関する豊富な経験がありません。私が使用していた以前のバージョンはSQL Server Compactであり、これらの問題は一度もありませんでした。

関連する問題