【问题标题】:SQL Server cnnection error: Unhandled exceptionSQL Server 连接错误:未处理的异常
【发布时间】:2014-05-08 11:55:27
【问题描述】:

参考:Accessing database connection string using app.config in C# winform 我正在尝试将我的 C# file.cs 与 App.config 连接,但出现错误

未处理的异常 System.NullReferenceException:对象引用未设置为对象的实例

这就是我正在做的事情。

App.config

<appSettings>
    <add key="SQLConn" value="Data Source=dbw.xyz.abc.com(just an example);
       Initial catalog=database_name;Integrated Security=True;
       User ID=username;Password=password"/> 
</appSettings>

代码:

SqlConnection SQLConn = new SqlConnection();
SQLConn.ConnectionString = 
       ConfigurationManager.ConnectionStrings["SQLConn"].ConnectionString;
try
{
     SQLConn.Open();
}
catch (Exception e)
{
    Console.WriteLine("Program aborted: " + e);
}
finally
{
    if (SQLConn.State == ConnectionState.Open)
        SQLConn.Close();
}

【问题讨论】:

  • finally 块中的“conn”是什么?如果此代码编译,那么它可能是您的 NULL 引用异常的来源。没看到你在哪里设置的。你是说 SQLConn 吗?
  • 感谢您注意到这一点。是的,它是 SQLConn。我更改了它,但我仍然收到此错误。
  • 你应该用using 语句包装你的代码,à la: using (var con = new SqlConnection) { ... };见SqlConnection Class
  • 我用 var 语句尝试过,之前是 var SQLConn = ConfigurationManager.ConnectionStrings["SQLConn"].ConnectionString; 但是错误它没有成功

标签: c# sql-server ado.net unhandled-exception


【解决方案1】:

您是否意识到连接字符串和应用程序设置之间存在差异?两个不同的 API 来读取它们。您的代码读取连接字符串,应用配置定义应用设置。

错误就在这一行(和sql server完全无关,严重):

configurationManager.ConnectionStrings["SQLConn"].ConnectionString;`

第一部分

configurationManager.ConnectionStrings["SQLConn"]

不会返回连接字符串,因为您没有定义一个。您定义一个 AppSetting。

【讨论】:

    【解决方案2】:

    您的配置文件正在 appSettings 上添加连接字符串。有一个合适的地方放置connectionStrings,还指定providerName,作为示例:

    <connectionStrings>
       <clear/>
       <add name="SQLConn" 
            connectionString="Data Source=dbw.xyz.abc.com(just an example); Initial Catalog=database_name;Integrated Security=True; User ID=username;Password=password" 
            providerName="System.Data.SqlClient" /> 
    </connectionStrings>
    

    您可以使用ConfigurationManager 阅读它,例如:

    string connectionString = ConfigurationManager.ConnectionStrings["SQLConn"].ConnectionString;
    

    另一方面,您的代码在 AppSettings 上指定了一个值,这很好,但不适用于 connectionStrings。要从 AppSettings 读取一些密钥,请使用它:

    string sqlConn = ConfigurationManager.AppSettings["SQLConn"];
    

    【讨论】:

    • 它做到了,但它转到了我的catch (Exception e) { Console.WriteLine("Program aborted: " + e); }
    • 我也确实添加了string sqlConn = configurationManager.AppSettings["SQLConn"];
    • 您需要选择,connectionStrings 标签或appSettings。两者兼有是没有意义的。 ConfigurationManager 允许您访问它们,并保留您的 .config 文件的权限。
    • 我知道我尝试使用这两个选项,但它没有进入我的数据库表
    猜你喜欢
    • 2016-04-11
    • 2010-09-10
    • 1970-01-01
    • 1970-01-01
    • 2013-12-27
    • 2021-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多