提问人:Ratu Batu Hamlo Koto 提问时间:3/24/2023 最后编辑:Ken WhiteRatu Batu Hamlo Koto 更新时间:3/24/2023 访问量:45
更新查询阻止空参数更新列
Update query prevent empty param from update the column
问:
我使用 VB.NET 创建 API。我有 5 个参数。对于更新查询,无需更新所有 5 个参数。它只能是 1、2、3 或 4。我尝试只插入两个参数来运行 API,而其他 4 个我将其留空。
但随后空参数将该列更新为空列。这意味着将 pervious 数据替换为空 String。
我想如何防止这种情况发生?下面是我当前的代码。
Try
If String.IsNullOrEmpty(id) Or String.IsNullOrEmpty(name) Or String.IsNullOrEmpty(email) Or String.IsNullOrEmpty(role_id) Or String.IsNullOrEmpty(factory_id) Then
Dim myResponse As New failResponceClass
myDataAdapter = New MySqlDataAdapter
myDataAdapter.UpdateCommand = New MySqlCommand("UPDATE wla_user SET name = '" & name & "', email = '" & email & "', role_id = '" & role_id & "', factory_id = '" & factory_id & "' WHERE id = '" & id & "'")
myDataAdapter.UpdateCommand.Connection = mySQLConnection
mySQLConnection.Open()
myDataAdapter.UpdateCommand.ExecuteNonQuery()
mySQLConnection.Close()
myResponse.statusCode = 1
myResponse.errCode = ""
myResponse.title = l_Title_TGWLAppUser
myResponse.desc = "TGWL App User"
Me.Context.Response.ContentType = "application/json; charset=utf-8"
Me.Context.Response.Write(JsonConvert.SerializeObject(myResponse))
答:
4赞
jmcilhinney
3/24/2023
#1
对于 SQL 代码,字符串连接本身并不是坏事,但连接用户输入的值肯定是坏事。您应该做的是使用参数作为值,但对条件使用串联,以便您可以将任意数量的参数添加到您的 SQL 代码中。下面是一个适用于两列的示例。您可以根据需要将其扩展到任意数量的列:
Public Sub UpdateTable(id As Integer, column1 As String, column2 As String)
Using connection As New SqlConnection("connection string here"),
command As New SqlCommand
Dim criteria As New List(Of String)
If Not String.IsNullOrWhiteSpace(column1) Then
criteria.Add("Column1 = @Column1")
command.Parameters.Add("@Column1", SqlDbType.VarChar, 50).Value = column1
End If
If Not String.IsNullOrWhiteSpace(column2) Then
criteria.Add("Column2 = @Column2")
command.Parameters.Add("@Column2", SqlDbType.VarChar, 50).Value = column2
End If
command.CommandText = $"UPDATE MyTable SET {String.Join(", ", criteria)} WHERE Id = @Id"
command.Connection = connection
command.Parameters.Add("@Id", SqlDbType.Int).Value = id
connection.Open()
command.ExecuteNonQuery()
End Using
End Sub
评论
DataTable
Update
ExecuteNonQuery