質問を書いているときに理解したのに、これを投稿したかった。以下に回答を掲載します。
VSコード分析で次の警告が表示されます。
警告CA2213'DBConn 'には、IDisposableタイプのフィールド' DBConn.k__BackingField 'が含まれています:' SqlConnection '。 'DBConn'のDisposeメソッドを変更して、このフィールドでDisposeまたはCloseを呼び出します。
しかし、私のコードdoes DBConnプロパティでDispose()を呼び出します。バッキングフィールドではありませんか?私はこのような他のインスタンスを持っています-コンパイラがこの警告をスローしない場所を処分しています。これは以下のコードです:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
namespace TheProgramSpace
{
public sealed class DBConn : IDisposable
{
// class containing the database and its connection
public SqlConnection TheConn { get; }
public string DbPath { get; }
public string DbName { get; }
public DBConn(ProgInstance FPI)
{
// constructs new SQLConnection
DbPath = FPI.dbPath;
DbName = FPI.dbName;
string connString = "Data Source = " + DbPath + "; Initial Catalog =" + DbName + "; Integrated Security = True; "
+ "Connect Timeout = 30; Encrypt = False; TrustServerCertificate = False; "
+ "ApplicationIntent = ReadWrite; MultiSubnetFailover = False";
TheConn = new SqlConnection(connString);
}
public void Dispose()
{
TheConn.Dispose();
}
}
}
その理由は、TheConn
には、set
アクセサーがなかったため、読み取り専用であったためです。プロパティ宣言をに変更する
public SqlConnection TheConn { get; private set; }
問題を解決しました。