vb .net CDATA для хранения многострочной строки SQL, смешанной с переменными VB

Я использую 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()

person user1973900    schedule 22.01.2013    source источник


Ответы (2)


Попробуйте использовать 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
person Sam Axe    schedule 22.01.2013

Я повторно отправляю вариант своего ответа из "Многострочные строки в VB.NET "потому что это актуально.

В основном вам нужно завершить теги CDATA перед переменной VB, а затем повторно добавить ее после, чтобы 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
person Nelson    schedule 06.06.2014