【问题标题】:VB.NET 2010 ADD STATEMENTVB.NET 2010 添加声明
【发布时间】:2013-02-15 18:15:49
【问题描述】:

我的 ADD 按钮上有这段代码,还有其他方法可以缩短这段代码吗?

Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click

    On Error GoTo ErrSQL

    Dim cmd As New OleDb.OleDbCommand
    If Not cnn.State = ConnectionState.Open Then
        'Open connection if it is not yet open
        cnn.Open()
    End If
    cmd.Connection = cnn
    'check whether add new update
    If Me.txtstdID.Tag & "" = "" Then
        'add new
        'add data to table
        cmd.CommandText = "INSERT INTO inventory (ID,BRAND,SPECIFICATION,STATUS) Values ('" & Me.txtstdID.Text & "','" & Me.cboBrand.Text & "','" & Me.txtDescription.Text & "','" & strStat & "')"
        cmd.ExecuteNonQuery()


    Else
        'update data in table
        cmd.CommandText = "UPDATE inventory  SET ID =" & Me.txtstdID.Text & ",BRAND='" & Me.cboBrand.Text & "', SPECIFICATION='" & Me.txtDescription.Text & "', STATUS = '" & strStat & "', WHERE ID=" & Me.txtstdID.Text & ""
        cmd.ExecuteNonQuery()
    End If
    'refresh data in list
    RefreshData()
    'clear form
    Me.btnClear.PerformClick()

    'close connection
    cnn.Close()


    Exit Sub
 ErrSQL:
    MsgBox(Err.Description)


End Sub

【问题讨论】:

  • 不用担心缩短代码,担心Sql Injection
  • 先生。感谢您的建议

标签: vb.net visual-studio-2010 visual-studio vb.net-2010


【解决方案1】:

缩短代码没有太多工作要做,防止 Sql Injection 和解析问题有很多工作要做。 我会尝试将您的代码更改为此

Try
    Using cnn = new OleDbConnection(constring)
        Dim cmd As New OleDb.OleDbCommand
        cnn.Open()
        cmd.Connection = cnn
        Dim cmdText as String

        'check whether add new update
        If Me.txtstdID.Tag & "" = "" Then
              cmdText = "INSERT INTO inventory (ID,BRAND,SPECIFICATION,STATUS) " + 
                         "Values (@ID, @Brand, @specs, @stat)"
        else
              cmdText = "UPDATE inventory SET ID=@ID, BRAND=@Brand,SPECIFICATION=@specs" +
                        "STATUS = @stat WHERE ID=@ID"    
        End If
        cmd.CommandText = cmdText
        cmd.Parametes.AddWithValue("@ID", Me.txtstdID.Text)
        cmd.Parametes.AddWithValue("@Brand", Me.cboBrand.Text)
        cmd.Parametes.AddWithValue("@specs", Me.txtDescription.Text)
        cmd.Parametes.AddWithValue("@stat", strStat)
        cmd.ExecuteNonQuery()
   End Using
   'refresh data in list
   RefreshData()
   'clear form
   Me.btnClear.PerformClick()
Catch(x As Exception)
    MsgBox(x.Message)
End Try

我很想删除 Update 语句中多余的 SET ID=@ID,但是,您必须在其他参数之后添加 @ID 参数,因为在 OleDb 中,参数顺序很重要

【讨论】:

  • 我认为您可以通过将 ID 的 AddWithValue 移到 if 块中来删除 SET ID=@ID。
  • 不,因为正如我所说,在 OleDb 中,参数的顺序很重要。如果没有该 ID 在第一个位置,我们需要在 AddWithValue 中引入不同的序列,因为 ID 在 INSERT 和 UPDATE 命令之间的位置不同
  • 先生,史蒂夫。这是我遇到的错误 1.“costring”未声明。由于其保护级别 2.strStat 未声明,IT 可能无法访问。由于其保护级别 3.x,它可能无法访问,因为未声明异常。由于其保护级别,它可能无法访问
  • 啊。我现在明白我错过了什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-26
  • 1970-01-01
  • 1970-01-01
  • 2023-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多