【发布时间】:2019-06-02 15:04:00
【问题描述】:
我正在做一些练习,其中之一是使用存储过程更新表记录,该存储过程询问记录的 ID、列名以及在我更新后该记录将在该列中具有的值.
这是我的存储过程:
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 Products set [ProductName] = Helium where ProductID = ' 转换为数据类型 int 时转换失败。
我正在使用 SQL Server 2012 和 Visual Studio 2017。我真的需要一些帮助。谢谢。
【问题讨论】:
标签: c# sql sql-server stored-procedures sql-server-2012