3

app.config ファイルから C# コードへの接続文字列を呼び出そうとしています。これは app.config コードです:

<?xml version="1.0" encoding="utf-8" ?>
  <configuration>
 <appSettings>

<add key="connectstring" value="Data Source=server111;Initial Catalog=database1;        Integrated Security=False;Persist Security Info=False; User ID=username;Password=password;Encrypt=True; TrustServerCertificate=True; MultipleActiveResultSets=True"/>

 </appSettings>
</configuration>

これは C# コードです。

  private SqlConnection connStudent;  
  connStudent = new SqlConnection(ConfigurationManager.AppSettings["connectstring"].ToString());
  connStudent.Open();

コードは正しいはずですが、Null 参照例外が発生しています。プログラムのデバッグ中、connStudent は常に null で、接続文字列を取得できません。エラーは「オブジェクト参照がオブジェクトのインスタンスに設定されていません」です。

4

2 に答える 2

3

.NET 2.0 以降を使用している場合は、次を使用します。

<connectionStrings>
<add name="myConnectionString" connectionString="server=localhost;database=myDb;uid=myUser;password=myPass;" />
</connectionStrings>

その後

string connStr = ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString;
于 2012-05-24T05:14:10.787 に答える
0

あなたのコードは大丈夫です。copy to output directoryプロパティがcopy alwaysまたはに設定されていることを確認してくださいcopy if newer。それでもうまくいかない場合は、一時objファイルを削除してみてください。

次のテスト コードは正常に動作します。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="connectstring" value="Data Source=server111;Initial Catalog=database1;        Integrated Security=False;Persist Security Info=False; User ID=username;Password=password;Encrypt=True; TrustServerCertificate=True; MultipleActiveResultSets=True"/>
  </appSettings>
</configuration>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Configuration;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                SqlConnection connStudent;
                connStudent = new SqlConnection(ConfigurationManager.AppSettings["connectstring"].ToString());
                //connStudent.Open();
                //connStudent.Close();
                Console.WriteLine("ok");
            }
            catch
            {
                Console.WriteLine("error");
            }
        }

    }
}
于 2012-05-24T05:29:03.670 に答える