Это неправильно:
Dim SQLDA As SqlDataAdapter = New SqlDataAdapter(sqlCom.CommandText, SQLcon)
Должно быть так:
Dim SQLDA As SqlDataAdapter = New SqlDataAdapter(sqlCom)
Проблема в том, что вы создаете объект SqlCommand
и добавляете к нему параметр, но затем вы создаете SqlDataAdapter
, который не использует эту команду. Вместо этого вы просто передаете в конструктор SQL-код как String
, и адаптер данных создает новый объект SqlCommand
, используя его. Конечно, эта новая команда не имеет добавленного параметра.
Есть и другие аспекты вашего кода, которые также являются неоптимальными. Вот что я хотел бы рассмотреть два разумных варианта:
Dim sqlCom As SqlCommand = New SqlCommand("getTicket", SQLcon) With {.CommandType = CommandType.StoredProcedure,
.CommandTimeout = 120}
sqlCom.Parameters.AddWithValue("@project_id", Request.QueryString("id"))
Dim SQLDA As SqlDataAdapter = New SqlDataAdapter(sqlCom)
и
Dim SQLDA As SqlDataAdapter = New SqlDataAdapter("getTicket", SQLcon)
With SQLDA.SelectCommand
.CommandType = CommandType.StoredProcedure
.CommandTimeout = 120
.Parameters.AddWithValue("@project_id", Request.QueryString("id"))
End With
Даже в этом случае игнорируется тот факт, что следует избегать AddWithValue
и использовать Add
с явной настройкой свойства Value
, например,
.Parameters.Add("@project_id", SqlDbType.Int).Value = Request.QueryString("id"))