0

私はこのようなXMLファイルを持っています

     <?xml version="1.0" encoding="utf-8" ?> 
 <conStr>
  <server>192.168.1.25;</server> 
  <initial_catalog>chargdb;</initial_catalog> 
  <uid>sa;</uid> 
  <pwd>1;</pwd> 
  </conStr>

そして私はこのファイルからデータをフェッチするためにこのコードを使用しています:

        XmlDocument xd = new XmlDocument();
        xd.Load(Application.StartupPath + @"\cng.xml");
        string conStr = string.Empty;
        conStr += "server=";
        conStr +=xd.DocumentElement.ChildNodes[0].Attributes["server"].Value;
        conStr += "initial catalog=";
        conStr += xd.DocumentElement.ChildNodes[0].Attributes["initial_catalog"].Value;
        conStr += "uid=";
        conStr += xd.DocumentElement.ChildNodes[0].Attributes["uid"].Value;
        conStr += "pwd=";
        conStr += xd.DocumentElement.ChildNodes[0].Attributes["pwd"].Value;
        MessageBox.Show(conStr);

しかし、毎回次のようなエラーメッセージが表示されます:「オブジェクト参照がオブジェクトのインスタンスに設定されていません。」私を助けてください、私は私のファイルを読むために何ができますか?ありがとう

4

3 に答える 3

3

既存のコードは、要素内の属性を探しています。ルート要素<server>内の要素を探す必要があるため、これは機能しません。

2 つの変更を行います。

  • LINQ to XML を使用して値をフェッチする
  • SqlConnectionStringBuilder文字列の代わりに使用して接続文字列を作成します

だから、このようなもの:

XDocument doc = XDocument.Load(...);
var root = doc.Root;
var builder = new SqlConnectionStringBuilder
{
    DataSource = root.Element("server").Value,
    InitialCatalog = root.Element("initial_catalog").Value,
    UserID = root.Element("uid").Value,
    Password = root.Element("pwd").Value
};
var connectionString = builder.ToString();
于 2012-09-18T12:51:39.660 に答える
2

xd.DocumentElement.ChildNodes[0]要素を指し<conStr>ます。あなたはそれが子供であるのを見る必要があります。

XPathを使用してドキュメントをナビゲートすることを検討してください。

于 2012-09-18T12:31:07.287 に答える
1

あなたの質問に適切に答えるために、Jakub の意味は次のとおりです。

        string conStr = string.Empty; 
        conStr += "server=";
        conStr += xd.DocumentElement.SelectSingleNode("./server").InnerText;
        conStr += "initial catalog=";
        conStr += xd.DocumentElement.SelectSingleNode("./initial_catalog").InnerText;
        conStr += "uid=";
        conStr += xd.DocumentElement.SelectSingleNode("./uid").InnerText; 
        conStr += "pwd=";
        conStr += xd.DocumentElement.SelectSingleNode("./pwd").InnerText; 

        MessageBox.Show(conStr); 

Jakub のレコードでは、xd.DocumentElement.ChildNodes[0] がルート要素 (「conStr」) です...

于 2012-09-18T12:43:15.760 に答える