PDA

View Full Version : سوال: نمایش یک جدول در گریدویو با شرط



amir200h
یک شنبه 25 فروردین 1392, 01:29 صبح
سلام به همه دوستان.
من در بانکم جدولی دارم که دارای ستونی به نام ID است که یک مقدار میگیره و میتونه تکراری باشه.
و ممکنه 100 مقدار با ID یکسان توش باشه.
حالا میخوام تمام مقادیر جدولی که مقدار ID مشخصی دارنو در دیتاگرید ویو نمایش بدم.
از کد زیر استفاده کردم ولی نصفه. کسی میتونه کاملش کنه؟


SqlConnection myconnection = new SqlConnection();
myconnection.ConnectionString = "server=(local);database=BankDari;trusted_connectio n=yes";
myconnection.Open();

SqlCommand mycommand = new SqlCommand();
mycommand.Connection = myconnection;
mycommand.CommandText = "select * from Meli where ID="+txtid.Text;

veniz2008
یک شنبه 25 فروردین 1392, 01:42 صبح
سلام.

SqlConnection myconnection = new SqlConnection("server=(local);database=BankDari;trusted_connectio n=yes");
SqlDataAdapter da = new SqlDataAdapter("select * from Meli where ID = @id", myconnection);
da.SelectCommand.Parameters.AddWithValue("@id", txtid.Text.Trim());
DataTable dt = new DataTable();
da.Fill(dt);
datagridview1.DataSource = dt;
موفق باشید.

amir200h
یک شنبه 25 فروردین 1392, 08:28 صبح
مرسی دوست من. ولی کار نکرد

veniz2008
یک شنبه 25 فروردین 1392, 08:35 صبح
مرسی دوست من. ولی کار نکرد
این جواب خیلی کلی هست.
آیا خطا داد؟
یا اینکه بدون خطا اجرا شد ولی چیزی داخل گرید نیومد؟

amir200h
یک شنبه 25 فروردین 1392, 08:42 صبح
دوست من جواب داد. کدو try کرده بودم پیغام خطا نمیداد. برداشتمش پیغامشو فهمیدم درستش کردم.
لطف میکنی در مورد این کد توضیح بدی؟ خط به خط اگه زحمتی نیست

veniz2008
یک شنبه 25 فروردین 1392, 09:03 صبح
SqlConnection myconnection = new SqlConnection("server=(local);database=BankDari;trusted_connectio n=yes");
SqlDataAdapter da = new SqlDataAdapter("select * from Meli where ID = @id", myconnection);
da.SelectCommand.Parameters.AddWithValue("@id", txtid.Text.Trim());
DataTable dt = new DataTable();
da.Fill(dt);
datagridview1.DataSource = dt;

خط 1 : که آدرس سرور و دیتابیس و ... هست.
خط 2 : یک شی DataAdapter تعریف کردم که واسط بین برنامه شما و دیتابیس هست و معمولا زمانی استفاده میشه که قصد خوندن از دیتابیس رو داریم.
خط 3 : چون برنامه شما یک شرط داره پس باید همراه DataAdapter این شرط رو هم به sql بفرستم. همیشه سعی کنید شرط ها (یا هر جزییاتی) رو با پارمترها ارسال کنید و هرگز از مقداردهی مستقیم در کوئری استفاده نکنید (مثل همون کاری که خودتون در پست اول انجام داده بودید) چون براحتی کوئری تون هک میشه.
خط 4 : sql نتیجه کوئری رو که یک جدول هست برمیگردنه. بایستی در سمت سی شارپ هم یک جدول داشته باشم که جدول sql رو درونش بریزم. جدول سمت سی شارپ دیتا تیبل هستش.
خط 5 : جواب برگشت داده شده توسط da (همون DataAdapter) رو با متد Fill داخل دیتاتیبل میریزم. با این کار دیتاتیبل من با نتیجه برگشتی پر میشه.
خط 6 : دیتاتیبل رو که نتیجه داخلش قرار گرفته به خاصیت دیتاسورس مربوط به گریدویو نسبت میدم تا خروجی به کاربر نمایش داده بشه.
موفق باشید.

