我正在处理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行获取此值。那么为什么它会给转换带来问题。
答案 0 :(得分:4)
您正在将medicine_id
设置为字符串文字" + param1 + "
。你想要做的是以下几点:
UPDATE medicine
SET medicine_name = @param2
WHERE medicine_id = @param1
以下是使用参数的更多quick reading。那里有很多;阅读SQL以了解基础知识。