PDA

View Full Version : مبتدی: سوال C#



sanam89
پنج شنبه 05 فروردین 1389, 11:04 صبح
سلام دوستان،
من می خوام توی یک برنامه C# اطلاعاتی رو از پایگاه داده ام بخونم و بریزم توی combobox ، لطفا منو راهنمایی کنید که کدش چی میشه
(البته متد select رو نوشتم.)
مرسی

hamidreza20
پنج شنبه 05 فروردین 1389, 15:44 عصر
سلام دوست عزیز

برای اینکار شما می توانید از روش ویزارد یا استفاده از چند خط کد برای پر نمودن کمبو باکس استفاده کنید.

در روش اول شما باید از فلشی که گوشه سمت راست کمبو باکس قرار دارد و استفاده از گزینه ADD Resource استفاده نمایید یا با استفاده از چند قطعه کد که با کمی جستجو در همین سایت به آن دست پیدا خواهید نمود به بانک متصل شده و اطلاعات مورد نظر را خوانده و در کمبو باکس Fill کنید.

التماس دعا...

sds1920
پنج شنبه 05 فروردین 1389, 15:55 عصر
من از اول همه چیز رو برات توضیح می دم البته با کد نه با wizard.

1)اول از همه باید namespace مناسب رو به برنامه اضافه کنی .
اگه با Sql کار می کنی using System.Data.SqlClient .
اگه با Access کار می کنی using System.Data.OleDb .

2)حالا باید یه شی از نوع Connetion درست کنی و ConnectionString رو برای اون تعیین کنی.
Connetion چگونگی اتصال به بانک داده رو برات مشخص می کنه.مواردی مثل آدرس بانک داده یا موارد امنیتی و ... که تمام این موارد در ConnectionString قرار می گیره. در کل برای اینکه بتونی به بانک متصل بشی و بتونی اونو رو باز کنی و به اون دسترسی داشته باشی نیاز به این شی داری.
اگه با sql کار می کنی :


SqlConnection objConnetion = new SqlConnection();
objConnetion.ConnectionString =
"Server=(Local)\\SQLEXPRESS;DataBase=Test1;Integrat ed Security=true";


اگه با Access کار می کنی :


OleDbConnection objConnection = new OleDbConnection();
objConnection.ConnectionString =
@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=DataBase Address";


برای اطلاعات بیشتر در مورد ConnectionString می تونی خودت قسمت های مختلف همین انجمن رو جستجو کنی.

3)حالا نیاز به یک شی از نوع DataSet داری.این شی مدل شبیه سازی شده از بانک هست که توی Ram قرار می گیره.مثل همون DataBase می تونی توی DataSet هم جدول تعریف کنی و ...
حالا باید کد زیر رو اضافه کنی :


DataSet DSet = = new DataSet();

اگه با Sql کار می کنی یا با Access فرقی نداره چون دیتاست به نوع بانک داده مربوط نمی شه.

4)بعد از دیتاست نیاز به یک شی از نوع DataAdapter داری.DataAdapter ارتباط دهنده بین دیتاست و دیتابیس است و در واقع داده ها را از دیتابیس می گیره و توی دیتاست قرار می ده.
اگه با Sql کار می کنی :


SqlDataAdapter adapter = new SqlDataAdapter();

اگه با Access کار می کنی :


OleDbDataAdapter adapter = new OleDbDataAdapter();



DataAdapter دارای چهار خاصیت مهم به نامهای SelectCommand و InsertCommand و UpdateCommand و DeleteCommand هست که این چهار تا خاصیت مربوط به چهار Query اصلی می شه یعنی Select و Insert و Update و Delete .بستگی به این داره که بخوای چه کاری با بانک داده انجام بدی.در اینجا چون شما می خوای داده ها را از بانک بگیری باید از خاصیت SelectCommand استفاده کنی.

5)هر چهار خاصیتی که در بالا گفتم از نوع Command هست و برای اینکه بتونی از هر کدام از خاصیت استفاده کنی اول باید اون خاصیت رو شبیه سازی کنی.ما در اینجا چون به SelectCommand نیاز داریم پس اون رو شبیه سازی می کنیم.
sql :


