如何更新数据

时间:2011-12-21 07:21:25

标签: sql vb.net

现在,以下代码根本不执行。它是根据一些有关的教师指示编写和修改的。关键是主键是自动生成的,这就是为什么它没有在参数中被看到。这就是ID列的Is Identity在数据库中设置为Yes。如果有人可以为我修改代码,我将不胜感激。

qry = "Update StudentDetails.Programmes set Programme=@Programme,Form=@Form,AcademicYear=@AcademicYear,Class=@Class where ID=@ID"
            cmd = New SqlCommand(qry, cn)
            cmd.Parameters.Add("@ID", SqlDbType.Int)
            cmd.Parameters["@ID"].Value = Convert.ToInt32(txtID.Text) 
            cmd.Parameters.Add(New SqlParameter("@Programme", txtProgramme.Text))
            cmd.Parameters.Add(New SqlParameter("@Form", txtForm.Text))
            cmd.Parameters.Add(New SqlParameter("@AcademicYear", txtAcademicYear.Text))
            cmd.Parameters.Add(New SqlParameter("@Class", txtClass.Text))
            cmd.CommandType = CommandType.StoredProcedure
            cmd.ExecuteNonQuery()
            MessageBox.Show("Record succesfully updated", "Updated", MessageBoxButtons.OK, MessageBoxIcon.Information)

4 个答案:

答案 0 :(得分:0)

您在查询中有一个参数@ID,但看起来您没有设置该参数。

您说主键是自动创建的,但这可能仅适用于插入行的情况。使用update语句时,仍需要指定行的ID。没有它,数据库将不知道您尝试更新的数据。

如果你的代码抛出一个异常(VB有例外吗?)那么那应该告诉你究竟是什么问题。或者,数据库日志可能能够帮助您跟踪它。

答案 1 :(得分:0)

  

@ID在您的SQLCommand的parameter中也是commandText,   你没有通过它。

在cmd.ExecuteNonQuery()之前添加以下行:

cmd.Parameters.Add(New SqlParameter("@ID", Convert.ToInt32(txtID.Text)))

标识列是Integer类型,因此请尝试使用:

 cmd.Parameters.Add("@ID", SqlDbType.Int);
 cmd.Parameters["@ID"].Value = Convert.ToInt32(txtID.Text);

正如您所说,您的ID列是Identity列,但根据Update语句的规则,您应指定Primary Key字段以更新特定行。 ID列值将帮助您识别particular row,此标识值是您行的唯一值。

要检查是否更新了任何行,请将ExecuteNonQuery()方法的返回值设为:

Int32 rowsAffected = cmd.ExecuteNonQuery();

并检查rowAffected值是否大于0。如果为0,那么在执行查询时不会产生任何行。

请查看此link的示例,了解如何使用参数进行更新。

答案 2 :(得分:0)

尝试复制 - 粘贴qry变量中的内容并在SQL上执行它 如果你受到0行的影响,可能是因为没有使用您传递的密钥@ID找到匹配记录..尝试在查询中使用TRIM

希望这能帮到你..

答案 3 :(得分:0)

您忘记设置SqlCommand.CommandType属性。这可能会对你有所帮助

cmd.CommandType = CommandType.StoredProcedure;

请务必在致电ExecuteNonQuery()之前进行设置。