در توسینسو تدریس کنید

و

با دانش خود درآمد کسب کنید

نحوه ارسال لیست به StoredProcedure از طریق XML

گاهی اوقات برای کار با SP-Stored Procedure ها لازم است که یک List که تعداد مقادی آن می تواند متغیر باشد را به صورت یک پارامتر به یک SP بفرستیم. برای این کار راه حل های متفاوتی وجود دارد مانند استفاده از DataTable یا استفاده از متغیرهایی از نوع بایت یا همون image و حتی استفاده از متغیر های رشته ای. اما یکی از روشهای مناسب و اصولی برای این کار استفاده از XML هست. که گاهی اوقات از بک زبان برنامه نویسی مثل C# انجام می شه که در اینجا استفاده از این روش توضیح داده خواهد شد.ابتدا بصورت کلی نگاهی به یک کد نمونه برای این کار می اندازیم:

کد 1- نمونه SP هستش که قراره یک XML به اون ارسال بشه و مقدار های موجود در XML داخل یک جدول به نام TestTable درج بشه.

CREATE PROCEDURE [dbo].[InsertData]
(
    @XMLData XML
)
AS
BEGIN

	DECLARE @handle INT

	EXEC sp_xml_preparedocument @handle OUTPUT, @XMLData

	INSERT INTO
		TestTable (id)
	SELECT * FROM OPENXML (@handle, '/ArrayOfInt/int') WITH (id INT '.') 
		
	EXEC sp_xml_removedocument @handle
END

کد 2-همچنین کد زیر هم در C# استفاده میشه تا چند مقدار رو از طریق SP بالا درج کنه.

var valuesList = new List<int> {1, 5, 8};

var xmlSerialize = new XmlSerializer(typeof(List<int>));
var memoryStream = new MemoryStream();
                
xmlSerialize.Serialize(memoryStream, valuesList);

var resultXml = Encoding.UTF8.GetString(memoryStream.ToArray());
context.Database.ExecuteSqlCommand("EXEC [dbo].[InsertData] '" + resultXml + "'");

در کد 1 ابتدا یک پارامتر از نوع XML تعریف می کنیم سپس با استفاده از spxmlpreparedocument (توضیحات) پارمتر ورودی را در حافظه مقیم می کنیم تا از طریق handle به محتوای XML دسترسی داشته باشیم. در خط بعد هم از دستور Insert برای درج اطلاعات استفاده می کنیم . OPENXML (توضیحات) هم محتوای XML رو با استفاده از handle که آدرس سند XML می باشد واکشی می کنه. پارامتر دومی هم که در OPENXML می بینید مشخص می کنه که در محتوای XML ما نود ها-Node با چه نامی درج شده اند.در آخر هم با دستور spxmlremovedocument محتوای XML از حافظه آزاد می شود.در کد 2 با استفاده از کلاس XmlSerializer لیست انتخابی رو به XML تبدیل می کنیم و در memoryStream قرار میدیم و در آخر با استفاده از یک نمونه dbContext در ENtityFrameWork با توجه به پارامتر ، SP مورد نظر رو اجرا می کنیم. نمونه کد XML که در کد2 و متغیر resultXml تولید میشه بصورت زیر می باشد:

<?xml version="1.0"?>
<ArrayOfInt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <int>1</int>
  <int>5</int>
  <int>8</int>
</ArrayOfInt>

موفق باشید

نویسنده: نورالله ملک

منبع : انجمن تخصصی فناوری اطلاعات ایران

#ارسال_آرایه_از_طریق_پارامتر_به_sp #تفاوت_function_و_stored_procedures #ارسال_لیست_به_stored_procudure_در_sql #استفاده_از_xml_در_sp #stored_procedure_چیست #ارسال_لیست_به_storedprocedure #ارسال_لیست_به_stored_procedure #نحوه_استفاده_از_storedprocedure
1 نظر
حسین احمدی

نکته خیلی جالبی بود. استفاده های زیادی میشه کرد از این روش...

نظر شما
برای ارسال نظر باید وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

تو می تونی بهترین نتیجه رو تضمینی با بهترین های ایران بدست بیاری ، پس مقایسه کن و بعد خرید کن : فقط توی جشنواره پاییزه می تونی امروز ارزونتر از فردا خرید کنی ....