我有一个更新查询(存储过程),当我执行它时,它在SQL Server中正常工作。
CREATE PROCEDURE updatestudenthws(@stdid nvarchar(50),@hwid int, @grade float)
AS
UPDATE Table_Exercise_Answer
SET
ExAns_Grade = @grade
WHERE ExAns_Exercise = @hwid AND ExAns_Student = @stdid
但是当我运行程序时,它对我的表没有任何影响,而且我也没有任何错误。
con.Open();
SqlCommand cmd = new SqlCommand("updatestudenthws", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@hwid", SqlDbType.VarChar);
cmd.Parameters.Add("@stdid", SqlDbType.VarChar);
cmd.Parameters.Add("@grade", SqlDbType.VarChar);
cmd.Parameters["@hwid"].Value = hwid;
cmd.Parameters["@stdid"].Value = studentid;
cmd.Parameters["@grade"].Value = grade;
cmd.ExecuteNonQuery();
con.Close();
我的错误是什么? 我应该怎么做这个工作?
答案 0 :(得分:2)
使用AddWithValue()
,因此您无需提供类型,这样就可以将varchar
传递给int
参数。
con.Open();
SqlCommand cmd = new SqlCommand("updatestudenthws", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@hwid", hwid);
cmd.Parameters.AddWithValue("@stdid", studentid);
cmd.Parameters.AddWithValue("@grade", grade);
cmd.ExecuteNonQuery();
con.Close();
答案 1 :(得分:2)
定义存储过程参数的ADO.NET代码是错误的,因为您没有使用正确的数据类型定义参数。
您的存储过程定义:
@stdid nvarchar(50)
- >但您将其定义为varchar
@hwid int
- >但您将其定义为varchar
@grade float
- >但您将其定义为varchar
您需要将代码更改为:
SqlCommand cmd = new SqlCommand("updatestudenthws", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@hwid", SqlDbType.Int); // this needs to be SqlDbType.Int
cmd.Parameters.Add("@stdid", SqlDbType.NVarChar, 50); // this should be SqlDbType.NVarChar and specify its proper length
cmd.Parameters.Add("@grade", SqlDbType.Float); // this needs to be SqlDbType.Float
答案 2 :(得分:0)
当你使用 AddWithValue()时,你不必提供像varchar这样的类型传递给int参数。
con.Open();
SqlCommand cmd = new SqlCommand("updatestudenthws", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@hwid", hwid);
cmd.Parameters.AddWithValue("@stdid", studentid);
cmd.Parameters.AddWithValue("@grade", grade);
cmd.ExecuteNonQuery();
con.Close();