Хранение строк SQL в XML XElement вместо String для сохранения разрывов строк - PullRequest
2 голосов
/ 22 июня 2010

Когда дело доходит до хранения SQL в коде, большинство людей используют строки:

Dim strSql As String = "Select Foo, Bar From FooBarTable Where Something = @Something"

Проблема в том, что когда у вас очень длинные строки SQL, их чтение в коде становится затруднительным. Обычно вы можете разделить строки следующим образом:

Dim strSql As String = "Select Foo, Bar From FooBarTable " & _
                       "Where Something = @Something"

Это вызывает ряд проблем:

  • Вы не можете скопировать его в SSMS или из нее
  • Он использует неэффективный способ (&) конкатенации строки (не то, чтобы это действительно имело значение, поскольку ваша БД на порядки медленнее, чем класс строки)

Так почему бы не хранить длинные строки SQL в виде System.XML.Linq.XElement?

Dim SQL = <SQL>
               Select Foo, Bar From FooBarTable
               Where Something = @Something
          </SQL>

Вы можете вызвать его в коде, используя SQL.Value.

С помощью этого метода вы можете сохранить разрывы строк и форматирование, чтобы было удобнее читать и копировать.


Мой вопрос, по сути, я наткнулся на хитроумный способ хранения многострочных строк SQL в коде, или я что-то здесь упустил? Кажется, это работает в моем коде, но я не уверен, насколько это эффективно.

Есть мысли?

Ответы [ 2 ]

2 голосов
/ 15 января 2012

вот как это использовать ... это работает очень хорошо

    Dim sFieldName As String = "MyField"
    Dim sTableName As String = "MyTable"
    Dim sValue As String = "MyValue"

    Dim xeSQL = <SQL>
        SELECT  <%= sFieldName %> AS Field1
        FROM
            <%= sTableName %> 
        WHERE
            <%= sFieldName %>  = '<%= sValue %>'
            </SQL>
2 голосов
/ 22 июня 2010

Я думаю, что это хороший способ размещения многострочных строковых констант в вашем коде. Мне это нравится, и я сомневаюсь, что это гораздо менее эффективно. Если вы запустите профилировщик производительности и обнаружите, что у вас есть проблемы с производительностью, вы всегда можете заменить их строковыми константами, но при разработке кода этот метод определенно проще при копировании и вставке команд SQL.

Вы можете просто использовать SQL.Value без вызова .ToString, потому что свойство Value является строкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...