سلام
امروز یک ترفند جالب که به جرات میتونم بگم کمتر کسی ازش استفاده میکنه رو میخوام بهتون معرفی کنم.
همیشه برای نوشتن یک String در هنگام کدنویسی اگر به صورت چند خط بود مشکل داشتیم. به طور مثال فرض کنید میخواید یک متغیر ایجاد کنید و تکه کد SQL زیر رو توش بزارید.
WITH tree (pk_groupid, fk_parentid, level, name) as
(
SELECT pk_groupid, fk_parentid, 0 as level, name
FROM ClientGroup
WHERE pk_GroupID = '874F5359-39A1-4E57-AC21-FE162F19B64D'
UNION ALL
SELECT c2.pk_groupid, c2.fk_parentid, tree.level + 1, c2.name
FROM ClientGroup c2
INNER JOIN tree ON tree.fk_parentid = c2.pk_GroupID
)
SELECT *
FROM tree
اگر بخوایم این کارو انجام بدین مجبوریم یا تمام رشته متن مورد نظر رو توی یک خط بنویسیم ویا تو هر کد که به پایان میرسه با علائم + یا & خطوط رو بهم متصل کنیم. به شکل زیر:
Dim MyCommand = " WITH tree (pk_groupid, fk_parentid, level, name) as " & _
"(" & _
"SELECT pk_groupid, fk_parentid, 0 as level, name" & _
"FROM ClientGroup" & _
"WHERE pk_GroupID = '874F5359-39A1-4E57-AC21-FE162F19B64D'"
.
.
.
.
.
و وای به روزی که توی همچین متنی از علائم "" استفاده شده باشه !!
بریم سر اصل مطلب ... ترفند :
برخلاف زبان C# در زبان VB.Net امکان تعریف و نوشتن Xml به صورت مستقیم در محیط کدنویسی vb محیاست که این امکان به ما اجازه میده تا همچین متنی رو با قالب Xml در کدمون قرار بدیم و به راحتی بتونیم به عنوان یک رشته از Xml خارجش کنیم... به شکل زیر :
Dim MyCommand As String = (<MyQuery>
WITH tree (pk_groupid, fk_parentid, level, name) as
(
SELECT pk_groupid, fk_parentid, 0 as level, name
FROM ClientGroup
WHERE pk_GroupID = '874F5359-39A1-4E57-AC21-FE162F19B64D'
UNION ALL
SELECT c2.pk_groupid, c2.fk_parentid, tree.level + 1, c2.name
FROM ClientGroup c2
INNER JOIN tree ON tree.fk_parentid = c2.pk_GroupID
)
SELECT *
FROM tree
</MyQuery>).Value
به همین سادگی با اضافه کردن یک تگ با هر نامی (که اینجا من MyQuery استفاده کردم) میتونیم متنمون رو در محیط کدنویسی قرار بدیم. مقدار Value بازگشتی از این Xml همان متن ما خواهد بود.
نکته : این ترفند درصورتی قابل استفاده است که از علامت <> و علائم معنی دار برای Xml در متن استفاده نشده باشد.
موفق باشید