2016-04-23 40 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