PDA

View Full Version : ADO.NET در دات نت



اوبالیت به بو
چهارشنبه 06 آذر 1387, 23:52 عصر
سلام
شايد خيلي از دوستاني كه به تازگي به دات نت مهاجرت كرده باشن كمي مطالب ADO.NET در #C يا VB.NET براشون سخت باشه كما اينكه من هم اين تجربه رو داشتم. براي همين به اين فكر افتادم تا دانسته هاي خودم رو در اينجا بنويسم تا هم چيزي ياد گرفته باشيم هم مطالب رو دوره كرده باشيم.
مطالبي كه در اين تايپيك نوشته ميشه از دانسته هاي خودم هستش پس قطعاً اشتباهاتي در اون ممكن هست وجود داشته باشه.


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


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

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


http://barnamenevis.org/forum/showthread.php?t=101163
http://barnamenevis.org/forum/showpost.php?p=352650&postcount=1
http://barnamenevis.org/forum/showpost.php?p=461971&postcount=31




اين تايپيك در طول كار ايندكس گذاري خواهد شد. پيش نيازهاي لازم براي دنبال كردن مطالب اين تايپيك:

آشنايي كلي يا جزئي با #C يا VB.NET
آشنايي با SQL Server
آشنايي به زبان SQL
...
به زودي در تالار Delphi.NET نيز مشابه اين تايپيك ايجاد خواهد شد.

اوبالیت به بو
چهارشنبه 06 آذر 1387, 23:54 عصر
تكميل مي شود...


مفاهيم و مقدمات:


