PDA

View Full Version : سوال: ایراد این کد کجاست؟



salehvasaleh
چهارشنبه 05 بهمن 1390, 11:38 صبح
دوستان من کد زیر رو در داخل خاصیت text change یک text box گذاشتم و هدفم اینه که به تناسب متنی که کاربر در داخل text box وارد می کنه داده های شبیه اون در داخل دیتا گرید ویو نشون داده بشن اما وقتی متنی در داخل تکست باکس وارد می کنم. هیچ داده ای رو نشون نمی ده می تونید زحمتی بکشید بفهمید مشکلش کجاست؟
می خوام متن داخل تکست باکس با ستون name مقایسه بشه و این ستون در داخل جدولی به نام caramoz وجود داره



string strp;
strp = "Data Source=.;Initial Catalog=ghalam;Integrated Security=True";
SqlConnection conp = new SqlConnection(strp);
conp.Open();
SqlCommand comp = new SqlCommand("select * from caramoz where name like '" + textBox1.Text.Trim() + "%' ", conp);
comp.ExecuteNonQuery();
SqlDataAdapter dap = new SqlDataAdapter(comp);
DataSet dsp = new DataSet();
dap.Fill(dsp);
dataGridView1.DataSource = dsp;
dataGridView1.DataMember = dsp.Tables[0].TableName;
///////
dataGridView1.Columns[0].HeaderText = "کد کارآموزی";
dataGridView1.Columns[0].ReadOnly = true;
///////
dataGridView1.Columns[1].HeaderText = "نام و نام خانوادگی";
dataGridView1.Columns[1].ReadOnly = true;
///////
dataGridView1.Columns[2].Visible = false;
dataGridView1.Columns[3].Visible = false;
dataGridView1.Columns[4].Visible = false;
dataGridView1.Columns[5].Visible = false;
///////
dataGridView1.Columns[6].HeaderText = "کد درس";
dataGridView1.Columns[6].ReadOnly = true;
///////
dataGridView1.Columns[7].HeaderText = "نام درس";
dataGridView1.Columns[7].ReadOnly = true;
////////
dataGridView1.Columns[8].HeaderText = "شهریه";
dataGridView1.Columns[8].ReadOnly = true;
/////////
dataGridView1.Columns[9].HeaderText = "بدهکاری کارآموز";
dataGridView1.Columns[9].ReadOnly = true;
//////////
dataGridView1.Columns[10].HeaderText = "پرداختی کارآموز";
dataGridView1.Columns[10].ReadOnly = true;
/////////
dataGridView1.Columns[11].Visible = false;
dataGridView1.Columns[12].Visible = false;
conp.Close();

Hybrid
چهارشنبه 05 بهمن 1390, 11:52 صبح
یه کم سبک کدنویسیت اشکال داره ولی به مرور رفع میشه... اگه میخوای سرچ قابلیت سرچ رو به برنامتون اضافه کنین قبلا یه تابع نوشتم تو ویبی ولی راحت به سی شارپ تبدیل میشه :


Function Search(ByVal FieldName As String, ByVal SearchFor As String) As DataTable
Dim oledbDataAdapter1 As New OleDbDataAdapter
With oledbDataAdapter1
.SelectCommand = New OleDbCommand
.SelectCommand.Connection = oledbConnection1
.SelectCommand.CommandType = CommandType.Text
.SelectCommand.CommandText = "Select * from person Where " & FieldName & " like '%" & SearchFor & "%' order by Person_ShAks"
If .SelectCommand.Connection.State <> ConnectionState.Open Then
.SelectCommand.Connection.Open()
End If
.SelectCommand.ExecuteNonQuery()
Dim ds As New MyDs
oledbDataAdapter1.Fill(ds, "Person")
Return ds.Person
End With

End Function

این تغییر دادن عنوان دیتا گرید ویو و Visible و Disable کردن رو تو یه زیربرنامه بنویس تا تو جاهای دیگه بتونی راحت ازش استفاده کنی و کدنویسی الکی نکنی ...

موفق باشید./