adapter.SelectCommand = new SqlCommand();


Access :


adapter.SelectCommand = new OleDbCommand();


البته این نکته رو هم باید بگم که برای شبیه سازی هر یک از چهار خاصیت از همین کدها استفاده می شه با این تفاوت که به جای خاصیت SelectCommand خاصیت مورد نظر رو می نویسیم.

در ساده ترین حالت برای اینکه بتونیم از SelectCommand استفاده کنیم باید دوتا از خاصیت های اون رو تنظیم کنیم تا بشه داده ها رو از بانک گرفته و در دیتاست قرار دهیم.

اول خاصیت Connection :
این خاصیت از نوع همون شی Connection هست که در ابتدا ساختیم و در واقع چگونگی اتصال به بانک داده رو برای این شی مشخص می کند.
Sql یا Access :


adapter.SelectCommand.Connection = objConnetion;


دوم خاصیت CommandText :
این خاصیت از نوع String هست و Query مورد نظر برای SELECT را درون این خاصیت قرار می دهیم.برای نمونه در هر دو حالت Sql یا Access:


adapter.SelectCommand.CommandText = "SELECT Field1,Field2,...,Fieldn FROM TableName"


البته خاصیت CommandText می تونه بجای اینکه دستور Query درونش باشه نام یک تابع ذخیره شده در دیتابیس باشد.در این حالت باید خاصیت دیگه ای هم به نام CommandType هم تنظیم بشه تا مشخص کنه که نام نوشته شده نام یک StoredProcedure هست.
برای Sql یا Access :


adapter.SelectCommand.CommandText = "StoredProcedure Name";
adapter.SelectCommand.CommandType = CommandType.StoredProcedure;


بعد از تمام این کارها آماده ایم تا داده ها را بانک بگیریم و اونها رو توی دیتاست قرار بدیم.
در ساده ترین حالت می تونیم کد زیر را برای هر دو مورد Sql یا Access داشته باشیم :


objConnetion.Open();
adapter.Fill(DSet, "TableName");
objConnetion.Close();


TableName نام جدول مورد نظر در دیتاست هست که می خواهیم اطلاعات را در آن قرار دهیم.من توصیه می کنم که TableName را با نام جدول توی بانک یکسان در نظر بگیرید.البته الزامی نیست و دلخواهه.در صورتی که جدولی که مشخص کرده اید درون دیتاست نباشد adapter آن را به صورت خودکار می سازد.

حالا دیگه تمام اطلاعات مورد نظر را از بانک گرفته و درون دیتاست قرار دادیم.ولی حالا چطور اونها رو توی combobox قرار بدیم؟
البته قبل از اون باید این نکته را بدونی که combobox فقط می تونه به یکی از فیلد های جدول متصل بشه.
راه اول :
می تونی با یک حلقه for سطر به سطر هر فیلد را به combobox اضافه کنی.


//بدست آوردن اندیس ستونی از جدول که می خوهیم آن را به کمبو اضافه کنیم
int ColumnIndex=DSet.Tables["TableName"].Columns["ColumnName"].Ordinal;
for (int i = 0; i < DSet.Tables["TableName"].Rows.Count; i++)
combobox.Items.Add(DSet.Tables["TableName"].Rows[i].ItemArray[ColumnIndex]);


راه دوم :
می تونی combobox را به ستونی از جدول متصل کنی تا داده های اون توی combobox قرار بگیره.برای این کار باید کدهای زیر رو اضافه کنی :


combobox.DataSource = DSet;
combobox.DisplayMember = "TableName.FieldName";


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

Sirwan Afifi
پنج شنبه 05 فروردین 1389, 16:10 عصر
string strcon, strsql;
strcon = "provider=microsoft.jet.oledb.4.0;" + "Data Source = C:\\m.mdb;";
strsql = "select نام from users";
con = new OleDbConnection(strcon);
con.Open();
da = new OleDbDataAdapter(strsql, con);
da.Fill(ds, "users");
comboBox1.DataBindings.Add(new Binding("datasource", ds, "users"));
comboBox1.DisplayMember = "نام";