你调用的对象是空的. - App.config

buc*_*ast 5 c# ms-access winforms

我收到错误,在本地窗口中我看到conSettings和connectionString值为null.我说ConfigurationManager为null是正确的,我需要创建一个新对象.也许我正在使用Access,也许我在App.config文件中遗漏了一些东西.请有人帮我解决这个问题.提前致谢.

App.config文件......

   <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
    <appSettings>
       <add key="MyDBConnectionString" value="Provider=Microsoft.Jet.OLEDB.4.0;Data 
                   Source=E:\...\Database1.mdb"/>
    </appSettings>
    </configuration>
Run Code Online (Sandbox Code Playgroud)

Form.cs文件......

 private void btnShow_Click(object sender, EventArgs e)
    {
        ConnectionStringSettings conSettings = ConfigurationManager.ConnectionStrings["MyDBConnectionString"];

        string connectionString = ConfigurationManager.ConnectionStrings["MyDBConnectionString"].ConnectionString; // error points here

        try
        {
            con = new OleDbConnection(connectionString);
            con.Open();
            cmd = new OleDbCommand("SELECT * FROM Table1", con);
            objReader = cmd.ExecuteReader();
            while (objReader.Read())
            {
                txtID.Text = ds.Tables[0].Rows[rno][0].ToString();
                CBAgeGroup.Text = ds.Tables[0].Rows[rno][1].ToString();
                CBGender.Text = ds.Tables[0].Rows[rno][2].ToString();
                CBCrimOffen.Text = ds.Tables[0].Rows[rno][3].ToString();
                if (ds.Tables[0].Rows[rno][4] != System.DBNull.Value)
                {
                    photo_aray = (byte[])ds.Tables[0].Rows[rno][4];
                    MemoryStream ms = new MemoryStream(photo_aray);
                   pictureBox1.Image = Image.FromStream(ms);
                }
                txtCV.Text = ds.Tables[0].Rows[rno][5].ToString();
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        finally
        {
            con.Close();
        }
    }
Run Code Online (Sandbox Code Playgroud)

我被建议使用App.config.

VS 2010 C#MS Access 2003

更新1 我的App.config现在看起来像这样......

<configuration>
    <ConnectionString>
        <add key="MyDBConnectionString"   value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Raj\Education\C_Sharp\Test1\Database1.mdb"/>
    </ConnectionString>
Run Code Online (Sandbox Code Playgroud)

我现在收到错误..."配置系统无法初始化".我现在正在Google上看它.

更新2 尝试...

<configuration>
 <connectionStrings>
<add name="MyDBConnectionString" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data   
        Source=E:\...\Database1.mdb"/>
  </connectionStrings>
 </configuration>
Run Code Online (Sandbox Code Playgroud)

接收"对象引用未设置为对象实例"的错误再次使用Google搜索

更新3

<configuration>
<connectionStrings>
    <clear />
    <add name="MyDBConnectionString"
     providerName="System.Data.OleDb" connectionString="Provider=Microsoft.Jet.OLEDB.4.0; Source=\Database1.mdb" />
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)

随着更新3我收到错误相同的错误.我已经包含了添加参考系统.配置和我使用System.Configuration引用;

结论

也许它可能在VS 2010和Access 2003之间存在技术故障.我这次不会使用App.config.我知道SQL Server没有问题.所以我会留下它.感谢Damith和Clint的时间.

Dam*_*ith 9

你需要阅读AppSettings键,如下所示,

string connectionString = 
      ConfigurationSettings.AppSettings["MyDBConnectionString"];
Run Code Online (Sandbox Code Playgroud)

仍然你收到空值,尝试以下步骤

  1. 在解决方案资源管理器中选择App.Config文件
  2. 在属性窗口中,选择复制到输出目录以始终复制.
  3. 现在构建应用程序并再试一次.

要访问如下所示,您需要在app config中添加connectionStrings部分

  string connectionString = 
      ConfigurationManager.ConnectionStrings["MyDBConnectionString"].ConnectionString; // error points here
Run Code Online (Sandbox Code Playgroud)

示例应用配置

<?xml version="1.0"?>
<configuration>
  <connectionStrings>
    <add name="MyDBConnectionString" 
    connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data 
               Source=E:\...\Database1.mdb"/>
  </connectionStrings>
</configuration>
Run Code Online (Sandbox Code Playgroud)


小智 8

检查是否已将app.config文件放在启动项目下.在我的情况下,我只需将app.config文件放在我的启动项目下,问题就解决了.