数据库连接错误 - 第一次机会异常

时间:2015-05-29 23:36:44

标签: c# .net ado.net sqlconnection sqlclient

我在VS2013中有以下用于数据库连接的C#代码,当我运行时,我收到以下错误消息,我该如何解决它。

private void Form1_Load(object sender, EventArgs e)
{
    //using (SqlConnection conn = new SqlConnection())
    //{
    try
    {
        //con = new System.Data.SqlServerCe.SqlCeConnection();
        conn = new System.Data.SqlClient.SqlConnection();
        conn.ConnectionString = "Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\\vs2013projects\\WFDBApp\\WFDBApp\\Dbapp.mdf;Integrated Security=True";
        conn.Open();
        MessageBox.Show("Openned database well");
        conn.Close();
    }
    catch
    {
        MessageBox.Show("failed to connect");
        //conn.Close();
    }
    //}
}

错误消息:

  

' WFDBApp.vshost.exe' (CLR v4.0.30319:WFDBApp.vshost.exe):已加载   ' C:\ vs2013projects \ WFDBApp \ WFDBApp \ BIN \调试\ WFDBApp.exe&#39 ;.符号   加载。 ' WFDBApp.vshost.exe' (CLR v4.0.30319:WFDBApp.vshost.exe):   加载   ' C:\ Windows \ Microsoft.Net \组件\ GAC_32 \ System.Transactions的\ v4.0_4.0.0.0__b77a5c561934e089 \ System.Transactions.dll&#39 ;.   跳过加载符号。模块已优化并具有调试器选项   ' Just My Code'已启用。 ' WFDBApp.vshost.exe' (CLR v4.0.30319:   WFDBApp.vshost.exe):已加载   ' C:\ Windows \ Microsoft.Net \组件\ GAC_32 \的System.EnterpriseServices \ v4.0_4.0.0.0__b03f5f7f11d50a3a \ System.EnterpriseServices.dll&#39 ;.   跳过加载符号。模块已优化并具有调试器选项   ' Just My Code'已启用。 ' WFDBApp.vshost.exe' (CLR v4.0.30319:   WFDBApp.vshost.exe):已加载   ' C:\ Windows \ Microsoft.Net \组件\ GAC_32 \的System.EnterpriseServices \ v4.0_4.0.0.0__b03f5f7f11d50a3a \ System.EnterpriseServices.Wrapper.dll&#39 ;.   跳过加载符号。模块已优化并具有调试器选项   ' Just My Code'已启用。

     

类型的第一次机会异常   ' System.Data.SqlClient.SqlException'发生在System.Data.dll中   线程0x1788已退出代码259(0x103)。线程0x1428有   退出代码259(0x103)。该程序' [7048] WFDBApp.vshost.exe'   已退出代码0(0x0)。

1 个答案:

答案 0 :(得分:0)

错误很可能是由错误的连接字符串引起的。 SQL Server Express文件的连接字符串有几个规范样本。mdf(参见MSDN pub:https://msdn.microsoft.com/en-us/library/jj653752%28v=vs.110%29.aspx):

使用localDB语法:

<add name="ConnectionStringName"
    providerName="System.Data.SqlClient"
    connectionString="Data Source=(LocalDB)\v11.0;AttachDbFileName=|DataDirectory|\DatabaseFileName.mdf;InitialCatalog=DatabaseName;Integrated Security=True;MultipleActiveResultSets=True" />

<add name="ConnectionStringName"
    providerName="System.Data.SqlClient"
    connectionString="Server=(LocalDB)\v11.0;Initial File Name=|DataDirectory|\DatabaseFileName.mdf;Database=DatabaseName;Trusted_Connection=True;MultipleActiveResultSets=True" />

其他可能的选项如下所示:

<add name="ConnectionStringName"
    providerName="System.Data.SqlClient"
    connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=DatabaseName;Integrated Security=True;MultipleActiveResultSets=True"/>

<add name="ConnectionStringName"
    providerName="System.Data.SqlClient"
    connectionString="Data Source=.\SQLEXPRESS;AttachDbFileName=|DataDirectory|\DatabaseFileName.mdf;Integrated Security=True;User Instance=True;MultipleActiveResultSets=True" />

选择与您的案例相关的一个,并确保使用正确的语法。

另外,请记住,Database(基于文件的SQL Express DatabaseFileName.mdf)可以受密码保护:如果是,那么您必须将此信息包含在连接字符串中(通常这样的连接字符串存储在.config文件用于安全目的)。在后面的常规代码中,您应该使用以@开头的逐字字符串(代替双反斜杠“\\”)。

希望这可能会有所帮助。最好的问候,