Я выполнял некоторые упражнения, и одним из них было обновить запись таблицы с помощью хранимой процедуры, которая запрашивает идентификатор записи, имя столбца и значение, которое эта запись будет иметь в этом столбце после обновления .
Это моя хранимая процедура:
create proc UpdateDynamically
(
@ProdID int,
@Parameter varchar(50),
@Value varchar(50)
)
as
begin
declare @sql varchar(max);
set @sql = 'update Products set ' + QUOTENAME(@Parameter) + ' = ' + @Value + ' where ProductID = ' + CONVERT(int, @ProdID)
exec(@sql)
end
Это мой код c #:
protected void btnAtualizar_Click(object sender, EventArgs e)
{
try
{
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString);
con.Open();
#region UPDATE
string aux = ddlNome.SelectedItem.Text;
string id = aux.Substring(0, aux.IndexOf('-'));
SqlCommand comm1 = new SqlCommand();
SqlParameter ProdID = new SqlParameter("@ProdID", Convert.ToInt32(id));
SqlParameter Value = new SqlParameter("@Value", txtValor.Text);
SqlParameter Parameter = new SqlParameter("@Parameter", ddlCampo.SelectedItem.Text);
comm1 = new SqlCommand("update_dynamically", con);
comm1.Parameters.Add(ProdID);
comm1.Parameters.Add(Value);
comm1.Parameters.Add(Parameter);
comm1.CommandType = CommandType.StoredProcedure;
comm1.ExecuteNonQuery();
#endregion
Response.Redirect("WebForm.aspx");
}
catch (SqlException sqlex)
{ Response.Write(sqlex.Message); }
catch (Exception ex)
{ Response.Write(ex.Message); }
finally
{ con.Close(); }
}
Когда я запускаю код, он не выдает никакой ошибки, но запись не обновляется, и когда я пытаюсь «жестко кодировать» значения в SQL Server, он выдает эту ошибку:
Сообщение 245, Уровень 16, Состояние 1, Обновление процедуры, Динамически,
Преобразование не удалось при преобразовании значения nvarchar 'update Набор продуктов [ProductName] = Helium где ProductID =' в тип данных int.
Я использую SQL Server 2012 и Visual Studio 2017. Я мог бы действительно использовать некоторую помощь. Спасибо.