存储过程中的转换异常

时间:2014-02-21 17:59:49

标签: c# sql stored-procedures

我正在处理c#中的存储过程并创建一个像这样的新存储过程

CREATE PROCEDURE [dbo].[stored_proc]
    @param1 int,
    @param2 varchar
AS
    UPDATE medicine 
    SET medicine_name='" + param2 + "' 
    WHERE medicine_id = '" + param1 +     "' 
RETURN 0

我在我的代码中调用这个存储过程就像这样

if (selectedRow_update.Cells["ID"].Value != null)
{
    SqlCommand sto_proc =new SqlCommand("stored_proc",obj.con);
    sto_proc.CommandType = CommandType.StoredProcedure;
    sto_proc.Parameters.Add("@param1", SqlDbType.Int).Value = Convert.ToInt32(selectedRow_update.Cells["ID"].Value);
    sto_proc.Parameters.Add("@param2", SqlDbType.VarChar).Value = selectedRow_update.Cells["Medicine Name"].Value.ToString();
    sto_proc.ExecuteNonQuery();
}

我收到了Conversion failed when converting the varchar value '" + param1 + "' to data type int

的例外情况

因为我已将param1声明为int并在转换后传递了值int,因为我从datagridview行获取此值。那么为什么它会给转换带来问题。

1 个答案:

答案 0 :(得分:4)

您正在将medicine_id设置为字符串文字" + param1 + "。你想要做的是以下几点:

UPDATE medicine
SET medicine_name = @param2
WHERE medicine_id = @param1

以下是使用参数的更多quick reading。那里有很多;阅读SQL以了解基础知识。