【问题标题】:Very simple C# program generates a `NullReferenceException was unhandled` error非常简单的 C# 程序生成一个 `NullReferenceException was unhandled` 错误
【发布时间】:2012-06-09 13:15:35
【问题描述】:

我有一个简单的 WinForm,我用它来帮助我处理 ADO.NET。 它有一个数据网格视图

我在名为experiment.sdf的项目中添加了一个紧凑的sql server 数据库

在 App.config 文件中,我添加了以下内容。我使用以前的项目应用程序文件作为此基础,所以这里可能有错误?:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
  <add name="DatabaseDGVexperiments.Properties.Settings.DatabaseDGVexperimentsConnStg"
      connectionString="Data Source=|DataDirectory|\experiment.sdf"
      providerName="Microsoft.SqlServerCe.Client.3.5" />
</connectionStrings>
</configuration>

我已经添加了对配置库的引用。

表单后面是以下代码:

  SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["DatabaseDGVexperimentsConnStg"].ConnectionString);

当它到达SqlConnection conn = ... 行时,我收到错误NullReferenceException was unhandled。我该如何解决这个问题?

【问题讨论】:

  • 确保ConfigurationManager.ConnectionStrings["DatabaseDGVexperimentsConnStg"].ConnectionString 不为空。
  • 您调用空引用的.ConnectionStringConfigurationManager.ConnectionStrings["DatabaseDGVexperimentsConnStg"] 不返回对象。指定的字符串与 web.config 中的字符串不匹配

标签: c# winforms configuration datagridview


【解决方案1】:

改变这个:

name="DatabaseDGVexperiments.Properties.Settings.DatabaseDGVexperimentsConnStg"

到:

name="DatabaseDGVexperimentsConnStg"

或改变这个:

ConfigurationManager.ConnectionStrings["DatabaseDGVexperimentsConnStg"]

到:

ConfigurationManager.ConnectionStrings["DatabaseDGVexperiments.Properties.Settings.DatabaseDGVexperimentsConnStg"]

【讨论】:

  • 我更改了配置文件。现在它在myAdapt.Fill... 上出现错误,带有SQLException was Unhandled;建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。
  • sdf 文件在同一个项目中!为什么会出现连接困难?
  • @whytheq:您需要 SQL CE 类才能使用 SqlServerCe 提供程序。将SqlConnection改为SqlCeConnection,以此类推。
  • 那是一种享受;我还必须将 SELECT * FROM experiment.dbo.helloworld 更改为 SELECT * FROM helloworld 才能使代码正常工作 - 为什么?
  • @whytheq:因为没有数据库和用户(xx.xx.xx 表示法的前两部分),SQL CE 文件是单个数据库,你没有指定用户当你连接到它时。
【解决方案2】:
ConfigurationManager.ConnectionStrings["DatabaseDGVexperiments.Properties.Settings.DatabaseDGVexperimentsConnStg"].ConnectionString

请注意,您需要将名称命名为

DatabaseDGVexperiments.Properties.Settings.DatabaseDGVexperimentsConnStg

不像

DatabaseDGVexperimentsConnStg

编辑:

您需要使用SqlCeConnectionSqlCeDataAdapter 来处理SqlServerCe 数据库,添加对System.Data.SqlServerCe 的引用,然后代码应如下所示。

using (var conn = new SqlCeConnection(ConfigurationManager.ConnectionStrings["DatabaseDGVexperiments.Properties.Settings.DatabaseDGVexperimentsConnStg"].ConnectionString))
{
    conn.Open();
    using (var myAdapt = new SqlCeDataAdapter("SELECT * FROM experiment.dbo.helloworld", conn))
    {
        DataSet mySet = new DataSet();
        myAdapt.Fill(mySet, "AvailableValues");
        DataTable myTable = mySet.Tables["AvailableValues"];
        this.uxExperimentDGV.DataSource = myTable;
    }
}

【讨论】:

  • 谢谢。我更改了配置文件。现在它在myAdapt.Fill... 线上出错,带有SQLException was Unhandled; A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections.
  • 感谢 Damith - using 是一种避免持久性数据库活动的方法?
  • Using 语句处理处置对象。您不需要从代码中执行此操作。
【解决方案3】:

您在代码中使用了与在 web.config 中不同的键值。字符串需要完全匹配。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-13
    • 2018-04-28
    • 1970-01-01
    相关资源
    最近更新 更多