Кажется, что метод Month в MySql возвращает целое число, поэтому вам понадобятся цифры, разделенные запятыми, заключенные в парантезе. Параметр передает одно значение, поэтому параметры здесь не подходят. Вам нужно построить строку и объединить ее в операторе select.
Private Function InClause(Months As Integer(), Year As Integer, Activity As String) As DataTable
'StringBuilder is mutable so it save creating a new string and tossing the old one on each iteration
'Start the string out with the opening parenthesis
Dim BuildInClause As New StringBuilder("(")
'loop through each element in the array and add it to the string builder along with a comma
For Each m In Months
BuildInClause.Append(m & ",")
Next
'convert the StringBuilder to a string, Trim off the final comma and add the closing parenthesis.
Dim str = BuildInClause.ToString.Trim(","c) & ")"
'Check what the string looks like
Debug.Print(str)
Dim dt As New DataTable
'The Using...End Using block ensures that you connection and command are closed and disposed even if there is an error
Using cn As New MySqlConnection("Your connection String"),
cmd As New MySqlCommand("Select id, billingreference, opac, projectorder, projectlocation, headedby, dategiven
From project_info
Where Month(dategiven) In " & str &
" And YEAR(dategiven) = @dategiven4
And id IN ( SELECT project_id From manpower_project
Where activity = @activity ))", cn)
cmd.Parameters.Add("@dategiven4", MySqlDbType.Int32).Value = Year
cmd.Parameters.Add("@activity", MySqlDbType.String).Value = Activity
cn.Open()
dt.Load(cmd.ExecuteReader)
End Using
Return dt
End Function
Использование:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim intArray = {1, 2, 3}
Dim dt = InClause(intArray, 2020, "Aerial Cable Installation")
DataGridView1.DataSource = dt
End Sub