【问题标题】:Trim characters in a SQL update statement?修剪 SQL 更新语句中的字符?
【发布时间】:2016-08-11 21:19:16
【问题描述】:

是否可以对 SQL 更新语句中的列进行修剪?基本上,一旦在我的 gridview 上单击按钮,我希望它从左侧修剪 10 个字符,用于列“状态”在我在下面为 gridview 上选择的列使用的范围内是否可能?

   Protected Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles GridView1.RowCommand
        If (e.CommandName = "Unlock") Then

            Dim index As Integer = Convert.ToInt32(e.CommandArgument)
            Dim row As GridViewRow = GridView1.Rows(index)


            Try

                Dim Con As SqlConnection
                Dim cmd As SqlCommand
                Con = New SqlConnection
                Con.ConnectionString = "Data Source="
                Con.Open()

                cmd = New SqlCommand
                cmd.Connection = Con

                '''''Can I trim the status column 10 characters where it is the selected row?'''''''''''
                cmd.CommandText = "UPDATE tbltest SET Status = '" & ?????? & "' where row = '" & ???????? & "';"

                cmd.ExecuteNonQuery()

            Catch ex As System.Exception


            End Try

        End If
    End Sub

【问题讨论】:

  • 您只想修剪这一行?什么是主键?
  • 这是我的问题的一部分,我该如何确保它修剪了在 gridview 上单击按钮的正确行?可以有 10 行,每行 10 个解锁按钮
  • 您有 GridViewRow,您可以将 PK 信息存储在 TemplateField 中的(隐藏)控件中,然后通过 row.FindControl("ControlID") 获取。或者你可以get it via DataKeys。然后更改您的 sql 查询以使用 sql-parameters(主要是修复您的 sql 注入漏洞)。然后你可以使用这样的 sql:UPDATE tbltest SET Status=RIGHT(Status, LEN(Status) - 10) WHERE ID=@ID

标签: sql asp.net vb.net trim


【解决方案1】:

有关如何修剪字符串,请参见下文。这不回答如何在 Sql 中选择正确的记录。您需要弄清楚表中的标识符是什么,并确保您的数据网格使用相同的标识符。理想情况下,标识符是表的主键。然后使用参数化查询将其作为 WHERE 子句中的参数传递。


参见 sql 的SubString 方法。您的 sql 查询将是

UPDATE tbltest 
SET Status = SubString(Status, 0, CASE WHEN LEN(Status) >= 10 THEN 10 ELSE LEN(Status) END) 
where TablePkColumn = @myPkParameter

我添加了一个长度检查,以确保在可用字符少于 10 个时不会出现异常,在这种情况下将返回一个空字符串。

其他要点

  • 请将您的连接字符串包装在using 块中,以便在您完成连接后始终关闭连接。或者使用finally 块来关闭连接。
  • 使用参数化查询而不是字符串连接。这适用于您的 where 子句,但您应该在查询中使用外部输入的任何地方执行此操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-28
    • 1970-01-01
    • 2017-02-08
    • 2017-11-01
    • 2014-01-01
    • 1970-01-01
    • 2020-10-26
    相关资源
    最近更新 更多