簡體   English   中英

如何通過更新查詢sql vb.net設置記錄

[英]how to set record by update query sql vb.net

我有表,我想設置值,如果cell = null然后通過textbox設置record。 這是我的桌子

--------------------
col1| col2| Note
1       2    aaa
5       5    (*)  set record Only here if cell is Null
42     14
47     55   
------------------

這是我的代碼,我的問題是查詢為空的每個單元格寫的內容,而我只想為不為空的下一個單元格寫內容

con.Open()
query = " update firealarm set Note=@Note where Note Is Null"
Dim command As SqlCommand = New SqlCommand(query, con)
command.Parameters.Add(New SqlParameter("@Note", SqlDbType.NVarChar))
command.Parameters("@Note").Value = Notebox.Text.ToString
command.ExecuteNonQuery()
con.Close()

首先,讓我們解決當前的問題:在SQL中, NULL不等於任何值,包括其他NULL ,所以Note<>Null對所有行都是true。 為了解決此問題,SQL具有特殊的運算符IS NULLIS NOT NULL 使用where Note is not NULL將解決此問題。

但是,還有一個更大的問題:您的程序容易受到SQL Injection攻擊。 要在Visual Basic中解決此問題,請參閱此問答

編輯:(針對問題的編輯)

我只想為下一個not null單元格寫

“下一個單元格”表示表中單元格的某些順序 由於表行應被視為無序集合,因此假設您想按col1進行排序,即示例中數據的排序方式。

查詢條件變得更大:

UPDATE f
SET f.Note=@Note
FROM firealarm f
WHERE Note Is Null
  AND NOT EXIST (
    SELECT * FROM firealarm ff WHERE ff.col1 < f.col1 AND ff.Note IS NULL
  )

新的WHERE條件表明更新需要在Note列中col1NULL值最低的單元格上進行。

為了更新確切的行,您需要在WHERE語句中有更多條件

UPDATE firealarm SET Note=@Note 
WHERE Note IS NULL 
AND Col1 = @ValueOfCol1
AND Col2 = @ValueOfCol2

vb.net代碼

con.Open()
Dim query As String = <![CDATA[UPDATE firealarm SET Note=@Note 
WHERE Note IS NULL
AND Col1 = @ValueOfCol1
AND Col2 = @ValueOfCol2]]>.Value
Dim command As SqlCommand = New SqlCommand(query, con)
With command.Parameters
    .Add(New SqlParameter With {.ParameterName = "@Note",
                                .SqlDbType = SqlDbType.NVarChar,
                                .Value = Notebox.Text})
    .Add(New SqlParameter With {.ParameterName = "@ValueOfCol1",
                                .SqlDbType = SqlDbType.Int,
                                .Value = 5})
    .Add(New SqlParameter With {.ParameterName = "@ValueOfCol2",
                                .SqlDbType = SqlDbType.Int,
                                .Value = 5})
End With
command.ExecuteNonQuery()
con.Close()

或使用標識列的值(如果您的表具有此值)

試試這個查詢,它只會更新第一行為空

WITH UpdateList_view AS 
( SELECT TOP 1 * from  Fire alarm     
  Where NOTE is Null ) 


update UpdateList_view 
set Note=@Note    

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM