Change your = to an in clause.
Then use string.join() to format the values for the query.
Dim arr1 As Array
ReDim arr1(ListBox1.Items.Count - 1)
ListBox1.Items.CopyTo(CType(arr1, Object()), 0)
Dim query3 As String = "UPDATE tblcand SET votes = votes +1 where id IN (SELECT * FROM SplitIntCsv(@IdsInArray))"
Using cmd1 As New SqlCommand(query3, con)
cmd1.Parameters.AddWithValue("@IdsInArray", String.Join(",", arr1))
con.Open()
cmd1.ExecuteNonQuery()
con.Close()
End Using
Add this function to split your CSV into a table.
CREATE FUNCTION dbo.SplitIntCsv
(
@String NVARCHAR(4000)
)
RETURNS TABLE
AS
RETURN
(
WITH Split(stpos,endpos)
AS(
SELECT 0 AS stpos, CHARINDEX(',',@String) AS endpos
UNION ALL
SELECT endpos+1, CHARINDEX(',',@String,endpos+1)
FROM Split
WHERE endpos > 0
)
SELECT 'Id' = ROW_NUMBER() OVER (ORDER BY (SELECT 1))
FROM Split
)