اساس Load كردن اطلاعات (http://barnamenevis.org/forum/showpost.php?p=639894&postcount=3)
NameSpace هاي ADO.NET (http://barnamenevis.org/forum/showpost.php?p=639899&postcount=4)

شي SQLConnection:


ايجاد رشته اتصال و برقراري ارتباط با پايگاه داده (http://barnamenevis.org/forum/showpost.php?p=639905&postcount=5)
باز و بسته كردن پايگاه داده (http://barnamenevis.org/forum/showpost.php?p=639909&postcount=6)

شي SQLCommand:


شي SQlCommand، آدمك زورگو! (http://barnamenevis.org/forum/showpost.php?p=640384&postcount=8)

شي SQLDataAdapter:


شي SQlDataAdapter - آشنايي جزئي (http://barnamenevis.org/forum/showpost.php?p=640399&postcount=9)

شي SQLDataReader:


بزودي...

شي DataSet:


منبع DataSet - آشنايي (http://barnamenevis.org/forum/showpost.php?p=640402&postcount=10)

استفاده از Transaction ها:


مفهوم Transaction (http://www.barnamenevis.org/forum/showpost.php?p=667386&postcount=23)
اساس كار Transaction
(http://www.barnamenevis.org/forum/showpost.php?p=667407&postcount=24)

الگوهاي طراحي:


استفاده از SingleTon Pattern در وصل شدن به DB (http://barnamenevis.org/forum/showpost.php?p=653476&postcount=22)

مثال ها:


Load كردن اطلاعات (http://barnamenevis.org/forum/showpost.php?p=640418&postcount=13)
Insert كردن يك ركورد (http://barnamenevis.org/forum/showpost.php?p=642222&postcount=15)
Delete كردن يك ركورد (http://barnamenevis.org/forum/showpost.php?p=642231&postcount=17)
Update كردن يك ركورد (http://barnamenevis.org/forum/showpost.php?p=642240&postcount=19)

متد ها و روال ها:


روال و متد Connect (http://barnamenevis.org/forum/showpost.php?p=639913&postcount=7)
روال و متد LoadAll (http://barnamenevis.org/forum/showpost.php?p=640406&postcount=11)
Insert (http://barnamenevis.org/forum/showpost.php?p=642219&postcount=14)
Delete (http://barnamenevis.org/forum/showpost.php?p=642227&postcount=16)
Update (http://barnamenevis.org/forum/showpost.php?p=642237&postcount=18)

كنترل ها:


نمايش اطلاعات در DataGridView (http://barnamenevis.org/forum/showpost.php?p=640414&postcount=12)

معرفي كتابها، منابع، جزوات و سايتهاي مرتبط:


نكاتي در رابطه با ADO.NET (http://barnamenevis.org/forum/showthread.php?t=101163)
روش استفاده از SQL Command (http://barnamenevis.org/forum/showthread.php?t=94296)

استفاده Generic ها


در دست بررسي...

اوبالیت به بو
پنج شنبه 07 آذر 1387, 01:03 صبح
اولين كاري كه معمولاً در يك برنامه پايگاه داده انجام ميشه بارگذاري اطلاعات از جدول بانك اطلاعاتي به يك كنترل نمايش دهنده مثل DataGridView هستش تا كاربر بتونه اطلاعاتي رو كه ثبت كرده رو ببينه. براي انجام اين كار بايد چند مرحله انجام بشه تا اطلاعات از جدول به DataGridView منتقل بشه.

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

http://barnamenevis.org/forum/attachment.php?attachmentid=25872&stc=1&d=1227736980

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

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

در #C:


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


در VB.NET:


Imports System.Data
Imports System.Data.SqlClient

اوبالیت به بو
پنج شنبه 07 آذر 1387, 01:28 صبح
براي ايجاد ارتباط با پايگاه داده نياز به يك رشته اتصال هستش. اين رشته ي اتصال درون يك Refrence از شي sqlConnection قرار ميگيره. همون طور كه اشاره كردم ما بايد يك Refrence داشته باشيم تا بتونيم اين رشته رو ايجاد كنيم:
در #C:


SqlConnection cnn = new SqlConnection();

در VB.NET:


Dim cnn As New 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"

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

اوبالیت به بو
پنج شنبه 07 آذر 1387, 01:33 صبح
با استفاده از دستورات پست قبلي (http://barnamenevis.org/forum/showpost.php?p=639905&postcount=5) شما تونستيد با پايگاه داده ارتباط برقرار كنيد اما اين رو در نظر داشته باشيد كه فقط ارتباط برقرار كرديد. يعني فايل پايگاه داده مورد نظر شما هنوز باز نشده. براي اين كار از متد Open شي sqlConnection استفاده مي كنيم:
در #C:


cnn.Open();

در VB.NET:


cnn.Open()


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


cnn.Close();

در VB.NET:


cnn.Close()

اوبالیت به بو
پنج شنبه 07 آذر 1387, 01:40 صبح
در كد نويسي بايد سعي كنيد تا جايي كه ممكن هست از تكرار پرهيز كنيد پس براي اينكه در كلاسهاي مختلف برنامه از كد نويسي اضافي پرهيز كرده باشيم ميايم يه روال در 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()

اوبالیت به بو
پنج شنبه 07 آذر 1387, 21:11 عصر
براي استفاده از دستورات SQL جهت فراخواني اطلاعات جدول در برنامه، بايد از شي sqlCommand استفاده كنيم. ما در كل نياز به دو چيز داريم:

دستور SQL مورد نظر
آدرس جدول پايگاه داده
براي اين كار بايد يه 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 رو داريم هم آدرس.

اوبالیت به بو
پنج شنبه 07 آذر 1387, 21:40 عصر
خوب حالا ما تونستيم يه دستور SQL كامل داشته باشيم. براي اينكه اطلاعات حمل بشه نياز به اون آدمك بزرگه داريم يعني sqlDataAdapter. بازهم يه Refrend از اين شي مي سازيم:
در #C:


SqlDataAdapter sda = new SqlDataAdapter();

در VB.NET:


Dim sda As New SqlDataAdapter()

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


sda.SelectCommand = cmd;

در VB.NET:


sda.SelectCommand = cmd

كار sqlDataAdapter تموم شد.

http://www.barnamenevis.org/forum/images/icons/icon5.gif سوال:
شايد براي شما سوال بشه كه 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())

اوبالیت به بو
پنج شنبه 07 آذر 1387, 21:50 عصر
براي اينكه يه Refrence از DataSet داشته باشيم كد زير رو مي نويسيم:
در #C:


DataSet ds = new DataSet();

در VB.NET:


Dim ds As New 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!

اوبالیت به بو
پنج شنبه 07 آذر 1387, 21:58 عصر
با روال و متد Connect (http://barnamenevis.org/forum/showpost.php?p=639913&postcount=7)آشنا شديم و براي صرفه جويي در كد ميايم 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()

اوبالیت به بو
پنج شنبه 07 آذر 1387, 22:09 عصر
حالا براي نمايش اطلاعات در DataGridView بايد DatagridView رو set كنم. دو تا خاصيت هستش كه باهاشون كار دارم:

Data Source
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"

اوبالیت به بو
پنج شنبه 07 آذر 1387, 22:15 عصر
با كمي تصرف:

در #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

اوبالیت به بو
دوشنبه 11 آذر 1387, 00:47 صبح
جهت ثبت اطلاعات در جدول دو راه دارم يا به صورت 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 رو براي يه روال يا متدي كه بحثش رو كردم بفرستم. اما قبل از ارسال بايد اون رو بسازم. اين روال يا متد اين كار رو انجام مي ده:
اتصال به پايگاه داده
مشخص كردن آدرس پايگاه داده جهت اجرا دستور SQL
باز كردن پايگاه داده
اجراي دستور SQL
بستن پايگاه داده
در #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, 00:54 صبح
با كمي تصرف:
در #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:09 صبح
حذف كردن اطلاعات دقيقاً مشابه درج كردن اطلاعات (http://barnamenevis.org/forum/showpost.php?p=642219&postcount=14)در جدول هستش.
تنها تفاوتي كه وجود داره در دستور 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 قراره بسازم بفرستم. اما قبل از ارسال بايد اون رو بسازم. اين روال يا متد اين كار رو انجام مي ده:
اتصال به پايگاه داده
مشخص كردن آدرس پايگاه داده جهت اجرا دستور SQL
باز كردن پايگاه داده
اجراي دستور SQL
بستن پايگاه داده
در #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:16 صبح
با كمي تصرف...
در #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
EndClass

اوبالیت به بو
دوشنبه 11 آذر 1387, 01:27 صبح
جالبه. ويرايش كردن اطلاعات نيز دقيقاً مانند ثبت كردن اطلاعات (http://barnamenevis.org/forum/showpost.php?p=642219&postcount=14) و حذف كردن اطلاعات (http://barnamenevis.org/forum/showpost.php?p=642227&postcount=16)هستش.
تنها تفاوتي كه وجود داره در دستور 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 رو براي يه روال يا متدي كه بحثش رو كردم بفرستم. اما قبل از ارسال بايد اون رو بسازم. اين روال يا متد اين كار رو انجام مي ده:

اتصال به پايگاه داده
مشخص كردن آدرس پايگاه داده جهت اجرا دستور SQL
باز كردن پايگاه داده
اجراي دستور SQL
بستن پايگاه داده

در #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"

اوبالیت به بو
دوشنبه 11 آذر 1387, 01:30 صبح
با كمي تصرف...
در #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, 12:21 عصر
مشاهده فرموديد كه ثبت كردن (http://barnamenevis.org/forum/showpost.php?p=642222&postcount=15)، حذف كردن (http://barnamenevis.org/forum/showpost.php?p=642231&postcount=17) و ويرايش كردن (http://barnamenevis.org/forum/showpost.php?p=642240&postcount=19) اطلاعات خيلي شبيه هم بودن. تقريباً تمامي كدهاشون با هم برابر به غير از درستور 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)

Setadmgk
یک شنبه 01 دی 1387, 19:20 عصر
دمتان گرم .لطفا درباره جستجو در دیتاگرید و مرتب ساری کمکم کنید با تشکر

اوبالیت به بو
یک شنبه 01 دی 1387, 23:17 عصر
كاربر Afshin_Zavar (http://barnamenevis.org/forum/member.php?u=4242) در پيام خصوصي خود به بنده فرمودند:


در آموزشهایی که در رابطه با اتصال و کار با DB داده بودید، یک نکته برام گنگ بود
شما مرتبا کانکت میشید، یه کوئری می گیرید و دیسکانکت میشید.
اینکه مرتبا قطع و وصل میشید، سرباری روی سرور اعمال نمیکنه ؟
بايد عرض كنم كه جناب Afshin_Zavar (http://barnamenevis.org/forum/member.php?u=4242) درست مي فرمايند و براي اينكه از اتصال هاي پي در پي جلوگيري بشه بايد ما يك راه حلي رو پيدا كنيم:
فعلاً #C:
يك كلاس به نام SingleTon ايجاد مي كنيم و در اون كد زير رو مينويسيم:


class SingleTon
{
public static SqlConnection conn = null;
public SingleTon()
{
if (conn == null)
{
conn = new SqlConnection();
Console.WriteLine("First Connection");
}
else
Console.WriteLine("Connected");
}

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


class Program
{
static void Main(string[] args)
{
SingleTon obj1 = new SingleTon();
SingleTon obj2 = new SingleTon();
SingleTon obj3 = new SingleTon();
SingleTon obj4 = new SingleTon();
Console.ReadKey();
}
}

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

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


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

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

dragoncompany
دوشنبه 12 اسفند 1387, 14:45 عصر
با سلام خدمت شما. حتماً سایت وبگذر را می شناسید. این سایت برای نمایش آمار سایت ها به بازدیدکنندگان از جاوا اسکریپت استفاده می کند.
مثل این کد :


<!-- 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 -->حال از شما خواهشمندم که کدی را که می توان به وسیلۀ آن کد یا نوشته ای دیگر را در این اسکریپت ها برگشت داد را برایم بنویسید.

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


با تشکر:قلب:

shocraneh
سه شنبه 05 خرداد 1388, 12:14 عصر
با تشکر
فقط ای کاش می شد همه را یک جا دانلود کرد

shocraneh
پنج شنبه 14 خرداد 1388, 21:57 عصر
بعضي از دوستان كه تسلط دارن نيز مي تونن اين مطالب رو دنبال كنند:



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

mortezamhd
شنبه 30 خرداد 1388, 13:24 عصر
سلام دوست عزیز واقا عالی بودددددددددددددد:تشویق::تش یق::تشویق:
موفق باشید

mortezamhd
سه شنبه 02 تیر 1388, 12:30 عصر
اگه میشه طریقه وارد کردن داده در اکسل رو هم همین طور واضح بگین
Mer30

aminghaderi
پنج شنبه 01 مرداد 1388, 23:23 عصر
شما که بزرگواری کردید و این تاپیک رو قرار دادیید چه خوب بود نحویه نمایش فیلدی از دیتابیس رو داخل یه کنترل مثلا "textbox" رو هم توضیح می دادید، شاید بدرد یکی مثل من می خورد!!!
دو روزه درگیر این موضوع هستم ، در همین سایت راهنمایی تا حدی شده ولی کامل نیست و شاید من کاملش رو پیدا نکردم؟!
به هر حال اگه خود جناب obalitjoOon (http://barnamenevis.org/forum/member.php?u=47457) زحمتش رو بکشند(که خیلی عالیه!) وگرنه یکی از اساتید زحمت توضیح رو بکشند.
من که به شخصه خسته شدم!
با تشکر مخصوص از obalitjoOon (http://barnamenevis.org/forum/member.php?u=47457) بابت زحمتی که کشیدند.

aminghaderi
جمعه 02 مرداد 1388, 21:09 عصر
با اجازه اساتید محترم سایت
مثالی برای اتصال و انقیاد دیتابیس به یک کنترل معمولی
مثل Textbox
(نحویه نمایش فیلدی از دیتابیس داخل یه کنترل تکست باکس)

http://barnamenevis.org/forum/showthread.php?p=763330&posted=1#post763330

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

sina_saravi1
دوشنبه 26 مرداد 1388, 23:54 عصر
ممنونم از این همه اطلاعات مفید
میتونی بگی چجوری میتونیم اطلاعات دیتا ست رو بندازیم رو دیتا گرید ویو؟

S.Amir
چهارشنبه 28 مرداد 1388, 14:27 عصر
فکر کنم قسمت refresh همون load all ایراد داشته باشه ، چون وقتی من تویه یه برنامه از اون استفاده کرد بجای اینکه جدول رفرش بشه دوباره همون تعداد سطر به جدول اضافه شد .
ولی در کل , عالی بود
خدا خیرت بده جون:چشمک:

Hossis
جمعه 30 مرداد 1388, 11:15 صبح
برای برنامه های تحت ویندوز از بین adodb , ado و sql کدام بهتر و سریعتر است؟

zoofa
جمعه 30 مرداد 1388, 14:06 عصر
تو تحت ویندوز من تغییری بین ADO.NET و ADODB ندیدم اما تو وب ADODB خیلی کند و بد است ولی ADO.NET خیلی خوب و سریع بود.


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

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



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

sd.CSharpProgrammer
یک شنبه 15 شهریور 1388, 23:09 عصر
با سلام خدمت دوستان

براي سوالات دوست عزيز 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 رو در پست بعدي توضيح ميدم.

sd.CSharpProgrammer
یک شنبه 15 شهریور 1388, 23:42 عصر
روشي براي دسترسي به تك تك فيلدهاي ركورد :

براي دسترسي به فيلدهاي يك ركورد اول بايد اون فيلد رو واكشي كرد. براي واكشي ركورد مورد نظر اين بار از فيلدهاي نام و نام خانوادگي استفاده مي كنم. فرض كنيم نام و نام خانوادگي رو در جدول جداگانه (به صورت دو فيلد) در نظر گرفتيم (چون بعضي از دوستان رو ديدم كه نام و نام خانوادگي رو در يك فيلد ذخيره ميكنن).
فرض كنيد جدول با اين فيلدها داريم (همون جدول 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 (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(txtFirstNam e.Text, txtLastName.Text));
}
else
MessageBox.Show(" ");
}



اميدوارم مفيد واقع بشه
همگي موفق و پيروز باشيد :لبخندساده:

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

alihadian2009
پنج شنبه 19 شهریور 1388, 15:17 عصر
با سلام و خسته نباشید !

من یه سوال راجع به ado.net در دلفی دات نت (2007) داشتن میشه بگین کجا باید مطرح کنم ؟
بچه های تالار دلفی میگن باید توی مباحث دات نت مطرح بشه ! تورو خدا نگین باید برم تو تالار دلفی ! :ناراحت:

سوالم راجع به اینه که توی webapplication در دلفی نت چطوری میشه ! به بانک از طریق ado.net متصل شد ! من نمی تونم data set را به data connection متصل کنم تا توی دیتا گرید نمایش بدم مرسی !

ali_ahr7
دوشنبه 09 آذر 1388, 10:18 صبح
سلام من تو بانكم ركورد هاي نام و ركورد هاي مشابهي رو دارم كه ميخواهم بعد اؤ فراخواني أنها با دستور select كليوم هدرشون با نامي كه من ميخوام نشون داده بشه
ايا راهي براي انجام اين كار هست؟
ممنون

Ali.Afzal
دوشنبه 09 آذر 1388, 12:07 عصر
با سلام و خسته نباشید به اساتید!

من نرم افزار Visual Studio 2008 را دانلود کردم و نصب کردم. در حین نصب هیچ مشکلی بوجود نیامد!

اما قضیه اینه که ADO.NET برنامه پریده و در داخل ToolBox ویژال استادیو نیست!!!
اگر می خواهید بگید Microsoft .NET Framework 3.5 SP1 را نصب کن، این کار را هم کردم ! یعنی خود Installer برنامه این کار را می کند.

حال آیا امیدی به حل ایم مشکل هست؟ :گریه::گریه:
:عصبانی++::عصبانی++:

احمد سامعی
دوشنبه 09 آذر 1388, 19:01 عصر
من نرم افزار Visual Studio 2008 را دانلود کردم و نصب کردم.

نسخه اي كه من دارم 3.82 گيگ هست ! من تعجم شما چطور با اين اينترنت هاي ديزلي اون دانلود كردي !:متفکر:


اما قضیه اینه که ADO.NET برنامه پریده و در داخل ToolBox ویژال استادیو نیست!!!:عصبانی++:

فرض بر اينكه نسخه كامل داشته باشي ....:شیطان: چرا عصباني مي شي .:قهقهه: خيلي از كنترل ها بطور پيش فرض در تولباكس نيست بايد روي تولباكس كليد راست كنيد گذينه انتخاب كنترل بزني ليستي واست باز مي شه كه مي توني از تو اون ليست انتخاب كني يا به اون ليست كنترل هاي ديگه هم اضافه كني
تمام.
موفق و شاد باشي:تشویق:

majid325
سه شنبه 18 اسفند 1388, 10:37 صبح
لطفا برای طرح سوال از این تاپیک استفاده نکنید، در غیر اینصورت حذف میشود