2016-04-23 45 views
-1

我有一個插入SQL語句包含在一個stringbuilder中。如果col2變量包含NULL值,我想刪除col2的兩行。這將允許我插入一個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注入攻擊和其他各種事情。使用SQL參數 – Plutonix

回答

2

首先,我非常同意不以這種方式構建SQL的建議。
另外,col2int。它永遠不會爲空。
但是要回答你的問題,如果你打算這樣做,只是不要將它們添加到首位。

假設col2,完全是可能爲空,你爲什麼不,你之前做創建的StringBuilder

forexample取代那些兩條線

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

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

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); 

neat eh?

+0

sql給這個語法錯誤 – snoopcommands

+0

@snoopcommands - 聽起來像你犯了一個錯字,sb.ToString()顯示什麼? – Hogan

+0

sb.tostring =「INSERT INTO TABLE(Col1,Col2,Col3,Col4)VALUES(1 ,,'abc','xyz')」 sql accpets「INSERT INTO TABLE(Col1,Col2,Col3,Col4)VALUES (1,null,'abc','xyz')「 – snoopcommands