gilas1368
چهارشنبه 05 بهمن 1390, 11:52 صبح
یه درصد اولش بزاری درست میشه.

salehvasaleh
چهارشنبه 05 بهمن 1390, 12:00 عصر
یه درصد اولش بزاری درست میشه.
یعنی کجا درصدو بزارم؟ اگه می شه با کدش بنویسید تا متوجه بشم.ممنون

gilas1368
چهارشنبه 05 بهمن 1390, 12:02 عصر
SqlCommand comp = new SqlCommand("select * from caramoz where name like '%" + textBox1.Text.Trim() + "%' ", conp);

Hybrid
چهارشنبه 05 بهمن 1390, 12:04 عصر
یعنی اینجوری :


"Select * from caramoz Where name like '%" & textBox1.Text.Trim() & "%'"

موفق باشید./

salehvasaleh
چهارشنبه 05 بهمن 1390, 12:07 عصر
SqlCommand comp = new SqlCommand("select * from caramoz where name like '%" + textBox1.Text.Trim() + "%' ", conp);
متاسفانه عمل نکرد ببینید من کد زیر رو برای یکی دیگه از تکست باکس ها گذاشتم و عمل می کنه


SqlCommand com = new SqlCommand("select * from caramoz where codcaramozi like '" + maskedTextBox1.Text.Trim() + "%' ", con);

اشبیه این کد رو که همین زیر نوشتم رو وقتی قرار می دم عمل نمی کنه؟؟!!!!


SqlCommand comp = new SqlCommand("select * from caramoz where name like '" + textBox1.Text.Trim() + "%' ", conp);

salehvasaleh
چهارشنبه 05 بهمن 1390, 12:16 عصر
دوستان یک نکته جدید فهمیدم:کد زیر :برای داده های فارسی جواب نمی ده ولی اگه فرضا a بزنیم برای داده هایی که با a شروع می شوند جواب می ده ! حالا برای اینکه برای حروف فارسی هم جواب بده باید چیکار کنم؟راه حلی هست؟



SqlCommand comp = new SqlCommand("select * from caramoz where name like '" + textBox1.Text.Trim() + "%' ", conp);

gilas1368
چهارشنبه 05 بهمن 1390, 12:18 عصر
اینو امتحان کن

SqlCommand comp = new SqlCommand("select * from caramoz where name like '%" + textBox1.Text + "%' ", conp);

salehvasaleh
چهارشنبه 05 بهمن 1390, 12:28 عصر
اینو امتحان کن

SqlCommand comp = new SqlCommand("select * from caramoz where name like '%" + textBox1.Text + "%' ", conp);
ممنون از زحمت دوباره ات ولی متاسفانه باز هم نشد همون طور که گفتم حالا فهمیدم کدم ایراد نداره یعنی برای داده های فارسی جواب نداره و فقط برای داده های عددی و یا انگلیسی جواب می ده راه حلی هست که بشه برای فارسی هم جواب بده؟
این کد من هست که برای فارسی جواب نمی ده :


SqlCommand comp = new SqlCommand("select * from caramoz where name like '" + textBox1.Text.Trim() + "%' ", conp);

amir3321
چهارشنبه 05 بهمن 1390, 12:50 عصر
کد شما برای سرچ فارسی هم مشکلی ندارد اگر بصورت unicode هم بخواهی سرچ کنی فقط کافیه یک n بعد از like قرار بدی همین ، شاید چیزی که سرچ می کنی اصلا تو دیتابیس وجود ندارد
SqlCommand comp = new SqlCommand("select * from caramoz where name like N'" + textBox1.Text.Trim() + "%' ", conp);

salehvasaleh
چهارشنبه 05 بهمن 1390, 13:00 عصر
کد شما برای سرچ فارسی هم مشکلی ندارد اگر بصورت unicode هم بخواهی سرچ کنی فقط کافیه یک n بعد از like قرار بدی همین ، شاید چیزی که سرچ می کنی اصلا تو دیتابیس وجود ندارد
SqlCommand comp = new SqlCommand("select * from caramoz where name like N'" + textBox1.Text.Trim() + "%' ", conp);


