Необходимо объявить скалярную переменную " @employeeid"
Public Sub SqlSelectTimesAwaitingApproval(dgv as datagridview, listOfEmployees As List(Of integer)) Dim con As New SqlConnection(My.Settings.AlphaCureCRMConnectionString) Dim cmd As New SqlCommand() Dim ds As New DataSet Try cmd.Connection = Con For Each intId As Integer In listOfEmployees Con.Open() cmd.Parameters.Add("@EmployeeID", SqlDbType.Int).Value = intId cmd.CommandText = "SELECT * FROM tblAttendanceTimes WHERE intApprovedOvertime = 0 AND fkEmployee = @EmployeeID" Dim da As New SqlDataAdapter() With {.SelectCommand = New SqlCommand(cmd.CommandText, con)} da.Fill(ds, "Table") con.Close() da.Dispose() Next Dgv.DataSource = ds.Tables("Table") ds.Dispose() Catch ex As Exception MsgBox(Ex.Message) Finally Cmd.Dispose() End Try End Sub
Не могу понять, почему я получаю эту ошибку, параметр определяется до того, как он вызывается. У меня это работало какое-то время, но что-то должно было измениться, и теперь я вообще не могу заставить это работать.
Что я уже пробовал:
Я пытался в основном просто изменить код, как он есть, но безрезультатно.
[no name]
"параметр определяется до того, как он будет вызван", где? Этого нет в коде, размещенном здесь. Название вашей публикации и код здесь не совпадают.
BeginnerCoderPete
Заголовок - это сообщение об ошибке, которое я получаю от этого фрагмента кода. Я добавляю параметр, а затем создаю команду так же, как и все мои другие SQL-запросы, но по какой-то причине она выдает мне эту ошибку.
[no name]
"Заголовок-это сообщение об ошибке", если это правда, то почему вы его изменили? Это название Вашего сообщения, где вы должны рассказать нам о своей проблеме? подсказка: нет, это не так.
BeginnerCoderPete
Спасибо за помощь.
PIEBALDconsult
Ну, вы все равно делаете это неправильно - вам нужно вытащить кучу этого из петли.
В цикле все, что вам нужно сделать, это установить значение параметра и выполнить инструкцию.
Создать команду
Набор текста
Добавьте параметры
для...
{
Установите значения параметров
Выполнять
}
BeginnerCoderPete
Public Sub SqlSelectTimesAwaitingApproval(dgv as datagridview, listOfEmployees As List (of integer))
Dim con как новый SqlConnection(My. Settings.AlphaCureCRMConnectionString)
Dim cmd как новая SqlCommand()
Dim da как новый SqlDataAdapter(cmd)
Дим ДТ в качестве нового объекта DataTable
Попробуй
УМК.Подключение = Кон
УМК.CommandText = " SELECT * FROM tblAttendanceTimes WHERE intApprovedOvertime = 0 AND fkEmployee = @Employee"
УМК.Параметры.Добавить("@Сотрудника", Значения Sqldbtype.Инт)
Для каждого intId как целое в listOfEmployees
УМК.Параметров("@Сотрудника").Значение = intId
против.Открыть()
да.Заполнить(ДТ)
против.Закрывать()
Следующий
Поймать ex как исключение
MsgBox(Например, Сообщение)
Окончательно
да.Распоряжаться()
УМК.Располагать()
dgv.Источник данных = ДТ
Конец Попытки
Конец Подводной Лодки
- Лучше?
PIEBALDconsult
Лучше, но не открывайте и не закрывайте соединение в цикле.
PIEBALDconsult
Смотреть также:
https://www.codeproject.com/script/Forums/View.aspx?fid=1649&МСГ=4052816
BeginnerCoderPete
Спасибо