PDA

View Full Version : سوال: نمایش رکوردهای خاص با استفاده از دستور select



neda_1367_sh
چهارشنبه 07 تیر 1391, 15:19 عصر
سلام
ببخشید که با این سوال سادم وقتتونو میگیرم اگه میشه کمک کنید
برای نشون دادن رکوردهای خاصی از جدول که شرایط خاصی داشته باشن و بخوام اون شرایط رو از دو تا textbox بگیره باید چیکار کنم؟
مثلا اینجوری نوشتم اما جواب نمیده

cmd.CommandText = "select * from student where this.textbox1.text=this.textbox2.text";


و میخواستم بدونم آیا این روش گزارش گرفتن از اطلاعات منطقیه؟
اگر نه چه راهی پیشنهاد میکنید؟

Y_Safaiee
چهارشنبه 07 تیر 1391, 16:01 عصر
با سلام خدمت شما

سوال شما گنگ بود و من درست نفهمیدم

اما دستور Sql شما اشتباهه

اینطوری باید بنویسید

برای انتخاب فیلدهای برابر


cmd.CommandText = "select * from student where name ='" + textBox1.text + "'";


برای انتخاب فیلدهای شبیه (فیلدهایی که اولش با کاراکتر وارد شده برابر و آخرش معلوم نباشه(مثل : یونس,یاسر,یوسف)



cmd.CommandText = "select * from student where name like'" + textBox1.text + "%'";


فیلدهایی که اول و آخرش مشخص نیست اما میدانیم یک نوشته مابینش بوده


cmd.CommandText = "select * from student where name like'%" + textBox1.text + "%'";


استفاده از Or(یا) در دستور :


cmd.CommandText = "select * from student where name like'" + textBox1.text+ "%' or family sid = " + long.Parse(textBox1.Text);

دقت کنین چون sid رشته ای نیست نباید سینگل کوتیشن برای شرط گذاشت .

اگر میخواهید مابین دو تکس باشن



cmd.CommandText = "select * from student where date >='" + textBox1.text+ "' and date <='" + textBox2.text + "'";


اگر میخواهید دو تکس با هم بررسی و در صورت برابر بودن اعمال شن


if(textBox1.Text.CompareTo(textBox2.Text)==0) cmd.CommandText = "select * from student where name like'" + textBox1.text+ "%' or family sid = " +long.Parse(textBox1.Text);


موفق باشید
بایت بایت

neda_1367_sh
چهارشنبه 07 تیر 1391, 21:48 عصر
اینجوری نوشتم اما error داره

cmd.CommandText = "select * from student where name ='" + textbox1.text + "'";

این error:
The name 'textbox1' does not exist in the current context

veniz2008
چهارشنبه 07 تیر 1391, 22:15 عصر
مشکل شما اینه که کپی پیست کردید دوست عزیز، به جای textbox1 باید بنویسی textBox1 ( این خطا میگه که textbox1 رو نمیشناسه).
سعی کنید تا حد امکان خودتون تایپ کنید تا مشکلات این مدلی واستون پیش نیاد.
موفق باشید.

Y_Safaiee
چهارشنبه 07 تیر 1391, 22:33 عصر
با سلام خدمت شما
با تشکر از دوست عزیزم mohammaddou (http://barnamenevis.org/member.php?155296-mohammaddou) , حرف ایشون درسته قسمت مربوط به textbox رو خودتون تایپ کنید,معمولا سی شارپ رو paste نام کنترل ها سخت گیره و بهتره خودتون بنویسید textbox1.text اگه نام دیگه ای هم داره که نامشو بنویسید

در اصل نامش همونطور که دوستم گفت textBox1.Text هست(چون من بدون باز کردن سی شارپ کدها رو نوشتم تکس باکس رو اینطوری نوشتم)

پست مربوطه رو تصحیح کردم

موفق باشید
بایت بایت

neda_1367_sh
چهارشنبه 07 تیر 1391, 22:42 عصر
ممنونم ولی بازم error میده کل کدم اینه

SqlConnection conn = new SqlConnection();
conn.ConnectionString =
@"data source =.\sqlexpress;
attachdbfilename=|datadirectory|\database1.mdf;
integrated security=true;
user instance=true";
conn.Open();

SqlCommand cmd=new SqlCommand() ;
cmd.Connection = conn;
// cmd.CommandText = "select * from student where smark=20";
cmd.CommandText = "select * from student where '" + textBox1.text + "' ='" + textBox2.text + "'";

SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;

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

dataGridView1.DataSource = dt;
conn.Close();

اینم error
'System.Windows.Forms.TextBox' does not contain a definition for 'text' and no extension method 'text' accepting a first argument of type 'System.Windows.Forms.TextBox' could be found (are you missing a using directive or an assembly reference?)

rezaei_y
چهارشنبه 07 تیر 1391, 22:48 عصر
دوست عزیز شما باید بجای textBox1.textاسم فیلد موردنظرتون در جدول student رو بنویسید


cmd.CommandText = "select * from student where name ='" + textBox2.text + "'";
یا داشتن دو شرط
cmd.CommandText = "select * from student where name ='" + textBox2.text + "' and family='" + textBox2.text + "'";

neda_1367_sh
چهارشنبه 07 تیر 1391, 22:56 عصر
دوست عزیز شما باید بجای textBox1.textاسم فیلد موردنظرتون در جدول student رو بنویسید


cmd.CommandText = "select * from student where name ='" + textBox2.text + "'";
یا داشتن دو شرط
cmd.CommandText = "select * from student where name ='" + textBox2.text + "' and family='" + textBox2.text + "'";


فرقی نمیکنه برا همون یه textbox هم همون خطا رو میده در ضمن من میخوام نام فیلد رو هم از textbox بگیره

veniz2008
چهارشنبه 07 تیر 1391, 22:56 عصر
چرا اینجوری نوشتی؟
فرض کنید میخواید از دو تا textbox بخونید،دستور select رو بصورت زیر بنویسید:

"select * from student where name ='" + textBox1.Text +"',and family ='" +textBox2.Text +"'"

rezaei_y
چهارشنبه 07 تیر 1391, 23:01 عصر
چرا اینجوری نوشتی؟
فرض کنید میخواید از دو تا textbox بخونید،دستور select رو بصورت زیر بنویسید:

"select * from student where name ='" + textBox1.Text +"',and family ='" +textBox2.Text +"'"



"select * from student where name ='" + textBox1.Text +"' and family ='" +textBox2.Text +"'"

neda_1367_sh
چهارشنبه 07 تیر 1391, 23:05 عصر
نه من فقط 1 شرط دارم که از textbox2 میگیره
textbox1 همون اسم فیلد یعنی مثلا name هستش.

Y_Safaiee
چهارشنبه 07 تیر 1391, 23:06 عصر
با سلام مجدد

آهان شما میخواین خودتون فیلد بهش بدین؟مثه قبلنا که نرم افزارها بر حسب داشت؟(مثلا برحسب نام, برحسب فامیل و ...) که کاربر مثلا از کمبوباکس انتخاب کنه چه فیلدی و بعد رو اون فیلد فیلتر شه , آره؟

اینم کدش



cmd.CommandText = "select * from table1 where " + comboBox1.Text + " like '" + textBox2.Text + "%'";


اینجا اول کاربر باید از کمبوباکس بگه کدوم فیلد(مثلا نام,شماره دانشجویی,شهر) بعد با نوشتن متنش تو textbox روی اون فیلد فیلتر میشه,مثلا اگه شهر رو انتخاب کنه با زدن حرف م همه شهرهایی که اولش م هست میاد,اگه از کمبوباکس نام رو انتخاب کنه و ی رو بنویسه کل اسم هایی که اولش ی هست میاد.آره

سخن آخر بهتره که به جای تکس باکس از کمبوباکس برای انتخاب فیلدتون استفاده کنید.

راستی اشتباه شما اینه که بعد where سینگل کوتیشن گذاشتین

موفق باشید
بایت بایت

neda_1367_sh
چهارشنبه 07 تیر 1391, 23:21 عصر
مثه قبلنا که نرم افزارها بر حسب داشت؟منظورتون از قبلنا چیه؟الانا چیکار میکنن!
من از این روش زیاد خوشم نیومد اما راه دیگه بلد نیستم:گریه:
در ضمن بازم نشد:گریه:
بعد از اجرا به این گیر میده
da.Fill(dt);
خیلی برام مهمه کسی حاضره کل کدمو امتحان کنه ببینه جواب میده یا نه؟
اما کدم درسته چون اینو جواب میده و اونایی که نمرشون 20 هست رو نشون میده
cmd.CommandText = "select * from student where smark=20";

rezaei_y
چهارشنبه 07 تیر 1391, 23:25 عصر
اینو امتحان کن
cmd.CommandText = "select * from student where " + textBox1.Text + "='" + textBox2.Text + "'";

Y_Safaiee
چهارشنبه 07 تیر 1391, 23:35 عصر
با سلام مجدد

هی یادش بخیر من یادمه وقتی 15 ساله بودم نرم افزارها برحسب داشت(الان 24 سالمه) یادش بخیر,الان شیوه های جالب تر و پویاتری هست که نیاز نیست شما کلی رادیو باتون یا کمبوباکس بزارین.

من کدتونو با یکم اصلاحات(تغییر به فیلدهای برنامه خودم و نام جدولم) تست کردم اینم کدش :



public partial class Form1 : Form
{
DataTable dt = new DataTable();
BindingSource bind = new BindingSource();

public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection();
conn.ConnectionString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirecto ry|\\Database1.mdf;Integrated Security=True;User Instance=True";
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
// cmd.CommandText = "select * from student where smark=20";
cmd.CommandText = "select * from table1";
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;

da.Fill(dt);
table1DataGridView.DataSource = dt;
bind.DataSource = dt;
conn.Close();
}

private void textBox2_TextChanged(object sender, EventArgs e)
{
bind.Filter = comboBox1.Text + " like '" + textBox2.Text + "%'";
}

}


فقط :
1.تو کمبوباکستون فیلدهای برحسب رو اضافه کنید تا کاربر بتونه انتخابش کنه مثلا (name,family,shahr,tel)
2.همونطور که میبینید من فیلتر کردنو تو textchange l مربوط به تکس باکسم نوشتم پس اول فیلدمو انتخاب بعد تو تکس باکس متنمو مینویسم تا فیلتر شه.

اگه برنامه شما در fill داره ارور میده احتمالا نام فیلدو اشتباه نوشتین یا سهوا تمام کدها تو فرم لودتونه و چون هنوز تو تکس باکس ها چیزی ننوشتین ارور میده.

موفق باشین
بایت بایت

neda_1367_sh
چهارشنبه 07 تیر 1391, 23:37 عصر
اینو امتحان کن
cmd.CommandText = "select * from student where " + textBox1.Text + "='" + textBox2.Text + "'";
بالاخره درست شد خیلی ممنون از همگی
تا فردا between,like اینا رو هم بزارم البته با کمک شما:قلب:

هی یادش بخیر من یادمه وقتی 15 ساله بودم نرم افزارها برحسب داشت(الان 24 سالمه) یادش بخیر,الان شیوه های جالب تر و پویاتری هست که نیاز نیست شما کلی رادیو باتون یا کمبوباکس بزارین.میشه بگید چه شیوه هایی اولشم گفته بودم که میخواستم بدونم آیا این روش گزارش گرفتن از اطلاعات منطقیه؟
اگر نه چه راهی پیشنهاد میکنید؟

veniz2008
چهارشنبه 07 تیر 1391, 23:41 عصر
اینو امتحان کن
cmd.CommandText = "select * from student where " + textBox1.Text + "='" + textBox2.Text + "'";
این چیه گذاشتید؟
اسم فیلد کجاست؟
ببینید دوست عزیز مشکل شما اینه که متاسفانه خوب توضیح نمیدید چی میخواید،بار اول گفته بودید که دو تا شرط دارید حالا میگید فقط یه textbox دارید،من فرض رو میگیرم که شما یه دونه textbox دارید و میخواید اطلاعات رو با یه شرط درون گریدویو نشون بدید کدهایی رو که نیاز دارید اینا هستن:

SqlConnection con = new SqlConnection("Data source =(local);initial catalog = testgrid;integrated security = true");
con.Open();
SqlDataAdapter da = new SqlDataAdapter("select * from student where id ='" + textBox2.Text +"'" , con);
DataTable dt = new DataTable();
da.Fill(dt);
dataGridView1.DataSource = dt;
con.Close();

neda_1367_sh
چهارشنبه 07 تیر 1391, 23:48 عصر
ببینید دوست عزیز مشکل شما اینه که متاسفانه خوب توضیح نمیدید چی میخواید،بار اول گفته بودید که دو تا شرط دارید حالا میگید فقط یه textbox دارید،
حق با شماست من اولش گفته بودم شرایط اما بعد تصحیح کردم و منظورم اسم فیلد و شرطش بود
از همگی ممنونم