0

Visual Studio 2010 および SQL Server 2008 で C# を使用してアプリケーションを開発しました。私のアプリケーションは、アプリケーションの起動Form_Loadイベントでウィンドウが起動したときに表示される通知プログラムのようなもので、次のように SQL データベースに接続します。

da = new SqlDataAdapter("select info_id,info_text,cat_id from info " + cat, a.GetConnectionStringByName());
SqlCommandBuilder br = new SqlCommandBuilder(da);
ds = new DataSet();
da.Fill(ds, "em");
richTextBox1.Text = "";
txt = "";
DataRow dr = GetRow();
if (dr != null)
{
    richTextBox1.Text = dr["info_text"].ToString();
    txt = richTextBox1.Text;
} 

これが私の接続文字列です

<add name="Info_Bank_Project.Properties.Settings.KBankConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\KBank.mdf;Integrated Security=True;User Instance=True" providerName="System.Data.SqlClient" /> 

システムの起動時にアプリケーションが起動時に実行されると、次のような例外が発生しconnection timed out ます。その例外の理由とその解決方法について誰か考えがありますか?

4

2 に答える 2

2

.\SQLEXPRESS をソースとする SQL 接続文字列は見たことがありません。私はそれがlocalhostを指していると思いますか?Windows の起動時にこれを実行している場合、このアプリが起動する前に SQL が起動し、そのポートでリッスンしていることを確認できますか? Icarus が言及しているように、時間がかかりすぎると SQL がタイムアウトする (デフォルトは 15 秒) ため、接続文字列 (接続文字列 MSDN ) の [接続タイムアウト] フィールドで変更できます。私の意見では、接続の前にロジックを追加することをお勧めします。続行する前に、何かが SQL ポートでリッスンしているかどうかを確認しようとします。

In C#, how to check if a TCP port is available?の一番の答えは? C# でこれを行う方法を示しています。VB に変換するのはかなり簡単です。これをループに入れて、たとえば 3 秒間スリープし、ポートが使用されるまで (つまり、この例の逆)、最大 20 回 (1 分間) まで、またはあきらめる前に必要なだけ再試行します。

于 2012-08-25T00:34:36.620 に答える
2

データベースへの接続を確立しようとすると接続タイムアウトが発生し、データベースは15 秒以内に応答しません(デフォルト値)。

このような問題が発生した場合は、データベース サーバーが接続をリッスンしていないか、接続文字列が間違っている可能性があります。

于 2012-08-24T23:41:58.553 に答える