в vb.net ошибка Текст команды не был задан для объекта command

#vb.net #text #command #command-objects

#vb.net #текст #команда #команда-объекты

Вопрос:

У меня есть программа в vb.net где мне нужны данные, вставленные в базу данных. Когда я запускаю этот код, я получаю сообщение об ошибке:

Текст команды не был задан для объекта command

Вот код, который у меня есть:

 Private Sub InsertRelease(strRelease As String, rowInserted As Boolean)
    On Error GoTo errH

    Dim con As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim strPath As String
    Dim intImportRow As Integer
    Dim objType As String
    Dim strUsername, strPassword, strTable, strDatabase, strDsn, strSystem, strNewSql, sqlStr As String
    Dim intRecsAffected As Integer
    Dim boolRowInserted As Boolean

    strDsn = ComboBox1.Text
    strSystem = txtSystem.Text
    strUsername = txtUser.Text
    strPassword = txtPassword.Text

    If con.State <> 1 And strUsername <> "" And strPassword <> "" Then
         con.Open("{iSeries As ODBC Driver};System="   strSystem   ";Dsn="   strDsn   "; Uid="   strUsername   "; Pwd="   strPassword   ";")
    Else
        MessageBox.Show("Please enter the correct UserName And Password")
        txtUser.Focus()
        con = Nothing
    End If
    sqlStr = "insert into jobscopedb.ppusrfs (search_key_uf,DATA_ITEM_UF, NUMERIC_VALUE_UF) values (strRelease,'81 AB',0);"
    strNewSql = ""

    con.Execute(strNewSql, intRecsAffected)
    con.Close()
    con = Nothing
    boolRowInserted = (intRecsAffected > 0)
    If (boolRowInserted) Then
        MessageBox.Show("Release "   strRelease   " added")
    Else
        MessageBox.Show("Release "   strRelease   "not added")
    End If
    Exit Sub
errH:
    MsgBox(Err.Description)
    con = Nothing

End Sub
 

Комментарии:

1. Вы вызываете strNewSql = "" , но ваш sql находится в строке sqlstr.

2. Вы также должны параметризовать свои запросы

3. Можем ли мы иметь представление о том, какую базу данных вы используете? ADODB заменен на ADO.net .

4. strNewSql = "" con.Execute(strNewSql, intRecsAffected) Я думаю, вы запрашиваете выполнение пустой строки.

5. Когда я обновил кон. Выполнить (sqlStr, intRecsAffected) Я получаю эту ошибку: Ошибка [HYT00] [IBM] [System i Доступ к драйверу ODBC] Время ожидания входа в систему истекло. Базой данных является DB2

Ответ №1:

Ниже показано, как может выглядеть ваш код с использованием ADO.net .

Передайте строку подключения непосредственно конструктору соединения и передайте текст команды и соединение конструктору команды. Откройте соединение и выполните команду. ExecuteNonQuery возвращает затронутые строки.

Всегда используйте параметры, чтобы избежать внедрения sql.

 Private Sub InsertRelease(strRelease As String)
    Dim intRecsAffected As Integer
    Dim strDsn = ComboBox1.Text
    Dim strSystem = txtSystem.Text
    Dim strUsername = txtUser.Text
    Dim strPassword = txtPassword.Text
    'Validate Input
    If strUsername = "" OrElse strPassword = "" Then
        MessageBox.Show("Please enter the correct UserName And Password")
        txtUser.Focus()
        Exit Sub
    End If

    Using con As New OdbcConnection($"{{iSeries As ODBC Driver}};System={strSystem};Dsn={strDsn}; Uid={strUsername}; Pwd={strPassword};"),
            cmd As New OdbcCommand("insert into jobscopedb.ppusrfs (search_key_uf, DATA_ITEM_UF, NUMERIC_VALUE_UF) values (@Release,'81 AB',0);", con)
        cmd.Parameters.Add("@Release", OdbcType.VarChar).Value = strRelease
        con.Open()
        intRecsAffected = cmd.ExecuteNonQuery
    End Using 'Closes and disposes the connection and command even it there is an error

    If intRecsAffected = 1 Then
        MessageBox.Show("Release "   strRelease   " added")
    Else
        MessageBox.Show("Release "   strRelease   "not added")
    End If
End Sub