Я пытаюсь запустить команду из этого класса:
Imports System.Data.OleDb
Imports System.IO
Public Class GestionSql
Private sReturn As String = ""
Private sConection As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" +Directory.GetCurrentDirectory() + "\TPV.mdb;"
Private oConection As OleDb Connection
Public oCommand As New OleDbCommand
Public Function Launch(ByVal value As String) As String
Try
oConection.Open()
oConection = New OleDbConnection(sConection)
oCommand.CommandText = Value
sReturn = oCommand.ExecuteNonQuery()
oConection.Close()
MessageBox.Show("La contraseña es: " + sReturn.ToString)
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
Return sReturn
End Function
End Class
В этом классе:
Public Class IDVendedor
Private GestionSql As New GestionSql
Private sCmd As String
Private sPass As String
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'Montamos y lanzamos el comando
sCmd = "SELECT Password FROM Vendedores WHERE Id=" + id.Text
sPass = GestionSql.Launch(sCmd)
End Sub
End Class
Я получаю сообщение об ошибке:
В экземпляре объекта не задана ссылка на объект. Мне говорит, что ошибка в ExecuteNonQuery в параметре sCmd.
Ошибка
Referencia a objeto no establecida como instancia de un objeto
будет сопровождать вас долгие годы в мире программирования, но вскоре вы привыкнете сразу знать, где ошибка :)Что означает это сообщение?
Вы читаете свойство или выполняете функцию из объектной переменной ("ссылка на объект"), которая не была инициализирована ("не установлена в экземпляр объекта"). То есть вы объявили переменную и использовали ее без предварительного присвоения ей значения.
Ошибка появляется в строке 15 вашего захвата, потому что вы поменяли местами инициализацию переменной
oConexion
(строка 16) и первое использование (строка 15):Чтобы решить, вам просто нужно инициализировать переменную
oConexion
перед открытием соединения:В коде, который я вижу, вы пытаетесь использовать oConnection перед его инициализацией, теоретически ваша проблема может быть решена путем изменения этого:
Для этого:
Объяснение:
oConection
это то же самоеnull
, что бытьnull
или не быть инициализированным, вы не можете получить доступ к его методам или атрибутам, поэтому перед вызовом.open()
вам нужно присвоить ему значение при использовании=new
создать новый экземпляр этого объекта, и именно так вы избегаете объекта не ошибка инициализирована .Я вижу, что вам нужно инициализировать oConnection, но вам нужно будет проверить его, проверить изображение, чтобы увидеть, может ли оно вам помочь.
В итоге решил следующим образом: