У меня есть логика, которая получает значение из выбранной строки GridView и создает строку, которая используется в качестве параметра для хранимой процедуры:
protected void ChkSelect_CheckedChanged(object sender, EventArgs e)
{
try
{
CheckBox chkSel = sender as CheckBox;
string id = chkSel.Attributes["data-id"].ToString();
if (chkSel.Checked == true)
{
ids += (ids.Length == 0 ? id : "," + id);
}
else
{
string existingCodes = id;
ids = existingCodes.Replace(id, "");
}
}
catch (Exception ex)
{
lblTest.Text = ex.Message;
}
}
Итак, если я выберу, например, двав строках, с идентификаторами «123» и «456», параметр будет иметь следующее значение: «123,456»
Затем я отправлю его в качестве параметра в хранимую процедуру, которая имеет логику, обновляющую данные, которые имеютэти идентификаторы:
UPDATE MyTable SET Type = 'E' WHERE id in(@id)
При выполнении этого у меня появляется ошибка:
Преобразование не удалось при преобразовании значения varchar
123,456 в тип данных int
Я полагаю, что это происходит из-за того, что параметр, который я отправляю, равен «123 456».
Мне нужно изменить его с помощью динамического sql, чтобы выражение update выглядело так, когда @id заменяется действительными значениями:
UPDATE MyTable SET Type = 'E' WHERE id in(123,456)
or
UPDATE MyTable SET Type = 'E' WHERE id in('123','456')
Как я могу это сделать?