یک مطلب تکمیلی
نظرات مطالب
مروری بر قابلیت جدید ASP.NET FriendlyUrls
ببخشید. باید همونجا میگفتم.
IIS 7.5 روی Windows Server 2008
من این برنامه رو تست کردم همیشه قسمت error را اجرا می کند و این پیغام می دهد
500 Internal Server Error
500 Internal Server Error
پاسخ به بازخوردهای پروژهها
آموزش TFS
بازخوردهای دوره
تزریق خودکار وابستگیها در برنامههای ASP.NET Web forms
تقریبا!
حال گاهی من از کنترل اصلی AccordionPane ارث برده و کنترل هایی را ایجاد میکنم که به صورت خودکار از سرویسهای امنیتی استفاده کرده و آیتمهای لازم (که کاربر جاری به آنها دسترسی دارد) را اضافه میکنم.
من یک کنترل آکاردیون دارم که دارای ساختاری شبه زیر است:
<Common:HomeAccordion runat="server"> <Common:HomeAccordionPane runat="server" HeaderText="Pane #1"> <Common:HomeAccordionItem runat="server" Text="Item #1"/> <Common:HomeAccordionItem runat="server" Text="Item #1"/> </Common:HomeAccordionPane> <Common:HomeAccordionPane runat="server" HeaderText="Pane #2"> <Common:HomeAccordionItem runat="server" Text="Item #1"/> <Common:HomeAccordionItem runat="server" Text="Item #1"/> </Common:HomeAccordionPane> </Common:HomeAccordion>
<Common:HomeAccordion runat="server"> <DF:HomeAccordionPaneBasic runat="server" /> <DF:HomeAccordionPaneSystem runat="server" /> <DF:HomeAccordionPaneMyAccount runat="server" /> </Common:HomeAccordion>
گویا این اقلام (که معمولا میتوانند کنترل هم نباشند - چون توسط والد رندر میشوند) جزو درخت صفحه نیستند - استفاده از ParseChildren در کنترل والد اجازه افزودن مجموعه کنترل هایی را میدهد)
از SQL server 2005 به بعد، پشتیبانی کاملی از XML توسط این محصول صورت میگیرد. در ادامه مروری خواهیم داشت بر نحوهی به روز رسانی مقادیر فیلدهایی از نوع XML در SQL Server .
در ابتدا جدول موقتی زیر را که شامل یک رکورد از نوع XML است، در نظر بگیرید:
DECLARE @tblTest AS TABLE (xmlField XML)
INSERT INTO @tblTest
(
xmlField
)
VALUES
(
'<Sample>
<Node1>Value1</Node1>
<Node2>Value2</Node2>
<Node3>OldValue</Node3>
</Sample>'
)
سعی اول:
DECLARE @newValue VARCHAR(50)
SELECT @newValue = 'NewValue'
UPDATE @tblTest
SET xmlField.modify('replace value of (/Sample/Node3)[1] with ' + @newValue)
The argument 1 of the XML data type method "modify" must be a string literal.
سعی دوم:
DECLARE @newValue VARCHAR(50)
SELECT @newValue = 'NewValue'
UPDATE @tblTest
SET xmlField.modify(
'replace value of (/Sample/Node3)[1] with sql:variable("@newValue")'
)
XQuery [@tblTest.xmlField.modify()]: The target of 'replace value of' must be a non-metadata attribute or an element with simple typed content, found 'element(NodeThree,xdt:untyped) ?'
سعی سوم:
DECLARE @newValue VARCHAR(50)
SELECT @newValue = 'NewValue'
UPDATE @tblTest
SET xmlField.modify(
'replace value of (/Sample/Node3/text())[1]
with sql:variable("@newValue")'
)
SELECT xmlField.value('(/Sample/Node3)[1]','varchar(50)') FROM @tblTest
و بله. کار میکنه!
XML ایی را که در ابتدا استفاده کردیم از نوع un-typed XML محسوب شده و هیچ schema ایی را برای آن در نظر نگرفتهایم، به همین جهت باید دقیقا مشخص کنیم که قصد داریم text این node را ویرایش نمائیم.
مشکل بعدی!
در ابتدا مثال زیر را در نظر بگیرید:
DECLARE @tblTest AS TABLE (xmlField XML)
INSERT INTO @tblTest
(
xmlField
)
VALUES
(
'<Sample>
<Node1>Value1</Node1>
<Node2>Value2</Node2>
<Node3></Node3>
</Sample>'
)
DECLARE @newValue VARCHAR(50)
SELECT @newValue = 'NewValue'
UPDATE @tblTest
SET xmlField.modify(
'replace value of (/Sample/Node3/text())[1]
with sql:variable("@newValue")'
)
SELECT xmlField.value('(/Sample/Node3)[1]','varchar(50)') FROM @tblTest
این عبارات T-SQL ، خلاصه بحث ما تا به اینجا هستند اما با یک تفاوت. نود 3 در اینجا خالی است.
اگر اسکریپت را اجرا کنید، هیچ تغییری را مشاهده نخواهید کرد. به عبارت دیگر به روز رسانی صورت نمیگیرد. در اینجا چون text این نود خالی است ، فرض SQL Server بر این خواهد بود که وجود ندارد، بنابراین این نود را به روز رسانی نخواهد کرد. به همین منظور باید برای به روز رسانی این نود، عبارت جدید را در جایی که text ندارد insert کرد (و نه replace).
DECLARE @newValue VARCHAR(50)
SELECT @newValue = 'NewValue'
UPDATE @tblTest
SET xmlField.modify(
'replace value of (/Sample/Node3/text())[1]
with sql:variable("@newValue")'
)
UPDATE @tblTest
SET xmlField.modify(
'insert text{sql:variable("@newValue")} into
(/Sample/Node3)[1] [not(text())]'
)
SELECT xmlField.value('(/Sample/Node3)[1]','varchar(50)') FROM @tblTest