2

我正在使用 CDATA 来“按原样”存储所有多行 SQL 字符串(感谢一些 stackoverflow 旧答案),如下所示:

Dim cmd As String = <![CDATA[
INSERT INTO devices
VALUES (
    NULL , 
    'ONE', 
    'TWO', 
    (
        SELECT manufacturer_id FROM manufacturers WHERE manufacturer_name = "Bloom"
    )
)
]]>.Value()

问题是我需要使用 VB 变量来阻止它。还有另一种方法而不是多个 CDATA 吗?

<![CDATA[ ...... ]]>.Value() + myVBvar +  <![CDATA[ ...... ]]>.Value()
4

2 回答 2

5

尝试使用 SqlParameters

Dim commandString As String = <![CDATA[
  INSERT INTO blah VALUES (@One, @Two, @Three, @n)
 ]]>,Value()

Using command As SqlCommand = new SqlCommand(commandString, connection)
  command.Parameters.AddWithValue("@One", valueOne)
  command.Parameters.AddWithValue("@Two", valueTwo) '  etc...

  '  command.execute
End Using
于 2013-01-22T21:22:14.233 回答
1

我正在从“ VB.NET 中的多行字符串”重新发布我的答案的变体,因为它是相关的。

您基本上必须在 VB 变量之前终止 CDATA 标记,然后在之后重新添加它,这样 CDATA 就不会捕获 VB 代码。您需要将整个代码块包装在标签中,因为您将拥有多个 CDATA 块。

Dim cmd As String = <sql><![CDATA[
INSERT INTO devices
VALUES (
  NULL , 
  ']]><%= varOne %><![CDATA[', 
  ']]><%= varTwo %><![CDATA[', 
  (
    SELECT manufacturer_id
    FROM manufacturers
    WHERE manufacturer_name = "]]><%= manufacturerName %><![CDATA["
  )
)
]]></sql>.value
于 2014-06-06T17:40:55.673 回答