2016-04-23 3 views
-1

У меня есть инструкция SQL вставки, заключенная в строковый конструктор. Я хочу удалить две строки для col2, если переменная col2 содержит значение NULL. Это позволило бы мне вставить значение NULL в col2StringBuilder удаляет строки

Это мой код.

Private Sub insertStmt(ByVal col2 As Integer) 
    If IsDBNull(col2) Then 
     'Remove line 'Col2' 
    End If 

    Dim sb As StringBuilder = New StringBuilder 

    sb.Append("INSERT INTO TABLE") 
    sb.Append("(") 
    sb.Append("Col1,") 
    sb.Append("Col2,") 
    sb.Append("Col3,") 
    sb.Append("Col4") 
    sb.Append(")") 
    sb.Append("VALUES") 
    sb.Append("(") 
    sb.Append("1,") 
    sb.Append(" " & col2 & ", ") 
    sb.Append("'abc',") 
    sb.Append("'xyz'") 
    sb.Append(")") 
End Sub 
+3

Это плохой способ создать SQL, поскольку он не защищает от атак SQL Injection и других вещей. Использование SQL Paramters – Plutonix

ответ

2

Во-первых, я категорически согласен с предложением не строить SQL таким образом.
Также col2 является int. Он никогда не будет нулевым.
Но чтобы ответить на ваш вопрос, если вы собираетесь это сделать, было бы проще просто не добавлять их в первую очередь.

Предполагая, что col2 было то, что может быть пустым, заменить эти две строки с

If Not IsDBNull(col2) Then sb.Append("Col2,") 

If Not IsDBNull(col2) Then sb.Append(" " & col2 & ", ") 
0

почему бы вам не сделать это, прежде чем создавать StringBuilder

Forexample:

Dim values As New Dictionary(Of String, object) 
    values.Add("col1", variable1) 
    values.Add("col2", variable2) 
    values.Add("col3", variable3) 
    Dim main_sb As New StringBuilder 
    Dim cols_sb As New StringBuilder 
    Dim vals_sb As New StringBuilder 
    For Each row As KeyValuePair(Of String, object) In values 
     If IsDBNull(row.Value) = False Then 
      cols_sb.Append("[" & row.Key & "],") 
      vals_sb.Append("'" & row.Value & "',") 
     End If 
    Next 
    main_sb.Append("INSERT INTO TABLE (" & cols_sb.ToString.Substring(0, cols_sb.ToString.Length - 1) & ") values (" & vals_sb.ToString.Substring(0, vals_sb.ToString.Length - 1) & ")") 
0

Проверьте это:

sb.AppendFormat("INSERT INTO TABLE(Col1,Col2,Col3,Col4) VALUES(1,{0},'abc','xyz')", col2); 

аккуратный а?

+0

sql дает синтаксическую ошибку этому – snoopcommands

+0

@snoopcommands - звучит так, как будто вы сделали опечатку, что показывает sb.ToString()? – Hogan

+0

sb.tostring = "ВСТАВИТЬ В ТАБЛИЦУ (Col1, Col2, Col3, Col4) ЗНАЧЕНИЯ (1 ,, 'abc', 'xyz')" sql accpets "INSERT INTO TABLE (Col1, Col2, Col3, Col4) ЗНАЧЕНИЯ (1, null, 'abc', 'xyz') " – snoopcommands

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