صفحه 1 از 2 12 آخرآخر
نمایش نتایج 1 تا 40 از 45

نام تاپیک: ADO.NET در دات نت

  1. #1

    Post ADO.NET در دات نت

    سلام
    شايد خيلي از دوستاني كه به تازگي به دات نت مهاجرت كرده باشن كمي مطالب ADO.NET در #C يا VB.NET براشون سخت باشه كما اينكه من هم اين تجربه رو داشتم. براي همين به اين فكر افتادم تا دانسته هاي خودم رو در اينجا بنويسم تا هم چيزي ياد گرفته باشيم هم مطالب رو دوره كرده باشيم.
    مطالبي كه در اين تايپيك نوشته ميشه از دانسته هاي خودم هستش پس قطعاً اشتباهاتي در اون ممكن هست وجود داشته باشه.


    چند تقاضا از دوستان عزيز دارم كه:
    1. در صورت مشاهده هرگونه اشتباه از طرف بنده (چه نحوي و چه لغوي) اون رو از طريق پيام خصوصي با دليل گوشزد كنند.
    2. در اين تايپيك سوال نفرماييد.
    3. تا اطلاع ثانوي پستي رو ارسال نفرماييد تا مطالب كامل بشه.
    همچنين ممكن هستش كه بدليل مشغله هاي كاري و درسي و ... مطالب كمي با تاخير ارسال بشه پس از صبر و حوصله شما متشكرم. سعي خواهم كه از مطالب مقدمه، تعريف و ... خودداري كنم بيشتر به كد بپردازم. دوستاني كه با مفاهيم اوليه و تعاريف ADO.NET ميخوان آشنا بشن مي تونن از تايپيك زير استفاده كنن:

    https://barnamenevis.org/showthread.php?t=33368
    https://barnamenevis.org/showthread.php?t=94296

    بعضي از دوستان كه تسلط دارن نيز مي تونن اين مطالب رو دنبال كنند:

    https://barnamenevis.org/showthread.php?t=101163
    https://barnamenevis.org/showpo...50&postcount=1
    https://barnamenevis.org/showpo...1&postcount=31




    اين تايپيك در طول كار ايندكس گذاري خواهد شد. پيش نيازهاي لازم براي دنبال كردن مطالب اين تايپيك:
    • آشنايي كلي يا جزئي با #C يا VB.NET
    • آشنايي با SQL Server
    • آشنايي به زبان SQL
    • ...
    به زودي در تالار Delphi.NET نيز مشابه اين تايپيك ايجاد خواهد شد.
    آخرین ویرایش به وسیله اوبالیت به بو : جمعه 16 مرداد 1388 در 20:20 عصر

  2. #2
    آخرین ویرایش به وسیله اوبالیت به بو : پنج شنبه 03 بهمن 1387 در 12:16 عصر

  3. #3

    Lightbulb اساس Load كردن اطلاعات

    اولين كاري كه معمولاً در يك برنامه پايگاه داده انجام ميشه بارگذاري اطلاعات از جدول بانك اطلاعاتي به يك كنترل نمايش دهنده مثل DataGridView هستش تا كاربر بتونه اطلاعاتي رو كه ثبت كرده رو ببينه. براي انجام اين كار بايد چند مرحله انجام بشه تا اطلاعات از جدول به DataGridView منتقل بشه.
    • ايجاد رشته اتصال و ارتباط بين برنامه و پايگاه داده
    • دستور فراخواني اطلاعات (ركورد ها)
    • حمل ركورد ها از جدول به برنامه
    ADO.NET براي اين كار چندين شي رو در اختيار شما قرار مي ده كه اگه به ترتيب اجرا بشن اين عمل انجام مي پذيره. براي روشن شدن مطلب به شكل بسيار ساده زير توجه كنيد:

    خطي كه بين برنامه و پايگاه داده كشيده شده باعث ميشه كه برنامه با پايگاه داده ارتباط برقرار كنه.
    اون آدمك كوچيكه اسمش sqlCommand هستش. كسي هستش كه دستور مي ده. اين آدمك مي گه كه براي من برو اطلاعات رو بازيابي كن اما چون خودش قدرت نداره به اون آدمك بزرگه مي گه كه اين كار رو انجام بده. اون آدمك بزرگه اسمش sqlDataAdapter هستش. sqlDataAdapter مياد دستور مورد نظر رو از sqlCommand ميگيره و ازش يه آدرس هم مي پرسه. اون آدرس sqlConnection هستش كه sqlDataAdapter بايد بره از اين آدرس اطلاعات رو دريافت كنه.
    پس آدمك بزرگه يعني sqlDataAdapter بهش گفتن كه از آدرس sqlConnection برو و دستور sqlCommand رو اجرا كن و اطلاعات رو بيار. sqlDataAdapter اين كار رو مي كنه و اطلاعات رو مياره به يه انبار به اسم DataSet. اين انبار دقيقاً همون Database هستش. با همون جدول ها، با همون فيلد ها، با همون اطلاعات!
    اين كار چه مزيتي داره؟ مزيتش اينه كه برنامه با DataBase درگير نميشه بلكه برنامه با DataSet كار مي كنه به همين دليل براي نمايش اطلاعات بايد اين دفعه بريم سراغ DataSet. خوب حالا ديگه كار خاصي نمونده DataSet به DataGridView وصل ميشه و اطلاعات نمايش داده ميشه.
    اين پايه و اساس كار هستش حالا بريم اين مباني رو با كدنويسي پياده سازيش كنيم.
    عکس های ضمیمه عکس های ضمیمه

  4. #4

    Lightbulb NameSpace هاي ADO.NET

    براي اجراي دستورات و انجام چهار عمل اصلي در برنامه هاي پايگاه داده اي يعني نمايش، درج، حذف و ويرايش بايد دو NameSpace رو در خارج از كلاس برنامه يعني قسمت Declaration برنامه تعريف كنيم:

    در #C:

    using System.Data;
    using System.Data.SqlClient;


    در VB.NET:

    Imports System.Data
    Imports System.Data.SqlClient

  5. #5

    Lightbulb ايجاد رشته اتصال و برقراري ارتباط با پايگاه داده

    براي ايجاد ارتباط با پايگاه داده نياز به يك رشته اتصال هستش. اين رشته ي اتصال درون يك Refrence از شي sqlConnection قرار ميگيره. همون طور كه اشاره كردم ما بايد يك Refrence داشته باشيم تا بتونيم اين رشته رو ايجاد كنيم:
    در #C:

    SqlConnection cnn = newSqlConnection();

    در VB.NET:

    Dim cnn AsNew SqlConnection

    Refrence مورد نظر ما اسمش رو من cnn گذاشتم. اين cnn خودش يه خاصيتي داره به اسم ConnectionString كه باعث ميشه اون رشته اتصال ساخته بشه:
    در #C:

    cnn.ConnectionString = "Data Source=COMPUTER1;initial catalog=StorDB ;User ID = Barnamenevis ;Password=ObalitjoOon;";

    در VB.NET:

    cnn.ConnectionString = "Data Source=COMPUTER1;Initial Catalog=StorDB ;User ID = Barnamenevis ;Password=ObalitjoOon"


    Data Source: نام كامپيوتر يا سروري هستش كه پايگاه داده در اون قرار گرفته و يا از اون نگه داري ميشه. مثلا اسم كامپيوتري كه من باهاش كار مي كنم COMPUTER1 هستش.
    Initial Catalog: اسم پايگاه داده اي هستش كه قراره باهاش كار كنم. پايگاه داده اي كه من باهاش كار مي كنم StorDB هستش.
    User ID: نام كاربري پايگاه داده هستش.
    Password: رمز عبور پايگاه داده هستش.
    درصورتيكه شما براي پايگاه داده خودتون هيچ User ID و password در نظر نگرفتين مي تونيد اين قسمت رو حذف و از Integrated Security استفاده كنيد:
    در #C:

    cnn.ConnectionString = "Data Source=Computer1;initial catalog=StorDB ;integrated security=true;";

    در VB.NET:

    cnn.ConnectionString = "Data Source=COMPUTER1;Initial Catalog=StorDB;Integrated Security=True"

    با استفاده از اين دستورات شما مي تونيد با پايگاه داده ارتباط برقرار كنيد.

  6. #6

    Lightbulb باز و بستن پايگاه داده

    با استفاده از دستورات پست قبلي شما تونستيد با پايگاه داده ارتباط برقرار كنيد اما اين رو در نظر داشته باشيد كه فقط ارتباط برقرار كرديد. يعني فايل پايگاه داده مورد نظر شما هنوز باز نشده. براي اين كار از متد Open شي sqlConnection استفاده مي كنيم:
    در #C:

    cnn.Open();

    در VB.NET:

    cnn.Open()


    شعار هميشگي كار با فايل ها: هر فايلي كه باز ميشه بايد بسته بشه. براي بستن فايل پايگاه داده از متد Close استفاده مي كنيم:
    در #C:

    cnn.Close();

    در VB.NET:

    cnn.Close()

  7. #7

    Lightbulb روال و متد Connect

    در كد نويسي بايد سعي كنيد تا جايي كه ممكن هست از تكرار پرهيز كنيد پس براي اينكه در كلاسهاي مختلف برنامه از كد نويسي اضافي پرهيز كرده باشيم ميايم يه روال در VB و يه متد در #C مي نويسيم تا كار برقراري ارتباط با پايگاه داده رو انجام بده. بعداً با اين پست زياد كار ميكنيم.
    در #C:

    public void Connect()
    {

    SqlConnection
    cnn =
    newSqlConnection();
    cnn.ConnectionString = "Data Source=Computer1;initial catalog=StorDB ;integrated security=true;";
    }

    در VB.NET:

    PrivateSub Connect()
    Dim cnn As New SqlConnection
    cnn.ConnectionString = "Data Source=COMPUTER1;Initial Catalog=StorDB ;Integrated Security=True"
    EndSub

    حالا در هرجاي برنامه براي اينكه بخوام ارتباط با پايگاه داده برقرار كنم () Connect رو صدا مي زنم:
    در #C:

    Connect();

    در VB.NET:

    Connect()

  8. #8

    Lightbulb شي sqlCommand، آدمك زورگو

    براي استفاده از دستورات SQL جهت فراخواني اطلاعات جدول در برنامه، بايد از شي sqlCommand استفاده كنيم. ما در كل نياز به دو چيز داريم:
    1. دستور SQL مورد نظر
    2. آدرس جدول پايگاه داده
    براي اين كار بايد يه object از شي sqlCommand داشته باشيم:
    در #C:

    sqlCommand cmd = new sqlCommand();

    در VB.NET:

    Dim cmd As New sqlCommand

    اين دستور باعث ميشه كه يه Refrence جديد در برنامه به اسم cmd ساخته بشه. حالا براي اينكه ما يه دستور SQL رو به اين Refrence ارجاع بديم بايد از خاصيت CommandText اون استفاده كنيم. حالا من مي خوام با استفاده از خاصيت CommandText اطلاعات جدول رو در فراخواني كنم:
    در #C:

    cmd.CommandText = "select * from Table";

    در VB.NET:

    cmd.CommandText = "select * from Table"

    در واقع با دستور بالا اون آدمك كوچيكه كه اسمش sqlCommand بود داره به cmd مي گه كه برام اطلاعات جدول Table رو Select كن. حالا cmd بهش مي گه كه از كجا برم اين اطلاعات رو بگيرم. آدرسش كجاست؟ جواب خاصيت Connection هستش كه بايد با Refrence قبلي يعني cnn مقداردهي بشه:
    در #C:

    cmd.Connection = cnn;

    در VB.NET:

    cmd.Connection = cnn

    حالا همه چيز آماده هستش تا اطلاعات جدول مورد نظر ما فراخواني بشه. هم دستور SQL رو داريم هم آدرس.

  9. #9

    Lightbulb شي sqlDataAdapter

    خوب حالا ما تونستيم يه دستور SQL كامل داشته باشيم. براي اينكه اطلاعات حمل بشه نياز به اون آدمك بزرگه داريم يعني sqlDataAdapter. بازهم يه Refrend از اين شي مي سازيم:
    در #C:

    SqlDataAdapter sda = newSqlDataAdapter();

    در VB.NET:

    Dim sda AsNew SqlDataAdapter()

    sqlDataAdapter يه سري فعاليتها داره كه مي تونه اونها رو انجام بده. من براي اينكه مي خوام اطلاعات رو فراخواني كنم از خاصيت SelectCommand اون استفاده مي كنم. از ديگر خاصيت هاي sqlDataAdapter ميشه به DeleteCommand ،insertCommand و UpdateCommand اشاره كرد.
    حالا اون آدمك بزرگه يعني sqlDataAdapter از sqlCommand مي پرسه كه دستور SQL مورد نظر + آدرس جدول پايگاه داده كجاست؟ براي اينكه كار رو ما انجام بديم بايد از خاصيت SelectCommand استفاده كنيم. من ميام اين خاصيت رو برابر cmd كه قبلاً تعريف كردم قرار مي دم:
    در #C:

    sda.SelectCommand = cmd;

    در VB.NET:

    sda.SelectCommand = cmd

    كار sqlDataAdapter تموم شد.

    سوال:
    شايد براي شما سوال بشه كه sda.SelectCommand از كجا مي فهمه كه دستور SQL و آدرس چيه؟ ما كه بهش مستقيم نگفتيم پس چي جوري اين اتفاق ميوفته؟
    جواب سادست. اگر دقت كنيد cmd يه خاصيت داشت به اسم CommandText يه خاصيت ديگه داشت به اسم Connection. جالبه بدونيد كه sda.SelectCommand هم اين خاصيت ها رو داره براي همين خودش تشخيص مي ده كه كدوم مقدار در كدو خاصيت بايد قرار بگيره. اگر به اين موضوع شك داريد دستورات زير رو اجرا كنيد و نتيجه كار رو ببينيد:
    در #C:

    MessageBox.Show(sda.SelectCommand .CommandText );
    MessageBox.Show(sda.SelectCommand .Connection .ToString ());

    در VB.NET:

    MsgBox(sda.SelectCommand.CommandText)
    MsgBox(sda.SelectCommand.Connection.ToString())

  10. #10

    Lightbulb منبع DataSet

    براي اينكه يه Refrence از DataSet داشته باشيم كد زير رو مي نويسيم:
    در #C:

    DataSet ds = newDataSet();

    در VB.NET:

    Dim ds AsNew DataSet()

    همون طور كه گفته شد sqlDataAdapter دستور و آدرس رو از sqlCommand گرفت و رفت سراغ DataBase. حالا بايد اطلاعات رو بگيره و بريزه درون انبار DataSet.
    براي اينكه DataSet ما پر بشه بايد اطلاعات درون sda يا sqlDataAdapter رو درون اين انبار Fill كنيم:
    در #C:

    cnn.Open();
    sda.Fill(ds ,
    "Barnamenevis");
    cnn.Close();

    در VB.NET:

    cnn.Open()
    sda.Fill(ds,
    "Barnamenevis")
    cnn.Close()

    cnn.Open: بانك اطلاعاتي رو باز مي كنه.
    Fiil: دستور Fill اطلاعات رو درون DataSet خالي مي كنه.
    sda.Fill (DataSet Refrence, "DataSet Name")
    DataSet Refrence: همون Refrence جديد(new) از نوع DataSet هستش.
    DataSet Name: براي DataSet برنامه يك اسم انتخاب مي كنيم.
    cnn.Close: بانك اطلاعاتي ما بسته ميشه.
    حالا انبار DataSet ما پر شد از اطلاعات Database و براي نمايش اطلاعات در برنامه بايد با DataSet كار كرد نه DataBase!

  11. #11

    Lightbulb تابع و متد LoadALL

    با روال و متد Connect آشنا شديم و براي صرفه جويي در كد ميايم LoadAll رو مي سازيم. اين پست در واقع در همه جاي برنامه كاربرد داره. يعني ميشه ازش به عنوان يه Refresh استفاده كرد:
    در #C:

    privateDataSet LoadAll()
    {
    Connect();
    cmd.CommandText = "select * from shelf";
    cmd.Connection = cnn;
    sda.SelectCommand = cmd;
    cnn.Open();
    sda.Fill(ds , "Barnamenevis");
    cnn.Close();
    return ds;
    }

    در VB.NET:

    PrivateFunction LoadAll() As DataSet
    Connect()
    cmd.CommandText = "select * from shelf"
    cmd.Connection = cnn
    sda.SelectCommand = cmd
    sda.SelectCommand.Connection = cnn
    cnn.Open()
    sda.Fill(ds, "Barnamenevis")
    cnn.Close()
    Return ds
    EndFunction

    حالا در هرجاي برنامه براي اينكه بخوام اطلاعات جدول پايگاه داده رو Refresh كنم () LoadAll رو صدا مي زنم:
    در #C:

    LoadAll();

    در VB.NET:

    LoadAll()

  12. #12

    Lightbulb نمايش اطلاعات در DataGridView

    حالا براي نمايش اطلاعات در DataGridView بايد DatagridView رو set كنم. دو تا خاصيت هستش كه باهاشون كار دارم:
    1. Data Source
    2. Data member
    Data Source اسم پايگاه داده هستش كه ما بهش DataSet رو معرفي مي كنيم چون قرار شد كه برنامه با DataBase كار نكنه. به Data member هم اسم DataSet رو مي ديم تا DataGridView ما اطلاعات رو نمايش بده. پس در قسمت Form_Load برنامه اين كد رو اضافه كنيد:
    در #C:

    LoadAll();
    dataGridView1.DataSource = ds;
    dataGridView1 .DataMember =
    "Barnamenevis";

    در VB.NET:

    LoadAll()
    DataGridView1.DataSource = ds
    DataGridView1.DataMember =
    "Barnamenevis"

  13. #13

    Arrow ليست برنامه Load كردن اطلاعات

    با كمي تصرف:

    در #C:

    using System.Data;
    using System.Data.SqlClient;
    .
    .
    .
    SqlConnection cnn = new SqlConnection();
    SqlDataAdapter sda = new SqlDataAdapter();
    SqlCommand cmd = new SqlCommand();
    DataSet ds = new DataSet();
    privatevoid Connect()
    {
    cnn.ConnectionString = "Data Source=Computer1;initial catalog=StorDB ;integrated security=true;";
    }
    private DataSet LoadAll()
    {
    Connect();
    cmd.CommandText = "select * from Table";
    cmd.Connection = cnn;
    sda.SelectCommand = cmd;
    cnn.Open();
    sda.Fill(ds , "Barnamenevis");
    cnn.Close();
    return ds;
    }
    private void Form1_Load(object sender, EventArgs e)
    {
    LoadAll();
    dataGridView1.DataSource = ds;
    dataGridView1 .DataMember ="Barnamenevis";
    }
    }
    }

    در VB.NET:

    Imports System.Data
    Imports System.Data.SqlClient
    PublicClass Form1
    Dim cnn As New SqlConnection()
    Dim cmd As New SqlCommand()
    Dim sda As New SqlDataAdapter()
    Dim ds As New DataSet()
    Private Sub Connect()
    cnn.ConnectionString = "Data Source=Computer1;initial catalog=StorDB ;integrated security=true;"
    End Sub
    Private Function LoadAll() As DataSet
    Connect()
    cmd.CommandText = "select * from Table"
    cmd.Connection = cnn
    sda.SelectCommand = cmd
    sda.SelectCommand.Connection = cnn
    cnn.Open()
    sda.Fill(ds, "Barnamenevis")
    cnn.Close()
    Return ds
    End Function
    PrivateSub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesMyBase.Load
    LoadAll()
    DataGridView1.DataSource = ds
    DataGridView1.DataMember = "Barnamenevis"
    End Sub
    End Class

  14. #14

    Lightbulb ثبت اطلاعات

    جهت ثبت اطلاعات در جدول دو راه دارم يا به صورت parameter ثبت كنم يا اينكه بيام Transaction ثبت كنم. فعلاً با Parameter كار مي كنيم.
    كاري كه من مي خوام اينجا انجام بدم اين هستش داخل دكمه Button مربوط به Insert كردن اطلاعات درون TextBox ها (يا هر كنترلي كه به عنوان ورودي عمل كند) رو درون يه ArrayList ميريزم و در همون جا يه دستور SQL مي نويسم سپس براي Value هاي دستور SQL كه نوشتم Parameter ها رو مقداردهي مي كنم. بعد اين دستور و Parameter ها رو به روال Insert كه خواهم ساخت مي فرستم و دستور رو اجرا مي كنم.
    و در آخر هم يه LoadAll مي كنم كه به عنوان Refresh برنامه ازش استفاده بشه.
    ميام دو تا Refrence براي sqlConnection و sqlCommand و يه ArrayList مي سازم:
    در #C:

    SqlConnection cnn = newSqlConnection();
    SqlCommand cmd = newSqlCommand();
    ArrayList arr = newArrayList();

    در VB.NET:

    Dim cnn AsNew SqlConnection()
    Dim cmd AsNew SqlCommand()
    Dim arr AsNew ArrayList()

    حالا تويه دكمه Button براي مقداردهي ArrayList مي نويسم:
    در #C:

    arr.Add(textBox1.Text);
    arr.Add(textBox2.Text);
    .
    .
    .

    در VB.NET:

    arr.Add(textBox1.Text);
    arr.Add(textBox2.Text);
    .
    .
    .

    حالا در ادامه دستور بالا درون Button دستور SQL رو مشخص مي كنيم:
    در #C:

    cmd.CommandText = "insert into Shelf(Field1,Field2)Values(@Field1,@Field1)";

    در VB.NET:

    cmd.CommandText = "insert into Shelf(Field1,Field2)Values(@Field1,@Field1)";

    بعد Parameter هاي موجود رو مقدار دهي مي كنم:
    در #C:

    cmd.Parameters.Clear();
    cmd.Parameters.Add("@Field1", SqlDbType.NVarChar).Value = arr[0].ToString();
    cmd.Parameters.Add("@Field2", SqlDbType.Int).Value =int.Parse ( arr[1].ToString());
    .
    .
    .

    در VB.NET:


    cmd.Parameters.Clear();
    cmd.Parameters.Add("@Field1", SqlDbType.NVarChar).Value = arr[0].ToString();
    cmd.Parameters.Add("@Field2", SqlDbType.Int).Value =int.Parse ( arr[1].ToString());
    .
    .
    .




    حالا بايد اين cmd رو براي يه روال يا متدي كه بحثش رو كردم بفرستم. اما قبل از ارسال بايد اون رو بسازم. اين روال يا متد اين كار رو انجام مي ده:
    1. اتصال به پايگاه داده
    2. مشخص كردن آدرس پايگاه داده جهت اجرا دستور SQL
    3. باز كردن پايگاه داده
    4. اجراي دستور SQL
    5. بستن پايگاه داده
    در #C:

    privatevoid Insert(SqlCommand cmd)
    {
    Connect();
    cmd.Connection = cnn;
    cnn.Open();
    cmd.ExecuteNonQuery();
    cnn.Close();
    }

    در VB.NET:

    PrivateSub Insert(ByVal cmd As SqlCommand)
    Connect()
    cmd.Connection = cnn
    cnn.Open()
    cmd.ExecuteNonQuery()
    cnn.Close()
    EndSub

    حالا كه متد رو ساختم دوباره بر ميگردم به Button و اين دستور رو به خط آخرش اضافه مي كنم:
    در #C:

    Insert(cmd);

    در VB.NET:

    Insert(cmd)

    حالا براي اينكه متوجه بشم كه اين ركورد ثبت شده ميام LoadAll رو كه در پست هاي قبلي نوشتيم رو بهش اضافه مي كنم:
    در #C:

    LoadAll();
    dataGridView1.DataSource = ds;
    dataGridView1.DataMember = "Barnamenevis";

    در VB.NET:

    LoadAll()
    dataGridView1.DataSource = ds
    dataGridView1.DataMember = "Barnamenevis"
    آخرین ویرایش به وسیله اوبالیت به بو : دوشنبه 11 آذر 1387 در 01:10 صبح

  15. #15

    Arrow ليست برنامه ثبت كردن اطلاعات در جدول

    با كمي تصرف:
    در #C:

    using System.Data.SqlClient;
    using System.Collections;
    .
    .
    .
    SqlConnection cnn = newSqlConnection();
    SqlDataAdapter sda = newSqlDataAdapter();
    SqlCommand cmd = newSqlCommand();
    DataSet ds = newDataSet();
    ArrayList arr = newArrayList();
    privatevoid Connect()
    {
    cnn.ConnectionString = "Data Source=COMPUTER1;Initial Catalog=storDB ;Integrated Security=True;";
    }
    privateDataSet LoadAll()
    {
    Connect();
    cmd.CommandText = "select * from Table";
    cmd.Connection = cnn;
    sda.SelectCommand = cmd;
    cnn.Open();
    sda.Fill(ds, "Barnamenevis");
    cnn.Close();
    return ds;
    }
    privatevoid Form1_Load(object sender, EventArgs e)
    {
    LoadAll();
    dataGridView1.DataSource = ds;
    dataGridView1.DataMember = "Barnamenevis";
    }

    privatevoid Insert(SqlCommand cmd)
    {
    Connect();
    cmd.Connection = cnn;
    cnn.Open();
    cmd.ExecuteNonQuery();
    cnn.Close();
    }
    privatevoid button1_Click(object sender, EventArgs e)
    {

    arr.Add(textBox1.Text);
    arr.Add(textBox2.Text);
    cmd.CommandText = "insert into Shelf(Field1,Field2)Values(@Field1,@Field2)";
    cmd.Parameters.Clear();
    cmd.Parameters.Add("@Field1", SqlDbType.NVarChar).Value = arr[0].ToString();
    cmd.Parameters.Add("@Field2", SqlDbType.Int).Value =int.Parse ( arr[1].ToString());

    Insert(cmd);
    LoadAll();
    dataGridView1.DataSource = ds;
    dataGridView1.DataMember = "Barnamenevis";
    }


    در VB.NET:

    Imports System.Data
    Imports System.Data.SqlClient
    Imports System.Collections
    PublicClass Form1
    Dim cnn AsNew SqlConnection()
    Dim cmd AsNew SqlCommand()
    Dim sda AsNew SqlDataAdapter()
    Dim ds AsNew DataSet()
    Dim arr AsNew ArrayList()
    PrivateSub Connect()
    cnn.ConnectionString = "Data Source=COMPUTER1Initial Catalog=storDB Integrated Security=True"
    EndSub
    PrivateFunction LoadAll() As DataSet
    Connect()
    cmd.CommandText = "select * from Table"
    cmd.Connection = cnn
    sda.SelectCommand = cmd
    sda.SelectCommand.Connection = cnn
    cnn.Open()
    sda.Fill(ds, "Barnamenevis")
    cnn.Close()
    Return ds
    EndFunction
    PrivateSub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
    LoadAll()
    DataGridView1.DataSource = ds
    DataGridView1.DataMember = "Barnamenevis"
    EndSub
    PrivateSub Insert(ByVal cmd As SqlCommand)
    Connect()
    cmd.Connection = cnn
    cnn.Open()
    cmd.ExecuteNonQuery()
    cnn.Close()
    EndSub
    PrivateSub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    arr.Add(TextBox1.Text)
    arr.Add(TextBox2.Text)
    cmd.CommandText = "insert into Shelf(Field1,Field2)Values(@Field1,@Field2)"
    cmd.Parameters.Clear()
    cmd.Parameters.Add("@Field1", SqlDbType.NVarChar).Value = arr(0).ToString()
    cmd.Parameters.Add("@Field2", SqlDbType.Int).Value = Integer.Parse(arr(1).ToString())

    Insert(cmd)
    LoadAll()
    DataGridView1.DataSource = ds
    DataGridView1.DataMember = "Barnamenevis"
    EndSub
    EndClass

    آخرین ویرایش به وسیله اوبالیت به بو : دوشنبه 11 آذر 1387 در 01:39 صبح

  16. #16

    Lightbulb حذف كردن اطلاعات

    حذف كردن اطلاعات دقيقاً مشابه درج كردن اطلاعات در جدول هستش.
    تنها تفاوتي كه وجود داره در دستور SQL هستش كه درونش يه شرط قرار ميگيره و اون شرط مقدارش از يه parameter گرفته ميشه. اين مقدار گرفتن متفاوت هستش. مي تونه يه كد باشه كه درون يه TextBox هستش. مي تونه يه ID باشه كه مثلاً وقتي كاربر رويه يه ركورد از DataGridview كليك كرد برگشت داده بشه و ...
    به هر حال من ساده ترينش رو مثال مي زنم و در مرحله بعد به نحو ديگري اين Parameter رو مقدار دهي مي كنيم.
    ميام دو تا Refrence براي sqlConnection و sqlCommand و يه ArrayList مي سازم:
    در #C:

    SqlConnection cnn = newSqlConnection();
    SqlCommand cmd = newSqlCommand();
    ArrayList arr = newArrayList();

    در VB.NET:

    Dim cnn AsNew SqlConnection()
    Dim cmd AsNew SqlCommand()
    Dim arr AsNew ArrayList()

    حالا تويه دكمه Button براي مقداردهي ArrayList مي نويسم:
    در #C:

    arr.Add(textBox1.Text);

    در VB.NET:

    arr.Add(textBox1.Text)

    حالا در ادامه دستور بالا درون Button دستور SQL رو مشخص مي كنيم:
    در #C:

    cmd.CommandText = "Delete from Table Where ID= @ID)";

    در VB.NET:

    cmd.CommandText = "Delete from Table Where ID= @ID)"

    بعد Parameter رو مقدار دهي مي كنم:
    در #C:

    cmd.Parameters.Clear();
    cmd.Parameters.Add("@ID", SqlDbType.Int).Value =int.Parse ( arr[0].ToString());

    در VB.NET:

    cmd.Parameters.Clear()
    cmd.Parameters.Add("@ID", SqlDbType.Int).Value =int.Parse ( arr[0].ToString())






    حالا بايد اين cmd رو براي يه روال يا متدي كه براي Delete قراره بسازم بفرستم. اما قبل از ارسال بايد اون رو بسازم. اين روال يا متد اين كار رو انجام مي ده:
    1. اتصال به پايگاه داده
    2. مشخص كردن آدرس پايگاه داده جهت اجرا دستور SQL
    3. باز كردن پايگاه داده
    4. اجراي دستور SQL
    5. بستن پايگاه داده
    در #C:

    privatevoid Delete(SqlCommand cmd)
    {
    Connect();
    cmd.Connection = cnn;
    cnn.Open();
    cmd.ExecuteNonQuery();
    cnn.Close();
    }

    در VB.NET:

    PrivateSub Delete(ByVal cmd As SqlCommand)
    Connect()
    cmd.Connection = cnn
    cnn.Open()
    cmd.ExecuteNonQuery()
    cnn.Close()
    EndSub

    حالا كه متد رو ساختم دوباره بر ميگردم به Button و اين دستور رو به خط آخرش اضافه مي كنم:
    در #C:

    Delete(cmd);

    در VB.NET:

    Delete(cmd);

    حالا براي اينكه متوجه بشم كه اين ركورد حذف شده ميام LoadAll رو كه در پست هاي قبلي نوشتيم رو بهش اضافه مي كنم:
    در #C:

    LoadAll();
    dataGridView1.DataSource = ds;
    dataGridView1.DataMember = "Barnamenevis";

    در VB.NET:

    LoadAll()
    dataGridView1.DataSource = ds
    dataGridView1.DataMember = "Barnamenevis"
    آخرین ویرایش به وسیله اوبالیت به بو : دوشنبه 11 آذر 1387 در 01:28 صبح

  17. #17

    Arrow ليست برنامه حذف كردن اطلاعات

    با كمي تصرف...
    در #C:

    using System.Data.SqlClient;
    using System.Collections;
    .
    .
    .
    SqlConnection cnn = newSqlConnection();
    SqlDataAdapter sda = newSqlDataAdapter();
    SqlCommand cmd = newSqlCommand();
    DataSet ds = newDataSet();
    ArrayList arr = newArrayList();
    privatevoid Connect()
    {
    cnn.ConnectionString =
    "Data Source=COMPUTER1;Initial Catalog=storDB ;Integrated Security=True;";
    }
    privateDataSet LoadAll()
    {
    Connect();
    cmd.CommandText =
    "select * from Table";
    cmd.Connection = cnn;sda.SelectCommand = cmd;cnn.Open();sda.Fill(ds,
    "Barnamenevis");
    cnn.Close();
    return ds;
    }
    privatevoid Form1_Load(object sender, EventArgs e){LoadAll();dataGridView1.DataSource = ds;dataGridView1.DataMember = "Barnamenevis";
    }

    privatevoid Delete(SqlCommand cmd)
    {
    Connect();
    cmd.Connection = cnn;
    cnn.Open();
    cmd.ExecuteNonQuery();
    cnn.Close();
    }
    privatevoid button1_Click(object sender, EventArgs e)
    {

    arr.Add(textBox1.Text);
    arr.Add(textBox2.Text);
    cmd.CommandText = "Delete from Table Where ID= @ID)";

    cmd.Parameters.Clear();
    cmd.Parameters.Add("@ID", SqlDbType.Int).Value =int.Parse ( arr[0].ToString());

    Delete(cmd);
    LoadAll();
    dataGridView1.DataSource = ds;
    dataGridView1.DataMember =
    "Barnamenevis";
    }


    در VB.NET:

    Imports System.Data
    Imports System.Data.SqlClient
    Imports System.Collections
    PublicClass Form1
    Dim cnn AsNew SqlConnection()
    Dim cmd AsNew SqlCommand()
    Dim sda AsNew SqlDataAdapter()
    Dim ds AsNew DataSet()
    Dim arr AsNew ArrayList()
    PrivateSub Connect()
    cnn.ConnectionString =
    "Data Source=COMPUTER1Initial Catalog=storDB Integrated Security=True"
    EndSub
    PrivateFunction LoadAll() As DataSet
    Connect()
    cmd.CommandText =
    "select * from Table"
    cmd.Connection = cnn
    sda.SelectCommand = cmd
    sda.SelectCommand.Connection = cnn
    cnn.Open()
    sda.Fill(ds,
    "Barnamenevis")
    cnn.Close()
    Return ds
    EndFunction
    PrivateSub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
    LoadAll()
    DataGridView1.DataSource = ds
    DataGridView1.DataMember =
    "Barnamenevis"
    EndSub
    PrivateSub Delete(ByVal cmd As SqlCommand)
    Connect()
    cmd.Connection = cnn
    cnn.Open()
    cmd.ExecuteNonQuery()
    cnn.Close()
    EndSub
    PrivateSub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    arr.Add(TextBox1.Text)
    arr.Add(TextBox2.Text)
    cmd.CommandText = "Delete from Table Where ID= @ID)"

    cmd.Parameters.Clear()
    cmd.Parameters.Add("@ID", SqlDbType.Int).Value =int.Parse ( arr[0].ToString())

    Delete(cmd)
    LoadAll()
    DataGridView1.DataSource = ds
    DataGridView1.DataMember =
    "Barnamenevis"
    EndSub
    End
    Class

    آخرین ویرایش به وسیله اوبالیت به بو : دوشنبه 11 آذر 1387 در 01:38 صبح

  18. #18

    Lightbulb ويرايش كردن اطلاعات

    جالبه. ويرايش كردن اطلاعات نيز دقيقاً مانند ثبت كردن اطلاعات و حذف كردن اطلاعات هستش.
    تنها تفاوتي كه وجود داره در دستور SQL هستش كه درونش يه شرط قرار ميگيره و اون شرط مقدارش از يه parameter گرفته ميشه و فيلدها يك به يك با Parameter ها مقدار دهي ميشن.(يا به اصطلاح Set ميشن) اين مقدار گرفتن مي تونه مقاديري باشه كه درون يه TextBox هستش. شرط نيز مي تونه يه ID باشه كه مثلاً وقتي كاربر رويه يه ركورد از DataGridview كليك كرد برگشت داده بشه و يا يك عبارت در TextBox و ...
    به هر حال من ساده ترينش رو مثال مي زنم و در مرحله بعد به نحو ديگري اين Parameter رو مقدار دهي مي كنيم.
    ميام دو تا Refrence براي sqlConnection و sqlCommand و يه ArrayList مي سازم:
    در #C:

    SqlConnection cnn = newSqlConnection();
    SqlCommand cmd = newSqlCommand();
    ArrayList arr = newArrayList();
    در VB.NET:

    Dim cnn AsNew SqlConnection()
    Dim cmd AsNew SqlCommand()
    Dim arr AsNew ArrayList()
    حالا تويه دكمه Button براي مقداردهي ArrayList مي نويسم:
    در #C:

    arr.Add(textBox1.Text);
    arr.Add(textBox2.Text);
    arr.Add(textBox3.Text);
    .
    .
    .
    در VB.NET:

    arr.Add(textBox1.Text)
    arr.Add(textBox2.Text)
    arr.Add(textBox3.Text)
    .
    .
    .
    حالا در ادامه دستور بالا درون Button دستور SQL رو مشخص مي كنيم:
    در #C:

    cmd.CommandText =
    "Update set Field1=@Field1,Field2=@Field2 Where ID=@ID";
    در VB.NET:

    cmd.CommandText =
    "Update set Field1=@Field1,Field2=@Field2 Where ID=@ID"
    بعد Parameter هاي موجود رو مقدار دهي مي كنم:
    در #C:

    cmd.Parameters.Clear();
    cmd.Parameters.Add("@Field1", SqlDbType.NVarChar).Value = arr[0].ToString();
    cmd.Parameters.Add("@Field2", SqlDbType.Int).Value =int.Parse ( arr[1].ToString());
    cmd.Parameters.Add("@ID", SqlDbType.Int).Value =int.Parse ( arr[2].ToString());
    .
    .
    .
    در VB.NET:


    cmd.Parameters.Clear();
    cmd.Parameters.Add("@Field1", SqlDbType.NVarChar).Value = arr[0].ToString()
    cmd.Parameters.Add("@Field2", SqlDbType.Int).Value =int.Parse ( arr[1].ToString())
    cmd.Parameters.Add("@ID", SqlDbType.Int).Value =int.Parse ( arr[2].ToString())
    .
    .
    .
    حالا بايد اين cmd رو براي يه روال يا متدي كه بحثش رو كردم بفرستم. اما قبل از ارسال بايد اون رو بسازم. اين روال يا متد اين كار رو انجام مي ده:
    1. اتصال به پايگاه داده
    2. مشخص كردن آدرس پايگاه داده جهت اجرا دستور SQL
    3. باز كردن پايگاه داده
    4. اجراي دستور SQL
    5. بستن پايگاه داده

    در #C:

    private void Update(SqlCommand cmd)
    {
    Connect();
    cmd.Connection = cnn;
    cnn.Open();
    cmd.ExecuteNonQuery();
    cnn.Close();
    }
    در VB.NET:

    Private Sub Update(ByVal cmd As SqlCommand)
    Connect()
    cmd.Connection = cnn
    cnn.Open()
    cmd.ExecuteNonQuery()
    cnn.Close()
    EndSub
    حالا كه متد رو ساختم دوباره بر ميگردم به Button و اين دستور رو به خط آخرش اضافه مي كنم:
    در #C:

    Update(cmd);
    در VB.NET:

    Update(cmd)
    حالا براي اينكه متوجه بشم كه اين ركورد ويرايش شده ميام LoadAll رو كه در پست هاي قبلي نوشتيم رو بهش اضافه مي كنم:
    در #C:

    LoadAll();
    dataGridView1.DataSource = ds;
    dataGridView1.DataMember = "Barnamenevis";
    در VB.NET:

    LoadAll()
    dataGridView1.DataSource = ds
    dataGridView1.DataMember = "Barnamenevis"
    آخرین ویرایش به وسیله اوبالیت به بو : چهارشنبه 25 دی 1387 در 14:18 عصر دلیل: اصلاح متد

  19. #19

    Arrow ليست برنامه ويرايش كردن اطلاعات

    با كمي تصرف...
    در #C:

    using System.Data.SqlClient;
    using System.Collections;
    .
    .
    .
    SqlConnection cnn = newSqlConnection();
    SqlDataAdapter sda = newSqlDataAdapter();
    SqlCommand cmd = newSqlCommand();
    DataSet ds = newDataSet();
    ArrayList arr = newArrayList();
    privatevoid Connect()
    {
    cnn.ConnectionString = "Data Source=COMPUTER1;Initial Catalog=storDB ;Integrated Security=True;";
    }
    privateDataSet LoadAll()
    {
    Connect();
    cmd.CommandText = "select * from Table";
    cmd.Connection = cnn;
    sda.SelectCommand = cmd;
    cnn.Open();
    sda.Fill(ds, "Barnamenevis");
    cnn.Close();
    return ds;
    }
    privatevoid Form1_Load(object sender, EventArgs e)
    {
    LoadAll();
    dataGridView1.DataSource = ds;
    dataGridView1.DataMember = "Barnamenevis";
    }

    privatevoid Update(SqlCommand cmd)
    {
    Connect();
    cmd.Connection = cnn;
    cnn.Open();
    cmd.ExecuteNonQuery();
    cnn.Close();
    }
    privatevoid button1_Click(object sender, EventArgs e)
    {

    arr.Add(textBox1.Text);
    arr.Add(textBox2.Text);arr.Add(textBox3.Text);

    cmd.CommandText = "Update set Field1=@Field1,Field2=@Field2 Where ID=@ID";
    cmd.Parameters.Clear();
    cmd.Parameters.Add("@Field1", SqlDbType.NVarChar).Value = arr[0].ToString();
    cmd.Parameters.Add("@Field2", SqlDbType.Int).Value =int.Parse ( arr[1].ToString());
    cmd.Parameters.Add("@ID", SqlDbType.Int).Value =int.Parse ( arr[2].ToString());

    Update(cmd);
    LoadAll();
    dataGridView1.DataSource = ds;
    dataGridView1.DataMember = "Barnamenevis";
    }

    در VB.NET:

    Imports System.Data
    Imports System.Data.SqlClient
    Imports System.Collections
    PublicClass Form1
    Dim cnn AsNew SqlConnection()
    Dim cmd AsNew SqlCommand()
    Dim sda AsNew SqlDataAdapter()
    Dim ds AsNew DataSet()
    Dim arr AsNew ArrayList()
    PrivateSub Connect()
    cnn.ConnectionString = "Data Source=COMPUTER1Initial Catalog=storDB Integrated Security=True"
    EndSub
    PrivateFunction LoadAll() As DataSet
    Connect()
    cmd.CommandText = "select * from Table"
    cmd.Connection = cnn
    sda.SelectCommand = cmd
    sda.SelectCommand.Connection = cnn
    cnn.Open()
    sda.Fill(ds, "Barnamenevis")
    cnn.Close()
    Return ds
    EndFunction
    PrivateSub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
    LoadAll()
    DataGridView1.DataSource = ds
    DataGridView1.DataMember = "Barnamenevis"
    EndSub
    PrivateSub Update(ByVal cmd As SqlCommand)
    Connect()
    cmd.Connection = cnn
    cnn.Open()
    cmd.ExecuteNonQuery()
    cnn.Close()
    EndSub
    PrivateSub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    arr.Add(textBox1.Text)
    arr.Add(textBox2.Text)
    arr.Add(textBox3.Text)
    cmd.CommandText = "Update set Field1=@Field1,Field2=@Field2 Where ID=@ID"
    cmd.Parameters.Clear();
    cmd.Parameters.Add("@Field1", SqlDbType.NVarChar).Value = arr[0].ToString()
    cmd.Parameters.Add("@Field2", SqlDbType.Int).Value =int.Parse ( arr[1].ToString())
    cmd.Parameters.Add("@ID", SqlDbType.Int).Value =int.Parse ( arr[2].ToString())

    Update(cmd)
    LoadAll()
    DataGridView1.DataSource = ds
    DataGridView1.DataMember = "Barnamenevis"
    EndSub
    EndClass
    آخرین ویرایش به وسیله اوبالیت به بو : دوشنبه 11 آذر 1387 در 01:44 صبح

  20. #20

    Lightbulb چند روال و متد

    مشاهده فرموديد كه ثبت كردن، حذف كردن و ويرايش كردن اطلاعات خيلي شبيه هم بودن. تقريباً تمامي كدهاشون با هم برابر به غير از درستور SQL و Parameter ها. حالا براي اينكه از تكرار كد جلوگيري بشه من يه روال براي VB و يه متد براي #C مي نويسم و بعد از مقداردهي Parameter ها اونها رو صدا مي زنم و اسمش رو ميزارم UID مخفف Update Insert Delete:
    در #C:

    private void UID(SqlCommand cmd)
    {
    Connect();
    cmd.Connection = cnn;
    cnn.Open();
    cmd.ExecuteNonQuery();
    cnn.Close();
    }

    در VB.NET:

    Private Sub Insert(ByVal cmd As SqlCommand)
    Connect()
    cmd.Connection = cnn
    cnn.Open()
    cmd.ExecuteNonQuery()
    cnn.Close()
    EndSub

    با اين كار ديگه نياري به اون متدها و روال هاي Insert و Update و Delete نيست و تمامي اين كارها در يك جا انجام ميشه.
    حالا درون Button هاي مربوطه بعد از پر كردن ArrayList و Parameter ها كد زير رو مي نويسم:
    در #C:

    UID(cmd);

    در VB.NET:

    UID(cmd)

  21. #21

    نقل قول: ADO.NET در دات نت

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

  22. #22

    Lightbulb استفاده از يك متغير Static در اتصال به پايگاه داده

    كاربر Afshin_Zavar در پيام خصوصي خود به بنده فرمودند:
    در آموزشهایی که در رابطه با اتصال و کار با DB داده بودید، یک نکته برام گنگ بود
    شما مرتبا کانکت میشید، یه کوئری می گیرید و دیسکانکت میشید.
    اینکه مرتبا قطع و وصل میشید، سرباری روی سرور اعمال نمیکنه ؟
    بايد عرض كنم كه جناب Afshin_Zavar درست مي فرمايند و براي اينكه از اتصال هاي پي در پي جلوگيري بشه بايد ما يك راه حلي رو پيدا كنيم:
    فعلاً #C:
    يك كلاس به نام SingleTon ايجاد مي كنيم و در اون كد زير رو مينويسيم:

    classSingleTon
    {
    publicstaticSqlConnection conn = null;
    public SingleTon()
    {
    if (conn == null)
    {
    conn =
    newSqlConnection();
    Console.WriteLine("First Connection");
    }
    else
    Console.WriteLine("Connected");
    }

    حال در كلاس برنامه اتصال رو تست مي كنيم:

    classProgram
    {
    staticvoid Main(string[] args)
    {
    SingleTon obj1 = newSingleTon();
    SingleTon obj2 = newSingleTon();
    SingleTon obj3 = newSingleTon();
    SingleTon obj4 = newSingleTon();
    Console.ReadKey();
    }
    }


  23. #23

    Lightbulb مفهوم Transaction

    Transaction يك نوع ذخيره اطلاعات در DB هستش كه بسيار بسيار مطمئن و پركاربرد هستش.
    فرض كنيد كه قراره پولي از حساب x به حساب y ريخته بشه. اولين كاري كه انجام ميشه يه مبلغي از حساب x كسر ميشه. دومين كاري كه انجام ميشه همون مبلغ به حساب y اضافه ميشه. حالا اگر در بين راه اتفاقي بيوفته كه اين كار به طور كامل انجام نشه؛ مثلاً مبلغ از حساب x كسر بشه اما قبل از اينكه به حساب y ريخته بشه برق قطع بشه، در شبكه اختلال بوجود بياد ويا... اون وقت اگر از transaction استفاده نشه چي پيش مياد؟ خودتون مي دونيد چي پيش مياد.
    حالا اگر از Transaction استفاده بشه در اينجور مواقع اطلاعات برميگرده ميشه. به طور كلي در Transaction يا اطلاعات ثبت ميشه يا نميشه. اگر ثبت بشه مي گن Commit شده و اگر ثبت نشه مي گن RollBack شده.
    كل Transaction همين بود. معمولاً در جاهايي كه ثبت اطلاعات حياتي هست ازش استفاده ميشه مثل انتقال حساب، سبد خريد، حسابداري،...

  24. #24

    Lightbulb اساس كار Transaction

    اگر در قسمتهاي قبلي يادتون باشه ما مقادير درون TextBox ها يا كنترل هاي ورودي رو در يك ArrayList مي ريختيم و بعد اونها رو به صورت Parameters به SQLCommand پاس مي داديم و سپس ExecuteNoneQuery مي كرديم. در واقع قسمت سخت افزاري كار همون متد هاي Insert، Update و Delete هستن كه اطلاعات رو ثبت مي كنن. در Transaction ديگه به اون صورت استفاده نميشه و جهت استفاده از 4 تا متد يا روال استفاده مي كنيم:

    1. يه متد كه عمل مورد نظر رو مشخص مي كنه. مثلاً ثبت، ويرايش و ... و يك متغير رو به 3 متد بعدي در پاس مي ده. (من از متد UID استفاده مي كنم با كمي تغييرات {به پستهاي قبل مراجعه كنيد})
    2. BeginTransaction يا شروع تراكنش
    3. Commit يا متدي كه اطلاعات رو ثبت مي كنه.
    4. RollBack يا متدي كه اطلاعات رو برگشت مي ده.

    پس من احتياج به 4 متد دارم.

  25. #25

    Post نقل قول: ADO.NET در دات نت

    با سلام خدمت شما. حتماً سایت وبگذر را می شناسید. این سایت برای نمایش آمار سایت ها به بازدیدکنندگان از جاوا اسکریپت استفاده می کند.
    مثل این کد :

    کد HTML:
    <!-- Begin WebGozar.com Counter code -->
    <script type="text/javascript" language="javascript" src="http://www.webgozar.ir/c.aspx?Code=950306&amp;t=counter" ></script>
    <noscript><a href="http://www.webgozar.com/counter/stats.aspx?code=950306" target="_blank">آمار</a></noscript>
    <!-- End WebGozar.com Counter code -->
    حال از شما خواهشمندم که کدی را که می توان به وسیلۀ آن کد یا نوشته ای دیگر را در این اسکریپت ها برگشت داد را برایم بنویسید.

    منظور من این است که اگر ما کدی مانند کد سایت وبگذر در سایتی قرار دهیم چگونه می توان آن را کنترل کرد و نوشته یا کد مورد نظر را به سایتی که اسکریپت در آن قرار دارد برگشت داد.


    با تشکر

  26. #26
    کاربر دائمی
    تاریخ عضویت
    آبان 1387
    محل زندگی
    خراسان رضوی
    پست
    677

    نقل قول: ADO.NET در دات نت

    با تشکر
    فقط ای کاش می شد همه را یک جا دانلود کرد

  27. #27
    کاربر دائمی
    تاریخ عضویت
    آبان 1387
    محل زندگی
    خراسان رضوی
    پست
    677

    نقل قول: ADO.NET در دات نت

    بعضي از دوستان كه تسلط دارن نيز مي تونن اين مطالب رو دنبال كنند:



    با تشکر فراوان دو تا از لینک هاتون کار نمی کنه

  28. #28

    نقل قول: ADO.NET در دات نت

    سلام دوست عزیز واقا عالی بودددددددددددددد
    موفق باشید

  29. #29

    نقل قول: ADO.NET در دات نت

    اگه میشه طریقه وارد کردن داده در اکسل رو هم همین طور واضح بگین
    Mer30

  30. #30
    کاربر دائمی آواتار aminghaderi
    تاریخ عضویت
    بهمن 1387
    محل زندگی
    مشهد
    پست
    1,557

    نقل قول: ADO.NET در دات نت

    شما که بزرگواری کردید و این تاپیک رو قرار دادیید چه خوب بود نحویه نمایش فیلدی از دیتابیس رو داخل یه کنترل مثلا "textbox" رو هم توضیح می دادید، شاید بدرد یکی مثل من می خورد!!!
    دو روزه درگیر این موضوع هستم ، در همین سایت راهنمایی تا حدی شده ولی کامل نیست و شاید من کاملش رو پیدا نکردم؟!
    به هر حال اگه خود جناب obalitjoOon زحمتش رو بکشند(که خیلی عالیه!) وگرنه یکی از اساتید زحمت توضیح رو بکشند.
    من که به شخصه خسته شدم!
    با تشکر مخصوص از obalitjoOon بابت زحمتی که کشیدند.

  31. #31
    کاربر دائمی آواتار aminghaderi
    تاریخ عضویت
    بهمن 1387
    محل زندگی
    مشهد
    پست
    1,557

    نقل قول: ADO.NET در دات نت

    با اجازه اساتید محترم سایت
    مثالی برای اتصال و انقیاد دیتابیس به یک کنترل معمولی
    مثل Textbox
    (نحویه نمایش فیلدی از دیتابیس داخل یه کنترل تکست باکس)

    https://barnamenevis.org/showth...d=1#post763330

  32. #32
    کاربر دائمی آواتار zoofa
    تاریخ عضویت
    اردیبهشت 1387
    محل زندگی
    اصفهان
    سن
    34
    پست
    287

    نقل قول: ADO.NET در دات نت

    با سلام
    خسته نباشيد
    1 - اگه ممكنه روشي براي تشخيص وجود يك ركورد در ديتابيس توضيح بديد
    2- اگه ممكنه روشي براي دسترسي به تك تك فيلدهاي ركورد بگيد
    قبلاً با adodb كه كار مي كرديم يك سري متد به نام هاي
    movenext , movelast , eof , bof و امثال اين داشت كه مي شد تمام ديتا را پيمايش كرد.
    آيا تو اين ado.net چنين چيزي وجود داره؟
    ممنون

  33. #33

    نقل قول: ADO.NET در دات نت

    ممنونم از این همه اطلاعات مفید
    میتونی بگی چجوری میتونیم اطلاعات دیتا ست رو بندازیم رو دیتا گرید ویو؟

  34. #34

    نقل قول: ADO.NET در دات نت

    فکر کنم قسمت refresh همون load all ایراد داشته باشه ، چون وقتی من تویه یه برنامه از اون استفاده کرد بجای اینکه جدول رفرش بشه دوباره همون تعداد سطر به جدول اضافه شد .
    ولی در کل , عالی بود
    خدا خیرت بده جون

  35. #35
    کاربر دائمی آواتار Hossis
    تاریخ عضویت
    آبان 1386
    محل زندگی
    بیرجند
    پست
    1,731

    نقل قول: ADO.NET در دات نت

    برای برنامه های تحت ویندوز از بین adodb , ado و sql کدام بهتر و سریعتر است؟

  36. #36
    کاربر دائمی آواتار zoofa
    تاریخ عضویت
    اردیبهشت 1387
    محل زندگی
    اصفهان
    سن
    34
    پست
    287

    نقل قول: ADO.NET در دات نت

    تو تحت ویندوز من تغییری بین ADO.NET و ADODB ندیدم اما تو وب ADODB خیلی کند و بد است ولی ADO.NET خیلی خوب و سریع بود.

    نقل قول نوشته شده توسط Hossis مشاهده تاپیک
    برای برنامه های تحت ویندوز از بین adodb , ado و sql کدام بهتر و سریعتر است؟

  37. #37

    نقل قول: ADO‎.Net در دات نت

    نقل قول نوشته شده توسط aa_shiyari_1386 مشاهده تاپیک
    با سلام
    خسته نباشيد
    1 - اگه ممكنه روشي براي تشخيص وجود يك ركورد در ديتابيس توضيح بديد
    2- اگه ممكنه روشي براي دسترسي به تك تك فيلدهاي ركورد بگيد
    قبلاً با adodb كه كار مي كرديم يك سري متد به نام هاي
    movenext , movelast , eof , bof و امثال اين داشت كه مي شد تمام ديتا را پيمايش كرد.
    آيا تو اين ado‎.Net چنين چيزي وجود داره؟
    ممنون


    منم ممنون مي شم اگه كسي در اين باره توضيح بده.

  38. #38

    Lightbulb نقل قول: ADO‎.Net در دات نت

    با سلام خدمت دوستان

    براي سوالات دوست عزيز aa_shiyari_1386 چند تا راه حل دارم كه شايد مفيد باشند. البته اين راههايي كه خدمتتون عرض ميكنم در واقع يه جور ميانبر هستند ولي چون بعد از جستجوي زياد راههاي اصلي و بهتري براي اينكار پيدا نكردم به اجبار از اين روشها استفاده كردم :

    1- روشي براي تشخيص يك ركورد در ديتابيس :

    كلاً اگه بخوايم بفهميم ركوردي تو جدول وجود داره يا نه قاعدتاً بايد حداقل يك يا چند فيلد اون ركورد رو تو جدول جستجو كنيم. مسلماً اگه جستجو نتيجه اي داشت يعني اينكه ركورد موجوده اگه نه كه هيچي.
    اين متد رو مينويسم و توضيحش رو در ادامه خواهيد ديد :


    private int ExistRecordByID(int idNumber)
    {
    int result;
    DataSet data;
    SqlDataAdapter adapter;
    string connectionString = " ";
    try

    {
    data =
    new DataSet();
    adapter =
    new SqlDataAdapter("SELECT * FROM Persons WHERE PersonID=" + idNumber, connectionString);
    adapter.Fill(data,
    "PersonsTable");
    if (data.Tables["PersonsTable"].Rows.Count > 0)
    result = 1;
    else

    result = 0;
    }
    catch (SqlException ex)
    {
    result = -1;
    MessageBox.Show(ex.Message);
    }
    finally

    {
    data =
    null;
    adapter =
    null;
    }
    return result;
    }
    }
    توضيحات : فرض كنيد جدولي به اسم Persons داريم كه اطلاعات مربوط به پرسنل يك شركت رو نگهداري ميكنه. فيلد PersonID كد يكتايي را به عنوان آيدي هر شخص نگهداري ميكنه. فرض كنيم كه ميخوايم براساس فيلد آيدي بفهميم كه آيا كارمند بخصوصي موجوده يا نه (البته با فيلدهاي ديگه اي هم ميشه جستجو كرد ولي بنده در اين مثال از آيدي استفاده كردم چون يكتاست). متد ExistByRecordID كد آيدي كارمند مورد نظر رو ميگيره و با استفاده از يك دستور اسكيو ال تمامي ركوردهايي رو كه آيديشون برابر مقدار مورد نظره پيدا ميكنه و تو جدولي در ديتاست ميريزه. مسلماً چون آيدي يك كد يكتا هست بنابراين در هر باز جستجو فقط يك ركورد رو تو ديتاست ميريزه (البته اگه اون ركورد موجود باشه!). ركوردها در جدولي به اسم PersonsTable ريخته ميشن. و با استفاده از يك دستور شرطي بررسي ميشه ركورد وجود داره يا نه. اگه موجود بود متغيري به اسم result مقدار 1 رو ميگيره (به نشانه موجود بودن ركورد) و اگه موجود نبود 0 ميگيره (به نشانه عدم وجود ركورد). و اگر هم در عمليات خطايي بوجود اومد 1- رو به نشانه وجود خطا ميگيره و در آخر متغير return ميشه.

    نكته1 : ميتونستيم مقدار بازگشتي متد رو bool تعريف كنيم ولي من int تعريف كردم كه اگه خطايي پيش اومد كاربر از وجود اون (با مقدار 1-) مطلع بشه.
    نكته2 : اين روش براي جاهايي كه تعداد ركوردهاي جداول زيادن كارايي مناسبي نداره (چون مبجوريم براي جستجوي ركورد مورد نظر كليه ركوردهاي جداول مورد نظر پيمايش كنيم)

    در حال حاضر بنده به شخصه جز اين راه روش ديگه اي رو نديدم. دوستان اگه روش بهتري سراغ دارند خوشحال ميشيم ارائه كنند.

    سوال دوم دوستمون aa_shiyari_1386 رو در پست بعدي توضيح ميدم.

  39. #39

    Lightbulb نقل قول: ADO‎‎.Net در دات نت

    روشي براي دسترسي به تك تك فيلدهاي ركورد :

    براي دسترسي به فيلدهاي يك ركورد اول بايد اون فيلد رو واكشي كرد. براي واكشي ركورد مورد نظر اين بار از فيلدهاي نام و نام خانوادگي استفاده مي كنم. فرض كنيم نام و نام خانوادگي رو در جدول جداگانه (به صورت دو فيلد) در نظر گرفتيم (چون بعضي از دوستان رو ديدم كه نام و نام خانوادگي رو در يك فيلد ذخيره ميكنن).
    فرض كنيد جدول با اين فيلدها داريم (همون جدول Persons يا كارمندان شركت) :
    Persons Fields :
    PersonID
    FirstName
    LastName
    HomePhone
    MobPhone
    Address
    Comments
    .
    .
    .

    حالا ميايم متد قبلي رو با نام ExistRecordByName بازنويسي ميكنيم (ايندفعه خودتون انجام بدين) كه براساس فيلدهاي نام و نام خانوادگي بررسي كه آيا ركورد مورد نظر موجوده يا نه! و يك متد ديگه مينويسيم كه فيلدهاي ركورد مورد نظر رو تحويل ما بده :

    privatestring GetCurrentRecordFields(string firstName, string lastName)
    {
    string dataValue = null;
    SqlConnection connection;
    SqlCommand command;
    SqlDataReader data;

    try
    {
    connection = newSqlConnection(" ");
    command = newSqlCommand("SELECT * FROM Persons WHERE "FirstName=@FirstName AND LastName=@LastName", connection);
    command.Parameters.AddWithValue("@FirstName", firstName);
    command.Parameters.AddWithValue("@LastName", lastName);
    connection.Open();
    data = command.ExecuteReader();
    while (data.Read())
    {
    dataValue += "PersonID = " + data.GetString(0);
    dataValue += "FirstName = " + data.GetString(1);
    dataValue += "LastName = " + data.GetString(1);
    dataValue += "HomePhone = " + data.GetString(2);
    dataValue += "MobPhone = " + data.GetString(3);
    dataValue += "Address = " + data.GetString(4);
    dataValue += "Comments = " + data.GetString(5);
    }
    connection.Close();
    }
    catch (SqlException ex)
    {
    dataValue = "error";
    MessageBox.Show(ex.Message);
    }
    finally
    {
    data = null;
    command = null;
    connection = null;
    }
    return dataValue;
    }

    توضيحات : اين متد محتويات كليه فيلدهاي ركورد مورد نظر رو در قالب يك رشته (string) به ما تحويل ميده. البته ميشه به روشهاي ديگه كار كرد. مثلاً بجاي dataValue بيايم تك تك مقادير رو تو تكست باكسهايي كه روي فرم گذاشتيم قرار بديم. اين متد براساس firstName و lastName كه كاربر مشخص ميكنه ركورد مورد نظر رو پيدا ميكنه و با استفاده از يك شئ SqlDataReader كه وظيفه اش خوندن فيلدهاي يك يا چند ركورده فيلدها رو واكشي ميكنم و عمليات لازم رو انجام ميديم. حالا ميتونيم از اين دوتا متد استفاده كنيم :

    privatevoid btnSearch_Click(object sender, EventArgs e)
    {
    if (ExistRecordByName(txtFirstName.Text, txtLastName.Text))
    {
    MessageBox.Show(GetCurrentRecordFields(txtFirstName.Text, txtLastName.Text));
    }
    else
    MessageBox.Show(" ");
    }


    اميدوارم مفيد واقع بشه
    همگي موفق و پيروز باشيد

  40. #40

    نقل قول: ليست برنامه ويرايش كردن اطلاعات

    سلام میشه در مورد قسمت مقداردهی پارامترها بیشتر توضیح بدید چون برنامه من اون قسمت رو error میگیره . همچنین میخواستم بدونم حتما باید از datgridview استفاده کرد ؟ ایا برنامه شما اطلاعات رو در داخل datagridview ,اپدیت میکنه؟

صفحه 1 از 2 12 آخرآخر

برچسب های این تاپیک

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

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