0

このコードで次のようなエラーが発生します:オブジェクト参照がオブジェクトのインスタンスに設定されていません

Private Sub frmAdd_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    con.ConnectionString = strcon

    con.Open()

con.ConnectionString = strcon

このエラーを修正するにはどうすればよいですか?

4

2 に答える 2

3

これは、nullの変数を使用していることを意味します(オブジェクトのインスタンスを指すように設定されていません)。この場合、conはnullである必要があるため、nullかどうかを確認し、nullの場合は、新しいオブジェクトに設定する必要があります。例えば:

If con Is Nothing Then
    con = New OleDbConnection()  ' Or whatever type it is...
End If
con.ConnectionString = strcon
con.Open()

または、さらに良いことに、変数を宣言するときに新しいオブジェクトに設定するだけです。適切な場合は、次のようになります。

Dim conn As New OleDbConnection()

ただし、Timが指摘したように、必要になるたびに新しい接続を作成するのが最善です。そうすれば、Using毎回オブジェクトを適切に破棄するブロックを使用できます。

Using con As New OleDbConnection(strcon)
    con.Open()
    ' Use the connection ...
End Using
于 2012-11-19T11:44:18.370 に答える
2

接続がまだ初期化されていないため、このエラーが発生すると思います。Usingただし、フィールドを使用する代わりに、ローカル変数を作成することをお勧めします。これは、 -statementを使用して、常にできるだけ早く接続を閉じる必要があるためです。したがって、グローバルではなく、必要な場所に接続を作成します。

したがって、これで修正されます(ただし、お勧めしません)。

Private Sub frmAdd_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    con = new SqlConnection(strcon)
    con.Open() ' <-- don't do that with connection pooling
于 2012-11-19T11:45:40.617 に答える