winforms 对象引用未设置为对象的示例,- App.config

xjreopfe  于 2023-02-24  发布在  其他
关注(0)|答案(6)|浏览(195)

我收到错误,在本地窗口中看到conSettings和connectionString值均为null。我说ConfigurationManager为null是正确的,我需要创建一个新对象。可能我正在使用Access,也可能我在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>

窗体. 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();
        }
    }

有人建议我使用App. config。
VS 2010 C# MS访问2003

更新1我的应用程序配置现在如下所示...

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

我现在收到错误...“配置系统初始化失败”。我现在正在谷歌上查看它。

更新2已尝试...

<configuration>
 <connectionStrings>
<add name="MyDBConnectionString" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data   
        Source=E:\...\Database1.mdb"/>
  </connectionStrings>
 </configuration>

再次Google搜索时收到“对象引用未设置为对象示例”错误

更新3

<configuration>
<connectionStrings>
    <clear />
    <add name="MyDBConnectionString"
     providerName="System.Data.OleDb" connectionString="Provider=Microsoft.Jet.OLEDB.4.0; Source=\Database1.mdb" />
</connectionStrings>

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

结论

也许VS 2010和Access 2003之间有一个技术上的小故障。这次我不会使用App.config。我知道SQL Server不会有问题。所以我就不管了。谢谢Damith和克林特抽出时间。

1tu0hz3e

1tu0hz3e1#

您需要按如下所示读取AppSettings密钥,

string connectionString = 
      ConfigurationSettings.AppSettings["MyDBConnectionString"];

您仍然收到空值,请尝试以下步骤
1.在解决方案资源管理器中选择App.config文件
1.在属性窗口中,选择“复制到输出目录”以始终复制。
1.现在生成应用程序并重试。
要访问如下所示,您需要在应用程序配置中添加connectionStrings节

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

示例应用程序配置

<?xml version="1.0"?>
<configuration>
  <connectionStrings>
    <add name="MyDBConnectionString" 
    connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data 
               Source=E:\...\Database1.mdb"/>
  </connectionStrings>
</configuration>
aiazj4mn

aiazj4mn2#

检查你是否已经把app.config文件放在你的启动项目下了。在我的例子中,我只需要把app.config文件放在我的启动项目下,问题就解决了。

l7wslrjt

l7wslrjt3#

我在类库中遇到过这种情况,控制台应用程序设置为运行调试。
有必要在控制台应用程序中添加到app.config的连接,因为如果您从外部进程启动它,它将不会在您的库中找到它。

nhhxz33t

nhhxz33t4#

这一点:

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

是你的问题。
您正在访问ConfigurationManager.ConnectionStrings以获取配置项,但在App.Config文件中,您将其放在appSettings下,这与ConnectionStrings不在同一配置文件部分
您可以将连接字符串放入app.config的相关ConnectionStrings部分(可通过ConfigurationManager.ConnectionStrings访问),也可以通过appSettings部分访问它。
参见:
http://msdn.microsoft.com/en-us/library/ms254494(v=vs.80).aspx
有关存储连接字符串的MSDN准则。

hjzp0vay

hjzp0vay5#

我也面临着同样的问题,即使在多次仔细检查app.config文件和我的代码错误,但我没有发现任何错误,在我的代码.最终我发现了一个愚蠢的错误,我的编译器默认采用的应用程序配置文件名为'app1.config',当我把它改为'app.config'一切都很好地为我工作.
希望能有所帮助。

gajydyqb

gajydyqb6#

当我通过****项目-〉添加-〉新项... -〉应用程序配置文件将app.config文件添加到旧的,一个很小的C#库,最初是用.NET Framework 4. 5编写的,后来更新到4. 7. 2。经过多次尝试,我决定将配置文件作为XML文件加载。如果所有其他方法都失败,您可以考虑使用此变通方法。

应用程序设置

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <connectionStrings>
        <add name="MyDBConnectionString"
         providerName="System.Data.OleDb" connectionString="Provider=Microsoft.Jet.OLEDB.4.0; Source=\Database1.mdb" />
    </connectionStrings>
</configuration>

代码隐藏

using System;
using System.IO;
using System.Reflection;
using System.Xml;

XmlDocument doc = new XmlDocument();
string path = Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath) + "\\YourProjectName.exe.config";
doc.Load(path);

XmlNode node = doc.SelectSingleNode("//connectionStrings");
XmlElement value = (XmlElement)node.SelectSingleNode("//add[@name='MyDBConnectionString']");

string connectionString = value.Attributes["connectionString"].Value;

效果应类似于:

string connectionString = ConfigurationManager.ConnectionStrings["MyDBConnectionString"].ToString();
OR
string connectionString = ConfigurationManager.ConnectionStrings["MyDBConnectionString"].ConnectionString;

希望有人会觉得这个有用。

相关问题