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

نام تاپیک: آموزش ado.net 3.5

  1. #1

    آموزش ado.net 3.5

    از این پس در اینجا به آموزش های مفیدی خواهم پرداخت
    ايجاد رابطه بين داده‌ها (relation)
    براي اين كار از كلاس System. Data. Datarelation
    در مثال زير پس از ايجاد يك dataset دوجدول داخل آن ايجاد كرده ، يكي را ولد و ديگري را فرزند قرار مي دهيم و سپس بين اين دو جدول رابطه‌اي برقرار مي‌كنيم بدين صورت كه ابتدا يك data relation تعریف كرده، سپس نام ركورد و جدول parent و نام ركورد جدول child را نيز وارد و ارتباط را برقرار مي‌سازيم. به قطعه کد زير دقت نمائيد :

    using System;
    using System.Data;

    namespace CreateDataRelation
    {
    class Program
    {
    static void Main(string[] args)
    {
    DataSet ds = new DataSet();

    // Create the parent table and add to the DataSet
    DataTable dt1 = new DataTable("Table-1");
    dt1.Columns.Add("Id1", typeof(int));
    dt1.Columns.Add("Id2", typeof(int));
    dt1.Columns.Add("Field1", typeof(string)).MaxLength = 50;
    ds.Tables.Add(dt1);

    // Create the child table and add to the DataSet
    DataTable dt2 = new DataTable("Table-2");
    dt2.Columns.Add("Id3", typeof(int));
    dt2.Columns.Add("Id1", typeof(int));

    dt2.Columns.Add("Id2", typeof(int));
    dt2.Columns.Add("Field2", typeof(string)).MaxLength = 50;
    ds.Tables.Add(dt2);

    // Create the data relation and add to the DataSet
    DataRelation dr = new DataRelation("DataRelation",
    new DataColumn[] { dt1.Columns["Id1"], dt1.Columns["Id2"] },
    new DataColumn[] { dt2.Columns["Id1"], dt2.Columns["Id2"] },
    true);
    ds.Relations.Add(dr);

    try
    {
    AddParentRecord(dt1, 1,10, "Value 1.1");
    AddParentRecord(dt1, 2,20, "Value 1.2");

    AddChildRecord(dt2, 100, 1,10, "Value 2.100");
    AddChildRecord(dt2, 101, 2,20, "Value 2.101");
    AddChildRecord(dt2, 102, 3,30, "Value 2.102");
    }
    catch (Exception ex)
    {
    Console.WriteLine("Error: {0}\n", ex.Message);
    }

    Console.WriteLine("Press any key to continue.");
    Console.ReadKey();
    }

    private static void AddParentRecord(
    DataTable dt, int id1, int id2, string field1)
    {
    Console.WriteLine("Adding parent record: {0}, {1}, {2}",
    id1, id2, field1);
    dt.Rows.Add(new object[] { id1, id2, field1 });
    Console.WriteLine("Done.\n");
    }

    private static void AddChildRecord(
    DataTable dt, int id3, int id1, int id2, string field2)
    {
    Console.WriteLine("Add child record: {0}, {1}, {2}, {3}",
    id3, id1, id2, field2);
    dt.Rows.Add(new object[] { id3, id1, id2, field2 });
    Console.WriteLine("Done.\n");
    }
    }
    }




    وضيح : در مثال بالا از متد زیر برای رابطه بين دو جدول استفاده شده است.
    Data relation (string relation name, data column parent col, data column child col)
    كه در آن :
    Relation name : نام رابطه‌اي مي باشد كه به جداولمان نسبت مي دهيم.
    Parent col : نام فيلد يا ستوني از جدول والد مي باشد كه مي خواهيم رابطه را بر روي آن برقرار كنيم.
    Child cd : نام فيلد يا ستوني از جدول فرزند مي باشد كه رابطه بر روي آن ستون برقرار خواهد شد.
    PATARELATION : به 6 نوع Overload مي شود كه متد بالا نيز يكي از اين روش‌ها بوده اين شش روش عبارتند از :
    DataRelation(string relationName, DataColumn parentCol, DataColumn childCol)
    DataRelation(string relationName, DataColumn[] parentCols, DataColumn[] childCols)
    DataRelation(string relationName, DataColumn parentCol, DataColumn childCol, bool
    createConstraints)
    DataRelation(string relationName, DataColumn[] parentCols, DataColumn[] childCols,
    bool createConstraints)
    DataRelation(string relationName, string parentTableName, string childTableName,
    string[] parentColumnNames, string[] childColumnNames, bool isNested)
    DataRelation(string relationName, string parentTableName, string
    parentTableNamespace, string childTableName, string childTableNamespace, string[]
    parentColumnNames, string[] childColumnNames, bool isNested)

    بعد از اينكه برنامه سعي كرد تا مقداري را در جدول فرزند قرار دهد كه آن مقدار قبلاً در جدول والد وارد نشده بود، سيستم خطايي را به كاربر نشان داد.

  2. #2

    ايجاد و اجراي پرس و جوي يك dataset با استفاده از liNQ

    فرض مي كنيم مي خواهيد با استفاده از LINQ يك پرس و جو بين دو جدول را از طريق يك Dataset ايجاد نمائيد. ابتدا به مثالي كه در زير آورده شده است دقت كنيد.


    using System;
    using System.Data;
    using System.Data.SqlClient;
    using System.Linq;
    namespace LinqToDataSetQuery{
    class Program {
    static void Main(string[] args)
    { string connectString = "Data Source=(local);" + "Integrated security=SSPI;Initial Catalog=AdventureWorks;"; string sqlSelect = "SELECT * FROM Production.Product; " + "SELECT * FROM Production.ProductInventory;";
    // Create the data adapter to retrieve data from the database
    SqlDataAdapter da = new SqlDataAdapter(sqlSelect, connectString);

    // Create table mappings da.TableMappings.Add("Table", "Product"); da.TableMappings.Add("Table1", "ProductInventory"); // Create and fill the DataSet DataSet ds = new DataSet( ); da.Fill(ds);

    // Create the relationship between the Product and // ProductInventory tables DataRelation dr = ds.Relations.Add("Product_ProductInventory", ds.Tables["Product"].Columns["ProductID"], ds.Tables["ProductInventory"].Columns["ProductID"]); DataTable product = ds.Tables["Product"];
    DataTable inventory = ds.Tables["ProductInventory"]; var query = from p in product.AsEnumerable( ) join i in inventory.AsEnumerable( ) on p.Field<int>("ProductID") equals i.Field<int>("ProductID") where p.Field<int>("ProductID") < 100 select new { ProductID = p.Field<int>("ProductID"), Name = p.Field<string>("Name"), LocationID = i.Field<short>("LocationID"), Quantity = i.Field<short>("Quantity") };
    foreach (var q in query)
    { Console.WriteLine("{0} - {1}: LocationID = {2} => Quantity = {3}", q.ProductID, q.Name, q.LocationID, q.Quantity); }
    Console.WriteLine("\nPress any key to continue.");
    Console.ReadKey( );
    }
    }
    }

    linq تكنولوژي جديدي است كه در دات نت فريم و رك 3.5 عرضه شده است. linq اين امكان را به شما مي دهد تا با يك سري قواعد استاندارد بر روي هر نوع داده اي به يك شيوه دسترسي و كنترل داشته باشيد. همانطوريكه مي دانيد هر نوع به روزرساني يا جستجو يا نمايش و ... بنابر منبع داده ها و نوع داده ها و زبان برنامه نويسي با نوع داده و ... ديگر در طرز نوشتن برنامه تفاوت دارد، در حالي كه با linq تمامي اين تفاوت ها برداشته شده و اگر با متد تعريف شده در linq كدمان را بنويسييم ديگر نگران نوع داده يا منبع آن نيستيم چون براي هر نوعي فقط يك شيوه استاندارد به نام linq موجود است براي مثال قطعه كد زير را در نظر بگيريد كه از روي آرايه‌اي از رشته ها كه در آنها رنگ هاي مختلفي ذخيره شده است آنهايي كه طول كمتر از 5 حرف را دارند براي ما برمي گرداند.


    using System;
    using System.Linq;
    class Program
    {
    static void Main(string[] args)
    {
    string[] colors = {"Red", "Orange", "Yellow", "Green",
    "Blue", "Indigo", "Violet"};
    var colorQuery = from color in colors where color.Length <= 5 orderby color select color;
    foreach (string s in colorQuery)
    Console.WriteLine(s);
    Console.WriteLine("\nPress any key to continue.");
    Console.ReadKey( );
    }



    حال به مثال قبل دقت كنيد. همان تكنيكي كه براي بازيابي اطلاعات dataset به كار برده شده در اينجا نيز براي بازيابي كلمات كمتر از 5 حرف به كار برده شده قواعد و كلمات كليدي (key words) كه در اين زبان به كار برده مي شود به شرح زير مي باشد:
    From : با استفاده از كلمه from منبع داده را مشخص مي كنيم. شايان ذكر است كه در اينجا نيازي به اين نداريم كه نوع داده را نيز مشاهده كنيم زيرا كامپايلر ويژوال استديو در زمان اجرا خود به خود با توجه به محتويات، نوع داده ها را نيز مشخص مي كند.
    Join : براي ايجاد رابطه بين چند منبع داده از كلمه join استفاده مي شود. اين دستور شبيه دستور inner join درزبان T-SQL مي باشد و تابع همان قوانين نيز هست.
    Where : از كلمه where براي فيلتر كردن داده ها با يك يا چند شرط خاص استفاده مي كنيم. براي ادغام شرط ها نيز از دستورات AND ( ) يا OR (||) استفاده مي كنيم.
    Orderby : براي مرتب سازي نتايج از اين دستور استفاده مي شود، اين دستور نيز همانند دستور order by در زبان T-SQL بوده و مقدار پيش فرض آن صعودي يا Ascending مي باشد براي مرتب كردن به صورت نزولي مقدار آن برابر با descending قرار مي دهيم.
    Group : اين دستور نيز شبيه د ستور group by در دستورات T-SQL مي باشد.
    حال به مثال خودمان برمي گرديم.
    مراحل انجام كار به صورت زير مي باشد:
    در مرحله اول مي بايست منبع داده رابراي LINQ مشخص نمائيم. براي اينكار مي بايست Dataset را از روي داده هاي مناسب پر كنيم. كه اين كار را از طريق dataadapter و دستور SQL Select انجام مي دهيم.
    در مرحله بعدي با متدي كه در مثال هاي قبل گفته شد ، بين دو جدول رابطه (relation) برقرار مي كنيم. و سپس دو datatable تعريف كرده و هركدام آنها را برابر با يكي از جداول درون dataset قرار مي دهيم.
    مرحله بعد شامل ايجاد يك متغير براي linq و تعريف دستورات آن براساس قواعد بالا مي باشد. در آخرين مرحله نيز براي اجراي كدهاي linq كافي است از دستور foreach استفاده كنيم تا حاصل خواسته شده به ما برگردانده شود.








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

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