دم شما گرم ! با کد جدیدی که گفتید کار کرد و برای فارسی و انگلیسی هیچ مشکلی نداره . واقعا ممنون
فقط یک سوال یکم در مورد این N توضیح می دید که چی هست و کارش چیه و چکار می کنه؟

ali_habibi1384
چهارشنبه 05 بهمن 1390, 13:08 عصر
متاسفانه عمل نکرد ببینید من کد زیر رو برای یکی دیگه از تکست باکس ها گذاشتم و عمل می کنه


SqlCommand com = new SqlCommand("select * from caramoz where codcaramozi like '" + maskedTextBox1.Text.Trim() + "%' ", con);

اشبیه این کد رو که همین زیر نوشتم رو وقتی قرار می دم عمل نمی کنه؟؟!!!!


SqlCommand comp = new SqlCommand("select * from caramoz where name like '" + textBox1.Text.Trim() + "%' ", conp);


بابا كجاش اين كده مثل كد The Life بود!!! درصد اولش رو نذاشتي فدات شم.
درضمن اينجور سبك كد نويسيت كلا اشتباهه ببخشيد ها ولي كلا دات نت و اس كيو ال رو بردي زير سوال !
مثلا فرض كن طرف 100.000 تا ركورد رو بخواد به اون روش سرچ كنه!!!:اشتباه: بابا يكم مقاله بخونيد تحقيق كنيد ... حالا ما نميگيم 1.000.000 يا 2.000.000:گریه:

amir3321
چهارشنبه 05 بهمن 1390, 13:43 عصر
احتمالا فکر می کنم شما نوع فیلد name رو از نوع varchar قرار دادی که به مشکل خوردی اگه می خوای فارسی در این فیلد ذخیره کنی بهتره از نوع nvarchar انتخاب کنی تا این مشکل پیش نیاد البته نظرات اقای حبیبی رو جدی بگیرید
متونی از این لینک (http://databases.aspfaq.com/general/why-do-some-sql-strings-have-an-n-prefix.html) مطالعه کنی

salehvasaleh
چهارشنبه 05 بهمن 1390, 15:46 عصر
بابا كجاش اين كده مثل كد The Life بود!!! درصد اولش رو نذاشتي فدات شم.
درضمن اينجور سبك كد نويسيت كلا اشتباهه ببخشيد ها ولي كلا دات نت و اس كيو ال رو بردي زير سوال !
مثلا فرض كن طرف 100.000 تا ركورد رو بخواد به اون روش سرچ كنه!!!:اشتباه: بابا يكم مقاله بخونيد تحقيق كنيد ... حالا ما نميگيم 1.000.000 يا 2.000.000:گریه:
نه دوست عزیز درسته درسته جوابم داد فقط می بایست کد زیر رو هم اضافه می کردم:(راستی اون علامت درصده اون طرف اسکرول بار بوده فک کنم شما ندیدین !



like N'" + textBox1.Text.Trim() + "%' ", conp);

debugger
چهارشنبه 05 بهمن 1390, 16:06 عصر
آقای حبیبی شما چه روشی را پیشنهاد می کنید ؟؟؟؟

ali_habibi1384
جمعه 07 بهمن 1390, 11:37 صبح
آقای حبیبی شما چه روشی را پیشنهاد می کنید ؟؟؟؟
اولي كه ميخواي اطلاعات رو بياري كه قطعا با يه SelectAll كل اطلاعات رو به يك DataTable انتقال دادي حالا موقع سرچ ديگه نبايد مادام از اس كيو ال Select بزني بيا اطلاعات داخل DataTable رو فيلتر كن با استفاده از DefultView و اونا رو به كاربر فسلتر شده نشون ميدي. نمونه كدهاي زير رو ببين:


string strSearch = "";
strSearch += "Name like '%" + txtSearch.Text + "%'";
//dt ديتا تيبل حاوي كل اطلاعات است كه شما با استفاده از كد زير اونو فيلتر ميكنيد
dt.DefaultView.RowFilter = strSearch;