【问题标题】:Update SQL database using VB.NET使用 VB.NET 更新 SQL 数据库
【发布时间】:2016-09-29 22:09:48
【问题描述】:

代码没有抛出任何错误,只是没有执行语句

    Private Sub Update_Program(item As Programme)
    'Set Command
    SchoolTypes.Connexion.Open()
    item.Command = New SqlClient.SqlCommand("UPDATE T_Programme Set  pro_nom='@nom' , pro_nbr_unites=@nom , pro_nbr_heures=@unit WHERE pro_no ='@no'", SchoolTypes.Connexion)

    ''Add Parameter
    item.Command.Parameters.Add("@no", SqlDbType.VarChar, 6)
    item.Command.Parameters.Add("@nom", SqlDbType.VarChar, 50)
    item.Command.Parameters.Add("@unit", SqlDbType.Float)
    item.Command.Parameters.Add("@heures", SqlDbType.Int)
    ''''Set Values
    item.Command.Parameters("@no").Value = item.Pro_No
    item.Command.Parameters("@nom").Value = item.Pro_Nom
    item.Command.Parameters("@unit").Value = item.Pro_Nbr_Unit
    item.Command.Parameters("@heures").Value = item.Pro_Nbr_Heure

    Try
        If item.Command.ExecuteNonQuery() > 0 Then
            MsgBox("Modifier avec Succes!")
        End If
        SchoolTypes.Connexion.Close()
    Catch ex As Exception
        err.ShowDetails(System.Reflection.MethodBase.GetCurrentMethod(), ex)
    End Try
End Sub

我已经测试了我的命令,它适用于 sql 但不适用于程序...

这是我的数据库的粘贴 Database

【问题讨论】:

  • 去掉'@no'周围的蜱虫,实际上把它们全部去掉
  • 可能是"UPDATE tp_p44.dbo.T_Programme Set ...
  • @Plutonix 我试过了,它也不执行查询
  • @Slai 为什么我需要在使用连接时提及数据库名称....
  • pro_no 真的是一个文本字段吗?确保数据库中有这样一个值的记录

标签: vb.net sqlcommand


【解决方案1】:

你的命令语句是错误的。更新语句中的参数不应使用“''”标记。

而且您还有不匹配的输入。下面应该是您的更新声明。

"UPDATE T_Programme Set pro_nom=@nom , pro_nbr_unites=@unit , pro_nbr_heures=@heures WHERE pro_no =@no"

我尝试了下面的代码。而且效果很好。

    Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load

    Dim rowsAffected As Integer

    Using con As New SqlConnection("server=.;database=Test;integrated security=true")
        Using cmd As New SqlCommand("UPDATE T_Programme Set  pro_nom=@nom , pro_nbr_unites=@unit , pro_nbr_heures=@heures WHERE pro_no =@no", con)

            cmd.Parameters.Add("@no", SqlDbType.VarChar).Value = "1234"
            cmd.Parameters.Add("@nom", SqlDbType.VarChar).Value = "qwerty"
            cmd.Parameters.Add("@unit", SqlDbType.Float).Value = 12.0
            cmd.Parameters.Add("@heures", SqlDbType.Int).Value = 2

            con.Open()
            rowsAffected = cmd.ExecuteNonQuery()

        End Using
    End Using

End Sub

【讨论】:

  • 好的,所以我应该避免在更新声明中使用 ' 但在其他情况下我应该提及它们?为什么?
  • 这不仅仅是更新声明,它是关于占位符的。对于占位符,您无需提供“'”。
  • @Pavan Chandaka 你知道你可以将值添加到参数的末尾吗?当前缺乏可读性,令人困惑。还要将命令和连接包装在 using 语句中,以便在使用完它们后正确处理它们。
  • Ya Zaggler,但我尽量坚持他的代码。
  • 它不会费心展示正确的方式吗?否则,一直徘徊是不好的做法......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-17
  • 1970-01-01
  • 1970-01-01
  • 2020-07-16
  • 2011-09-03
  • 1970-01-01
  • 2014-09-18
相关资源
最近更新 更多