2015-06-20 7 views
0

У меня есть таблица, и я хочу установить значение, если cell = null, а затем установить запись по текстовому полю. вот мой столКак установить запись по запросу обновления sql vb.net

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

вот мой код и моя проблема заключается в записи запроса для каждого элемента, который является Null, и я хочу написать только для следующей ячейки, что, прежде чем он не является нулевым

con.Open() 
query = " update firealarm set [email protected] 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() 
+1

Вы уязвимы для SQL-инъекции – Sherlock

+0

'query =" update firealarm set Примечание = @ Примечание, где Note Null « – Subrati

ответ

2

Во-первых, давайте исправим ближайшую проблему: в SQL NULL не равно никому, включая другие NULL s, поэтому Note<>Null верен для всех строк. Для решения этой проблемы SQL имеет специальные операторы IS NULL и IS NOT NULL. Использование where Note is not NULL устранит проблему.

Большая проблема остается, хотя: ваша программа уязвима для атаки SQL Injection. Чтобы устранить эту проблему в Visual Basic, см. this Q&A.

Edit: (в ответ на редактирование вопроса)

Я хочу написать только для следующей ячейки, что перед его not null

«следующая ячейка» подразумевает некоторое заказать сот в таблице. Поскольку строки таблицы следует рассматривать как неупорядоченную коллекцию, предположим, что вы хотите заказать по col1, как данные упорядочены в вашем примере.

условие запроса становится гораздо больше для этого:

UPDATE f 
SET [email protected] 
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 говорит, что обновление должно быть сделано на ячейку с наименьшим col1 и NULL значение в Note колонке.

+0

вы можете быть моим наставником? : 3 – Sherlock

+0

@dasblinkenlight ---- query = "update firealarm set Примечание = @ Примечание, где Note is Null" ---- проблема задана во всех ячейках, которые являются нулевыми, я хочу установить только следующую ячейку после не null и сохранить всю нулевую ячейку – Subrati

+0

@Subrati вам нужно 'where Note is not NULL'. После этого добавьте 'query.Parameters.Add (« @ Note », SqlDbType.VarChar, 50) .Value = Notebox.Text', чтобы установить значение параметра' @ Note'. – dasblinkenlight

0

Для обновления точной строки вам нужно больше условий в WHERE заявлении

UPDATE firealarm SET [email protected] 
WHERE Note IS NULL 
AND Col1 = @ValueOfCol1 
AND Col2 = @ValueOfCol2 

vb.net код

con.Open() 
Dim query As String = <![CDATA[UPDATE firealarm SET [email protected] 
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() 

Или используйте значение столбца идентификации, если ваша таблица имеет этот

0

Попробуйте этот запрос , он обновит только первую строку, которая равна нулю

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


update UpdateList_view 
set [email protected]  
+0

Насколько уверен, что вы можете быть такой обновленной строкой? – Fabio

+0

Нет, не уверена, без лишних подробностей, надеюсь, что должны быть некоторые столбцы идентификаторов –

Смежные вопросы