amir200h
یک شنبه 25 فروردین 1392, 09:12 صبح
واقعا ممنونم. آموزشی در مورد این ارسال با پارامتر داری؟
یا خودتون میتونین یه آموزش بزارین؟

veniz2008
یک شنبه 25 فروردین 1392, 09:29 صبح
آموزش که ندارم ولی اگر کوئری شما 10 تا پارامتر هم داشته باشه دقیقا به همین شکل استفاده میشه. مثلا فرض کن که میخواید براساس دو فیلد نام و نام خانوادگی جستجو کنی:

SqlConnection myconnection = new SqlConnection("server=(local);database=BankDari;tr usted_connection=yes");
SqlDataAdapter da = new SqlDataAdapter("select * from Meli where FirstName = @firstname AND LastName = @lastname", myconnection);
da.SelectCommand.Parameters.AddWithValue("@firstname", txtname.Text.Trim());
da.SelectCommand.Parameters.AddWithValue("@lastname", txtfamily.Text.Trim());

DataTable dt = new DataTable();
da.Fill(dt);
datagridview1.DataSource = dt;


به همین سادگی.

amir200h
یک شنبه 25 فروردین 1392, 09:53 صبح
اگه بخوایم insert کنیم چطوریه؟

veniz2008
یک شنبه 25 فروردین 1392, 10:02 صبح
واسه درج هم میتونی از این استفاده کنی:

SqlCommand cmd = new SqlCommand("insert into TblUser values(@firstname,@lastname)", myconnection);
cmd.Parameters.AddWithValue("@firstname", TxtName.Text.Trim());
cmd.Parameters.AddWithValue("@lastname", TxtFamily.Text.Trim());
con.Open();
cmd.ExecuteNonQuery();
con.Close();
اگر جستجو کنی کدهای خیلی زیادی در این موارد میتونی پیدا کنی.
موفق باشی.

amir200h
یک شنبه 25 فروردین 1392, 11:00 صبح
veniz جان خیلی سرچ کردم اما چیزی پیدا نکردم.
تو جدولم دوتا فیلد دارم به نام Name,Family حالا از کد زیر استفاده کردم ولی خطا میده.


SqlConnection myconnection = new SqlConnection();
myconnection.ConnectionString = "server=(local);database=BankDari;trusted_connectio n=yes";
myconnection.Open();
SqlCommand cmd = new SqlCommand("insert into home values(@Name,@Family)", myconnection);
cmd.Parameters.AddWithValue("@Name", textBox1.Text);
cmd.Parameters.AddWithValue("@Family", textBox2.Text);
cmd.ExecuteNonQuery();
myconnection.Close();

veniz2008
یک شنبه 25 فروردین 1392, 11:29 صبح
من یا هر شخص دیگه ای اینطوری نمیتونه بگه مشکل از کجاست.
در چنین مواقعی حتما یه عکس از خطا بگیرید تا ما متوجه بشیم مشکل از کجاست و به کدوم خط برنامه گیر داده.
فیلدهای جدولت رو هم بگو. اگر فیلد identity هم داری بگو.

amir200h
یک شنبه 25 فروردین 1392, 11:43 صبح
مشکبو فهمیدم باید بصورت زیر بنوسیم وقتی میخوایم فقط دوتا ستون از جدولو مقدار دهی کنیم


private void button6_Click(object sender, EventArgs e)
{
SqlConnection myconnection = new SqlConnection();
myconnection.ConnectionString = "server=(local);database=BankDari;trusted_connectio n=yes";
myconnection.Open();
SqlCommand cmd = new SqlCommand("insert into Meli(ID,Bardasht) values(@ID,@Bardasht)", myconnection);
cmd.Parameters.AddWithValue("@ID", textBox1.Text);
cmd.Parameters.AddWithValue("@Bardasht", textBox2.Text);
cmd.ExecuteNonQuery();
myconnection.Close();
}