نمایش نتایج 1 تا 8 از 8

نام تاپیک: چگونگی ارسال یک Generic List به Stored Procedure

  1. #1
    کاربر دائمی آواتار hamide_kh
    تاریخ عضویت
    مرداد 1386
    محل زندگی
    روبروی مانیتور
    پست
    202

    چگونگی ارسال یک Generic List به Stored Procedure

    با عرض سلام خدمت دوستان
    من در برنامه ام یک List<T> دارم که اطلاعاتی در اون ذخیره میشه
    من می خوام تمام فیلدهاو سطور این لیست را در دیتا بیس ذخیره کنم،
    برای این کار کد زیر را نوشتم

    conn.open();
    cmd2.Connection = conn;
    cmd2.CommandText = "SpInsertFactorItems";
    cmd2.CommandType = CommandType.StoredProcedure;
    for (int i = 0; i < Class1.khar.Count; i++)
    {
    cmd2.Parameters.Clear();
    cmd2.Parameters.Add("@Code_Kala", SqlDbType.Int).Value = Class2.LList_Kharid[i].;
    cmd2.Parameters.Add("@Name_Kala", SqlDbType.NVarChar, 30).Value = Class2.LList_Kharid[i].;
    cmd2.Parameters.Add("@Tedad", SqlDbType.Int).Value = Class2.LList_Kharid[i].;
    cmd2.Parameters.Add("@Fi", SqlDbType.Int).Value = Class2.LList_Kharid[i].;
    cmd2.Parameters.Add("@Gheymat", SqlDbType.Int).Value = Class2.LList_Kharid[i].;
    cmd2.ExecuteNonQuery();
    }

    با این روش اطلاعات ذخیره میشه،
    اما فقط یکم دل می زنم چون این برنامه با asp.net هست در زمانی که سایت را آپلود کنم اگه بخواد به ازای هر سطر در لیست یکبار با sql ارتباط بر قرار کنه که فکر کنم توی سرعت تاثیر داره و خیلی طول می کشه که تمام لیست در دیتا بیس ذخیره بشه؟
    آیا راهی وجود داره که بشه تمام لیست را یکباره به صورت آرایه ای به دیتابیس و sp بفرستم؟

  2. #2

    نقل قول: درخواست راهنمایی درباره فرستاده یک List<T> به sp در دیتابیس

    نقل قول نوشته شده توسط hamide_kh مشاهده تاپیک
    با عرض سلام آیا راهی وجود داره که بشه تمام لیست را یکباره به صورت آرایه ای به دیتابیس و sp بفرستم؟
    سلام.
    البته که این کار میسر هستش. کافیه تا لیست مورد نظر رو بصورت XML یکبار Serialize کنید، و اونو به Stored Procedure خودتون ارسال کنید. سپس داخل SP، میتونید با استفاده از OpenXml یا دیگر دستوراتی که برای اینکار در نظر گرفته شده، XML مزبور رو بخونید و اونو یکباره در جدول خودتون Insert کنید.

    برای اطلاعات بیشتر به این سایت رجوع کنید.

    موفق باشید.

  3. #3
    کاربر دائمی آواتار hamide_kh
    تاریخ عضویت
    مرداد 1386
    محل زندگی
    روبروی مانیتور
    پست
    202

    نقل قول: چگونگی ارسال یک Generic List به Stored Procedure

    با عرض سلام و احترام خدمت شما آقای موسوی
    البته که این کار میسر هستش. کافیه تا لیست مورد نظر رو بصورت XML یکبار Serialize کنید، و اونو به Stored Procedure خودتون ارسال کنید. سپس داخل SP، میتونید با استفاده از OpenXml یا دیگر دستوراتی که برای اینکار در نظر گرفته شده، XML مزبور رو بخونید و اونو یکباره در جدول خودتون Insert کنید.
    من اصلا با دستورات xml کار نکرده ام و اون رفرنسی را هم که گذاشتید با vb بود واصلا متوجه نشدم چیکار کرده؟
    آیا باید یک فایل xml در کنار برنامه بسازم؟
    اگه ممکنه یکم بیشتر توضیح بدید؟
    تشکر فراوان از شما

  4. #4
    کاربر دائمی آواتار hamide_kh
    تاریخ عضویت
    مرداد 1386
    محل زندگی
    روبروی مانیتور
    پست
    202

    نقل قول: چگونگی ارسال یک Generic List به Stored Procedure

    با سلامی دوباره
    این نمونه کد را هم پیدا کردم اما واقعیتش هیچ چیز ازش نفهمیدم اگه ممکنه روی این تکه کد توضیح بدید(البته بی زحمت)
    public List<ImportJobMaterialsResult> ImportJobMaterials(int jobID, Stream stream, string coNumber, string coDesc, string xmlMapFile)
    {
    //Convert flat file to List<JobMaterialImport> using converter and XML mapping file
    //Mapping file passed from FlatFileHandler.ashx in web project
    FlatFileToObjectConverter<JobMaterialImport> converter = new FlatFileToObjectConverter<JobMaterialImport>(stream, xmlMapFile);
    List<JobMaterialImport> imports = converter.ConvertToList();
    imports = imports.Take(imports.Count - 2).ToList(); //last rows are bogus in flat-file

    //Generate XML and pass to sproc
    using (StringWriter sw = new StringWriter())
    {
    XmlSerializer xs = new XmlSerializer(typeof(List<JobMaterialImport>));
    xs.Serialize(sw, imports);
    try
    {
    //Pass materials into sproc
    string xml = sw.ToString().Replace("utf-16", "utf-8");
    return this.DataContext.ImportJobMaterials(xml, jobID, coNumber, coDesc).ToList();
    }
    catch (Exception exp)
    {
    Logger.Log("Error in JobManagementRepository.ImportJobMaterials", exp);
    }
    }
    return null;
    }

    و
    <ArrayOfJobMaterialImport xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <
    JobMaterialImport>
    <
    Area>BUILDING A</Area>
    <
    Phase>LIGHTING</Phase>
    <
    WorkCode>0</WorkCode>
    <
    WorkCodeTitle>Manually Assigned</WorkCodeTitle>
    <
    Description>4x1 1/2in. SQ BOX COMB KO</Description>
    <
    Quantity>2</Quantity>
    <
    TotalHours>10.46</TotalHours>
    </Job
    MaterialImport>
    <Job
    MaterialImport>
    <
    Area>BUILDING A</Area>
    <
    Phase>LIGHTING</Phase>
    <
    WorkCode>0</WorkCode>
    <
    WorkCodeTitle>Manually Assigned</WorkCodeTitle>
    <
    Description>#8x 3/4 P/H SELF-TAP SCREW</Description>
    <
    Quantity>4</Quantity>
    <
    TotalHours>0.28</TotalHours>
    </Job
    MaterialImport>
    <Job
    MaterialImport>
    <
    Area>BUILDING A</Area>
    <
    Phase>LIGHTING</Phase>
    <
    WorkCode>605</WorkCode>
    <
    WorkCodeTitle>Wiring and System Devices</WorkCodeTitle>
    <
    Description>1G TGL SWITCH PLATE - PLASTIC IVY</Description>
    <
    Quantity>2</Quantity>
    <
    TotalHours>0.89</TotalHours>
    </Job
    MaterialImport>
    </
    ArrayOfJobMaterialImport>

    و این هم پروسیجر
    CREATE PROCEDURE [ImportJobMaterials]
    @JobMaterialsXml AS VARCHAR(MAX),
    @JobID AS INT,
    @ChangeOrderNumber AS VARCHAR(10) = NULL,
    @ChangeOrderDescription AS VARCHAR(100) = NULL
    AS
    BEGIN
    DECLARE
    @XML AS XML

    DECLARE @MaterialsTable TABLE
    (
    ID INT IDENTITY(1,1),
    Area VARCHAR(250),
    Phase VARCHAR(250),
    WorkCodeID INT,
    WorkCodeTitle VARCHAR(250),
    MaterialTitle VARCHAR(250),
    Quantity DECIMAL(18,2),
    TotalHours DECIMAL(18,2)
    )

    SELECT @XML = @JobMaterialsXml

    INSERT INTO @MaterialsTable (Area, Phase, WorkCodeID, WorkCodeTitle, MaterialTitle, Quantity, TotalHours)
    SELECT M.Item.query('./Area').value('.','VARCHAR(250)') Area,
    M.Item.query('./Phase').value('.','VARCHAR(250)') WorkCode,
    M.Item.query('./WorkCodeID').value('.','INT') WorkCodeID,
    M.Item.query('./WorkCodeTitle').value('.','VARCHAR(250)') WorkCodeTitle,
    M.Item.query('./MaterialTitle').value('.','VARCHAR(250)') MaterialTitle,
    M.Item.query('./Quantity').value('.','DECIMAL(18,2)') Quantity,
    M.Item.query('./TotalHours').value('.','DECIMAL(18,2)') TotalHours
    FROM @XML.nodes('/ArrayOfJobMaterialImport/JobMaterialImport') AS M(Item)

    --Process the data
    END


    تشکر

  5. #5
    کاربر تازه وارد آواتار nPad.Net
    تاریخ عضویت
    آذر 1388
    محل زندگی
    شیراز
    پست
    56

    نقل قول: چگونگی ارسال یک Generic List به Stored Procedure

    نقل قول نوشته شده توسط hamide_kh مشاهده تاپیک

    من اصلا با دستورات xml کار نکرده ام و اون رفرنسی را هم که گذاشتید با vb بود واصلا متوجه نشدم چیکار کرده؟
    آیا باید یک فایل xml در کنار برنامه بسازم؟
    اگه ممکنه یکم بیشتر توضیح بدید؟
    سلام

    اگه نمی خواید با XML کار کنید، بد نیست یه نگاه به این مقاله بندازید.

    موفق باشید

  6. #6
    کاربر دائمی آواتار hamide_kh
    تاریخ عضویت
    مرداد 1386
    محل زندگی
    روبروی مانیتور
    پست
    202

    نقل قول: چگونگی ارسال یک Generic List به Stored Procedure

    با عرض سلام خدمت شما
    این نمونه از sql 2008 استفاده کرده،اگه ممکنه من با 2005 کار می کنم

  7. #7
    کاربر دائمی آواتار hamide_kh
    تاریخ عضویت
    مرداد 1386
    محل زندگی
    روبروی مانیتور
    پست
    202

    نقل قول: چگونگی ارسال یک Generic List به Stored Procedure

    سلام دوستان و بالاخص آقای موسوی کمکم نمی کنید

  8. #8
    کاربر تازه وارد آواتار nPad.Net
    تاریخ عضویت
    آذر 1388
    محل زندگی
    شیراز
    پست
    56

    نقل قول: چگونگی ارسال یک Generic List به Stored Procedure

    پروژه ای که تو این تاپیک هست رو دانلود کنید(نسخه 7.1) قسمت حذف به صورت گروهی انجام شده تابعی درDB تحت نام iter_charlist_to_tbl هست که فکر میکنم کمک زیادی بهتون میکنه!
    خروجی این تابع یه جدوله ، خیلی راحت میتونید با یه دستور insert کل جدول رو وارد DBکنید.
    موفق باشید

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •