PDA

View Full Version : سوال راجع به سرچ در سی شارپ



lvlatrood
شنبه 22 شهریور 1393, 11:32 صبح
سلام به همه
من دارم یه برنامه کتاب خونه مینویسم
الان مثلا میخوام سرچ کنم کتاب هایی ک مثلا از یه انتشارات هست رو برام بیاره
دیتابیسم با sql ساختم
حالا میخوام طبق عکس پایین
وقتی از کامبو باکس مثلا میزارم جستجو بر اساس انتشارات و تو تکس باکس کلمه رو سرچ میکنم همه رو برام تو یه مسیج باکس بیاره
ممنون میشم راهنمایی کنید

Pedram_Parsian
شنبه 22 شهریور 1393, 14:29 عصر
باید با این Query کار کنید :

Select * from ketablist where name Like 'Book Name'


البته اگه بخواید اصولی تر باشه (که کلا برنامه شما اصولی نیست !!) باید از پروسیجر استفاده کنید. که ورودی اون نوع حستحو و متن جستجو باشه

lvlatrood
شنبه 22 شهریور 1393, 16:39 عصر
باید با این Query کار کنید :

Select * from ketablist where name Like 'Book Name'


البته اگه بخواید اصولی تر باشه (که کلا برنامه شما اصولی نیست !!) باید از پروسیجر استفاده کنید. که ورودی اون نوع حستحو و متن جستجو باشه

بابا من تازه کارم
اینم همینطوری دارم مینویسم
راجع به این چیزی ک گفتید یه توضیح میدید ؟

mohammad reza beizavi
شنبه 22 شهریور 1393, 16:47 عصر
درود بر شما
نخست اینکه اگر بخواید جستجو رو بر اساس انتشارات انجام بدید باید از این کوئری استفاده کنید:

SELECT * FROM ketablist WHERE [انتشارات] LIKE N'%طاووس%';
منظور از 'طاووس' مقداری هست که برای جستجو به این کوئری پاس می دید.

پس از این مسئله:
در طراحی دیتابیس از حروف انگلیسی استفاده کنید.
نام جدول و فیلدها را با کلمات با معنی انگلیسی و با یک استاندارد (مانند camel cast) نامگذاری کنید.
بهتر است برای تاریخ از نوع datetime، برای اعداد از فیلد double یا int استفاده کنید.
در ضمن اگر انتشارات ثابتی دارید بهتر است برای انتشاراتیها جدول جداگانه ای در نظر بگیرید.

mohammad reza beizavi
شنبه 22 شهریور 1393, 16:55 عصر
بابا من تازه کارم
اینم همینطوری دارم مینویسم
راجع به این چیزی ک گفتید یه توضیح میدید ؟
دوست گرامی، جوابها و راهنماییها بر اساس متن سوال هست. اگر با جزییات بیشتری لازم دارید باید با جزییات بیشتری بپرسید و از کلی گویی پرهیز کنید.

نمونه: من یک برنامه برای جستجو با سی شارپ و وینذوز اپلیکیشن دارم می نویسم. اما نمی دونم چطور باید به دیتابیس وصل بشم و اینکار رو انجام بدم. راهنمایی کنید.

lvlatrood
شنبه 22 شهریور 1393, 17:08 عصر
درود بر شما
نخست اینکه اگر بخواید جستجو رو بر اساس انتشارات انجام بدید باید از این کوئری استفاده کنید:

SELECT * FROM ketablist WHERE [انتشارات] LIKE N'%طاووس%';
منظور از 'طاووس' مقداری هست که برای جستجو به این کوئری پاس می دید.

پس از این مسئله:
در طراحی دیتابیس از حروف انگلیسی استفاده کنید.
نام جدول و فیلدها را با کلمات با معنی انگلیسی و با یک استاندارد (مانند camel cast) نامگذاری کنید.
بهتر است برای تاریخ از نوع datetime، برای اعداد از فیلد double یا int استفاده کنید.
در ضمن اگر انتشارات ثابتی دارید بهتر است برای انتشاراتیها جدول جداگانه ای در نظر بگیرید.

سلام داداش خوبی ؟
من کلا نمیدونم کوئری چیه :ناراحت:
یه جور کد نوشتم میشه اینو چک کنید ؟

lvlatrood
شنبه 22 شهریور 1393, 17:19 عصر
کلا میشه راهنمایی کنید که
چطور میشه تو سی شارپ تو دیتابیس جستجو کرد ؟
مثلا اگه من چنتا کتاب با یه انتشارات داشتم و اسم اون انتشارات رو تو تکس باکس زدم و نوع جستجو رو گذاشتم انتشارات همه کتاب هایی ک مال اون انتشارات هست رو واسم مثلا تو ریچ باکس بیاره
ممنون

mohammad reza beizavi
شنبه 22 شهریور 1393, 18:09 عصر
درود شما دارید با LINQ کار می کنید و از حروف فارسی برای فیلدها استفاده کردید. امکان داره مشکلتون به این خاطر باشه. اما چون کدتون رو ندارم به قطعیت نمی تونم بگم.

اما اینکه چطور توی سی شارپ جستجو کنید یه نگاه به این پروژه بندازید ببینید متوجه میشید.
این ساده ترین روشی هست که شما می تونید جستجو کنید

mreram
شنبه 22 شهریور 1393, 19:11 عصر
اگر از EF استفاده میکنید این کد به شما کمک میکنه :

switch (comboBox1.SelectedIndex) {
case 0:
var query = db.products.Where(i => i.name.Contains(txtsearch.Text));
dataGridView1.DataSource = query.ToList();
break;
case 1:
var query1 = db.products.Where(i => i.code.ToString().Contains(txtsearch.Text));
dataGridView1.DataSource = query1.ToList();
break;
case 2:
var query2 = db.products.Where(i => i.price.ToString().Contains(txtsearch.Text));
dataGridView1.DataSource = query2.ToList();
break;
}

این یک سوئیچ هست که در رویداد textbox_textchange بهتره نوشته بشه و شما کافیه قسمتی از نام یا کد یا قیمت رو وارد کنید تا واستون جستجو رو انجام بده

lvlatrood
شنبه 22 شهریور 1393, 19:45 عصر
درود شما دارید با LINQ کار می کنید و از حروف فارسی برای فیلدها استفاده کردید. امکان داره مشکلتون به این خاطر باشه. اما چون کدتون رو ندارم به قطعیت نمی تونم بگم.

اما اینکه چطور توی سی شارپ جستجو کنید یه نگاه به این پروژه بندازید ببینید متوجه میشید.
این ساده ترین روشی هست که شما می تونید جستجو کنید

با تشکر داداش مشکلم رفع شد:لبخند:
اینو نگاه کردم یکم گیج شدم
من حذف و جستجو رو بلدم
اما گفتم چون یه کامبو باکس هم بش اضاف شده بود توش موندم
خیلی آقایی <3

lvlatrood
شنبه 22 شهریور 1393, 19:45 عصر
اگر از EF استفاده میکنید این کد به شما کمک میکنه :

switch (comboBox1.SelectedIndex) {
case 0:
var query = db.products.Where(i => i.name.Contains(txtsearch.Text));
dataGridView1.DataSource = query.ToList();
break;
case 1:
var query1 = db.products.Where(i => i.code.ToString().Contains(txtsearch.Text));
dataGridView1.DataSource = query1.ToList();
break;
case 2:
var query2 = db.products.Where(i => i.price.ToString().Contains(txtsearch.Text));
dataGridView1.DataSource = query2.ToList();
break;
}

این یک سوئیچ هست که در رویداد textbox_textchange بهتره نوشته بشه و شما کافیه قسمتی از نام یا کد یا قیمت رو وارد کنید تا واستون جستجو رو انجام بده

با این کد شما مشکلم رفع شد :قلب:
مرسی داداش

rasoul babadi
جمعه 16 آبان 1393, 05:56 صبح
دوستان عزیز من کد زیر رو برای جستجو بین دو تاریخ نوشتم اما با خطا مواجه شد. کسی می دونه این پیغام به چه علت رخ داده و چیکار کنم که بر طرف بشه.
125380:متفکر:

Mahmoud Zaad
جمعه 16 آبان 1393, 11:17 صبح
با سلام کوئری تون مشکل داره، باید قبل و بعداز and توی کوئری (که بین دو تا تاریخ هست)، یک فاصله قرار بدید. در ضمن اینطور نوشتن کوئری صحیح نیست بهتره به صورت پارامتری به شکل زیر بنویسید:
...

SqlDataAdapter DASP =new SqlDataAdapter("select * from table where date between @date1 and @date2", con);
DASP.SelectCommand.Parameters.AddWithValue("@date1", txtDateStart.Text);
DASP.SelectCommand.Parameters.AddWithValue("@date2", txtDateEnd.Text);
...
شاید املای بعضی از کدهای بالا درست نباشد

aslan
جمعه 16 آبان 1393, 11:52 صبح
سلام
قبل و بعد and تک کوتیشن بزارید

RIG000
جمعه 16 آبان 1393, 12:12 عصر
با سلام کوئری تون مشکل داره، باید قبل و بعداز and توی کوئری (که بین دو تا تاریخ هست)، یک فاصله قرار بدید. در ضمن اینطور نوشتن کوئری صحیح نیست بهتره به صورت پارامتری به شکل زیر بنویسید:
...

SqlDataAdapter DASP =new SqlDataAdapter("select * from table where date between @date1 and @date2", con);
DASP.SelectCommand.Parameters.AddWithValue("@date1", txtDateStart.Text);
DASP.SelectCommand.Parameters.AddWithValue("@date2", txtDateEnd.Text);
...
شاید املای بعضی از کدهای بالا درست نباشد
پیرو توضیح دستمون به هیچ وجه غیر پارامتری توصیه نمیشه.

rasoul babadi
جمعه 16 آبان 1393, 13:52 عصر
محمد زاده جان از لطف شما بسیار سپاس گذارم من کد شما رو وارد کردم اما چیزی رو توی گرید ویو نمایش نمیده.
125401

Mahmoud Zaad
جمعه 16 آبان 1393, 14:31 عصر
محمودزاده هستم، این فاصله ای که توی خط دوم و سوم بعد از @date1 و @date2 افتاده کار من نیست کار ویرایشگر سایته!

کلاً کلمه ای که به عنوان پارامتر توی کوئری میارید (بعد از @) دقیقاً بدون فاصله (space)باید توی مقدار دهی هم همون ها رو بیارید.

ضمناً اینجا نیازی به باز و بسته کردن کانکشن نیست.


125404

rasoul babadi
جمعه 16 آبان 1393, 18:19 عصر
سلام متاسفانه فاصله ها را درست کردم اما فایده نداشت بازم این کد فقط گرید ویو رو خالی می کنه و نتیجه رو نشون نمیده.

Mahmoud Zaad
جمعه 16 آبان 1393, 19:45 عصر
مشکل خاصی نباید باشه، یا دیتای شما درست وارد نشده یا اصلاً دیتا به فرمتی که جستجو می کنید توی دیتابیس ندارید.

از روی عکس های شما یه نمونه درست کردم، درست هم کار میکنه

rasoul babadi
شنبه 17 آبان 1393, 17:33 عصر
ازتون سپاس گذارم تا حدی درست شد فقط روز و چک می کنه ماه و سال رو نه
به نظر شما بانکم مشکل نداره

Mahmoud Zaad
شنبه 17 آبان 1393, 19:19 عصر
تاریخ رو از چه نوعی انتخاب کردید؟

rasoul babadi
شنبه 17 آبان 1393, 23:36 عصر
از نوع nvarchar(10)

Mahmoud Zaad
دوشنبه 19 آبان 1393, 19:39 عصر
خب، دو تا مشکل بیشتر نداریم، یا درست ذخیره نمیشه (به فرمت دلخواه) یا درست جستجو نمیشه (به فرمتی که ذخیره شده)!! توی دیتابیس یه نگاه بندازید ببینید اصلاً اطلاعات درست ذخیره شده، بعد تو خود دیتابیس یه کوئری روی همین فیلد اجرا کن ببین جواب میده؟ توی برنامه یه کوئری بدون فیلتر اجرا کنید ببینید اطلاعات به همون فرمت میاره یا نه؟ پیشنهاد می کنم برای تاریخ از maskedTextBox استفاده کنید یا از DatePicker.

Mahmoud Zaad
سه شنبه 20 آبان 1393, 18:07 عصر
سلام دوست عزیز
این رو قبلا نوشتم و به صورت اتوماتیک هستش توی ویبی نوشتم کدش زیاد با سی شارپ تفاوتی نداره دانلود کن نگاهش کن و قبل اینکه اجرا کنی توضیحاتش رو دادم موفق باشی و اینو بگم که این توی تکست باکست سرچ می کنه و اتوماتیک هستش مثل ویندوز
فکر کنید شما یک تکست باکس دارید با این نام Txtsearch و در اثر می خواهید وقتی داخلش سرچ می کنید به صورت هوشمند خودش دنبال اون متن شما بگرده و اعم از اینکه اگه نبود ارور مربوطه رو صادر کنه و یا اینکه اصلا کاری نکنه خوب حالا بازم شما فرض کنید یک جدول دارید داخل دیتابیس و اسم جدول شما هستش Tbl_data و می خواهید از طریق این تکست باکست متن داخل جدول رو
رو بخونه یا پیدا کنه
البته براتون درست کردم و فرستادم خوب قبل از اجرای این برنامه بگم که بانکش sqlserver 2008 r2 هست و برای اجرای اون اول بانک اطلاعاتی خودتون رو باز کنید و حالا به صورت (local) برید تو و بعد یک فایل exe درست کردم که اون رو اجرا کنید خودکار خودش جدول ها رو روی دیتابیس شما درست می کنه و بعد برنامه رو اجرا کنید و نتیجه فوق رو ببنید و اگر سوالی داشتید تو خصوصی بگید چون فرصت نمی کنم بیام تو خصوصی ها رو فقط گاهی چک می کنم و براتون می فرستم موفق باشید
http://s5.picofile.com/file/81473973...tion2.rar.html (http://s5.picofile.com/file/8147397326/WindowsApplication2.rar.html)

آقا دمت گرم، واسه من نوشتی اینو؟!!!! من گفتم بنویسی؟ یا این سوال بود یا چی؟!!!


دوست عزیز سوء تفاهم نشه ولی من پیشنهاد می کنم دوستان به هیچ وجه فایل exe ی ناشناخته رو اجرا نکنند مخصوصاً اگه توی یک فروم برنامه نویسی باشه! فقط سورس!

Mahmoud Zaad
سه شنبه 20 آبان 1393, 22:16 عصر
سلام دوست عزیز این جا انجمن برنامه نویس هستش و اینجا آشیانه نیست که شما بگی هیچ فایل exe رو اجرا نکنید لطفا اول اجرا کن ببین چی میشه و بعد بیا حرف بزن چیزی که نمی دونی حرف نزن من تو رو درک می کنم ولی این به خاطر راحتی کار هستش و می تونی در مورد sql packager تحقیق کنی که ببینی چقد مهم هستش و یک فایل exe از بانکت ایجاد می کنه و با اجرا اون می تونی جدول ها رو به صورت اتوماتیک بسازی این که شما به هرکی میرسی میگی یک پا هکره این از نظر من درسته ولی خوب شما اول باید اون رو اجرا کنید ببین چی میشه و بعدش اگه اون ویروس باشه که انتی ویروس تشخیص میده و اینو بهم یاد دادی که هیچ وقت مجانی واسه کسی کاری نکنم ممنون از راهنمایت و دوستم می گفت به هیچ کس خوبی نکن که جوابت رو اینطوری می دن که من باور نکردم ولی الان با چشم های خودم دیدم و لطفا در مورد چیزی که نمی دونی لطفا پست نده
لطفا این جا رو هم بخون دیگه تا دچار اشتباه نشی البته حرفت درسته تو این دنیا به کسی نباید اعتماد کنی ولی اینی که میگی هیچ وفت یک هکر نمی یاد از این راه به کسی چیزی بده که هیچی گیرش نمی یاد تو بگیر من به این طرف دادم چی گیرم میاد بنده خدا هنوز تو یک سرچ مونده می تونی دقیقا بگی چی گیرم میاد و بعدش خدا رو فراموش نکن من خدامو دارم که داره می بینه بنده اش داره خوبی می کنه ولی داره جوابش رو اینطوری می دن خوب بماند دیگه بی خیال
خلاصه این جا هم یک سر بزن تا اطلاعات قوی شه و راهی پیدا کنیم که بتونیم این نرم افزار رو کرک کنیم چون این نرم افزار اینقد خوبه که نمیشه به این راحتی گیر آورد و بعد از 15 روز ازت کد اکتیو می خواهد خوب حالا اگه خودت رو به عنوان کسی می شناسی که هکری بیا این جا رو ببین و بعدش به فکر یک چاره باش
http://www.mspsoft.com/1393/7/5/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-sql-packager-%D8%A7%D8%B2-%D9%85%D8%AC%D9%85%D9%88%D8%B9%D9%87-%D9%86%D8%B1%D9%85-%D8%A7%D9%81%D8%B2%D8%A7%D8%B1%DB%8C-radgate/

ببینید من هم داشتم به این کاربر کمک می کردم، بعد شما اومدید خطاب به من پست دادید، خب آدم مشکوک میشه! البته من تو پست قبلی، قبل از جمله ام نوشته بودم "سوء تفاهم نشه" ولی بعداً که ویرایش کردم این رو هم پاک کردم و الان دوباره اضافه اش می کنم، به هر حال شاید من عجله کردم و از شما معذرت میخوام ولی من همچنان هیچ فایل اگزه ای رو اجرا نمی کنم و اون پیشنهاد رو همچنان دارم. اون دوستتون هم الِکی! گفته، آدم ها باید به هم کمک کنند. یک روز هم ما گیر می کنیم از بقیه کمک می گیریم!

ghasem110deh
پنج شنبه 06 آذر 1393, 10:31 صبح
دوستان من سرچم از طریق تکست باکس انجام میدم :

SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=RGF;Integrated Security=True"); SqlCommand com = new SqlCommand();
DataTable table = new DataTable();
com.Connection = con;
com.CommandType = CommandType.Text;
com.CommandText = "SELECT * FROM Tsoft WHERE Soft LIKE @s";
com.Parameters.AddWithValue("@s", textBox8.Text + "%");
SqlDataAdapter adapter = new SqlDataAdapter(com);
DataSet ds = new DataSet();
adapter.Fill(ds, "Person");
dataGridView1.DataSource = ds.Tables["Person"];

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

Share & Learn
پنج شنبه 06 آذر 1393, 18:02 عصر
دوستان من سرچم از طریق تکست باکس انجام میدم :

SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=RGF;Integrated Security=True"); SqlCommand com = new SqlCommand();
DataTable table = new DataTable();
com.Connection = con;
com.CommandType = CommandType.Text;
com.CommandText = "SELECT * FROM Tsoft WHERE Soft LIKE @s";
com.Parameters.AddWithValue("@s", textBox8.Text + "%");
SqlDataAdapter adapter = new SqlDataAdapter(com);
DataSet ds = new DataSet();
adapter.Fill(ds, "Person");
dataGridView1.DataSource = ds.Tables["Person"];

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

اون موقع باید خط ششم رو اینطوری تغییر بدید

com.Parameters.AddWithValue("@s", "%" + textBox8.Text + "%");

ghasem110deh
پنج شنبه 06 آذر 1393, 18:27 عصر
جون داداش یه بار دکمه تشکر کم بود ... (از صبح 10 جا پرسیدم )
:تشویق: