[英]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 NULL
和IS 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
列中col1
和NULL
值最低的單元格上進行。
為了更新確切的行,您需要在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.