Существует ряд проблем с вашим кодом.
Во-первых, у вас есть уязвимость sql-инъекций, которую можно устранить с помощью параметров.
Во-вторых, вы выполняете действия с базой данных в открытом хранилище данных, что может привести к многочисленным проблемам.
В-третьих, вы выполняете слишком много работы, чтобы определить, существует ли серийный номер. Вы можете использовать оператор SQL Server Exists и метод ExecuteScalar SqlCommand для возврата и тестирования одного значения, что делает код намного быстрее и проще для понимания.
Наконец, вам необходимо убедиться, что одноразовые предметы утилизируются, и самый простой / лучший способ сделать это - использовать блоки использования.
Все они могут быть решены с помощью следующего кода:
Using connection As New SqlConnection(connStr)
Dim sqlcheck As String = "IF EXISTS(select 1 FROM EquipmentDetail WHERE SerialNumber=@SerialNumber) SELECT 1 ELSE SELECT 0"
Using cmd As New SqlCommand(sqlcheck, connection)
cmd.Parameters.AddWithValue("@SerialNumber", TextBox1.Text)
connection.Open()
If CBool(cmd.ExecuteScalar) Then
MessageBox.Show(TextBox1.Text & " was already added")
Else
Using insertCmd As New SqlCommand
insertCmd.Connection = connection
insertCmd.CommandText = "INSERT INTO EquipmentDetail (SerialNumber, BoxNumber, FATTNumber, FaultTicketNumber, Description, ProductCode)" &
"VALUES(@SerialNumber, @BoxNumber, @FATTNumber, @FaultTicketNumber, @Description, @ProductCode)"
insertCmd.Parameters.AddWithValue("@SerialNumber", TextBox1.Text)
insertCmd.Parameters.AddWithValue("@BoxNumber", TextBox2.Text)
insertCmd.Parameters.AddWithValue("@FATTNumber", TextBox3.Text)
insertCmd.Parameters.AddWithValue("@FaultTicketNumber", TextBox4.Text)
insertCmd.Parameters.AddWithValue("@Description", TextBox6.Text)
insertCmd.Parameters.AddWithValue("@ProductCode", ComboBox1.Text)
insertCmd.ExecuteNonQuery()
MessageBox.Show("Equipment successfully added.", "Equipment", MessageBoxButtons.OK)
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
TextBox6.Text = ""
TextBox1.Focus()
End Using
End If
End Using
connection.Close()
End Using