[英]update dynamic name table with stored procedure
我正在做一些練習,其中之一是使用存儲過程更新表記錄,該存儲過程詢問記錄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,其中ProductID ='轉換為數據類型int時,轉換失敗。
我正在使用SQL Server 2012和Visual Studio2017。我真的可以使用一些幫助。 謝謝。
我強烈建議您使用sp_executesql
並在以下位置傳遞參數:
create procedute UpdateDynamically (
@ProdID int,
@Parameter varchar(50),
@Value varchar(50)
) as
begin
declare @sql nvarchar(max);
set @sql = N'
update Products
set @Parameter = @Value where ProductID = @ProdID
';
set @sql = replace(@sql, '@Parameter', @Parameter);
exec sp_executesql @sql,
N'@value varchar(50), @ProdID int',
@value=@value, @ProdID=@ProdID
end;
您不能將@Parameter
傳遞為參數,因為不允許將其用於標識符,而只能用於文字值。
您的存儲過程代碼失敗,因為@ProdID
是整數,因此+
被解釋為加法而不是字符串串聯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.