#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