【问题标题】:Update SQL table using Vb.net使用 Vb.net 更新 SQL 表
【发布时间】:2014-01-20 23:20:54
【问题描述】:

我有一个需要将信息放入数据库表中的 VB.net 脚本。问题是它基于项目 ID,所以当我更新时,我不能只插入该行,如果它已经存在,我想更新该行。为此,我需要像这样使用更新命令:

mysqlCommand = New SQLCommand(UPDATE tableName Colum2=Newvalue ... Where Column1=ItemId)

但是我想知道是否有任何方法可以告诉我运行时是否更新了一行

mysqlcommand.ExecuteNonQuery()

这样我在运行此命令并在此更新命令和 INSERT INTO 命令之间切换之前不需要检查

【问题讨论】:

    标签: sql vb.net sql-update sqlcommand


    【解决方案1】:

    我同意@Neolisk,但可以使用以下内容进行轻微改进:

    Dim recordsAffected As Integer = mysqlcommand.ExecuteNonQuery()
    If recordsAffected > 0 Then 'it worked
    

    或者这个:

    Dim recordsAffected As Integer = mysqlcommand.ExecuteNonQuery()
    If recordsAffected >= 1 Then 'it worked
    

    只要 Column1 是唯一标识符,@Neolisk 的代码就可以很好地工作。否则,您可能会更新不止一行。 “大于”/“大于或等于”运算符将捕获您更新多行的情况。

    【讨论】:

    • +1。谢谢你的评论。我更新了我的答案,希望现在看起来更好。
    • @Neolisk - 我认为这就是你想要的。只是想为 DoNotArrestMe 指出这一点,以防他不知道。我也“赞成”您的回答,因为您是最初的“响应者”。
    【解决方案2】:

    来自SqlCommand.ExecuteNonQuery @ MSDN的文档:

    针对连接执行 Transact-SQL 语句并返回受影响的行数。

    所以你可以这样写:

    Dim recordsAffected As Integer = mysqlcommand.ExecuteNonQuery()
    If recordsAffected = 1 Then 'it worked
    

    编辑:关于@macoms01 的回答,我的初衷是这样的:

    Select Case recordsAffected
      Case 0: 'it did not work
      Case 1: 'it worked
      Case Else: Throw New BadDataException
    End Select
    

    您永远无法确定在 DB 上设置了唯一约束 - 预计会出现错误数据。

    但后来我认为它可能太复杂了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多