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

当您尝试建立与数据库的连接并且数据库在 15 秒内没有响应(默认值)时发生连接超时。

如果您遇到此类问题,是因为您的数据库服务器可能没有在侦听连接,或者您的连接字符串错误。

于 2012-08-24T23:41:58.553 回答
2

我还没有看到以 .\SQLEXPRESS 作为源的 SQL 连接字符串。我猜它指向本地主机?如果您在 Windows 启动时运行此程序,您确定 SQL 已启动并在此应用程序启动之前侦听其端口吗?正如 Icarus 提到的,如果 SQL 花费的时间太长(默认 15 秒),您可以使用连接字符串(连接字符串 MSDN )中的 Connection Timeout 字段更改它。我认为更好的方法是在连接之前添加一些逻辑尝试在继续之前检查是否有东西正在侦听 SQL 端口。

在 C# 中,如何检查 TCP 端口是否可用的最佳答案?展示了如何在 C# 中执行此操作,将其转换为 VB 应该相当简单。您只需将其放在一个循环中,该循环会休眠 3 秒并再次尝试,直到端口被使用(因此与此示例相反)最多 20 次(1 分钟)或您想要放弃之前的任意时间。

于 2012-08-25T00:34:36.620 回答