PDA

View Full Version : ساخت جستجو در سایت



mor_zia
یک شنبه 13 مرداد 1392, 11:09 صبح
سلام
من میخوام تو وبسایتم تو صفحه مستر پیج یک تکست باکس بذارم و یک دکمه، وقتی کلمه ای توش تایپ شد بره از توی کل دیتابیسم (که شامل 20 جدول) بگرده و نتیجه رو تو یه صفحه دیگه نمایش بده
سرعت انجام کار هم برام مهمه
من asp.net به زبان سی شارپ سایت رو درست کردم
دوستان اگه راهنمایی کنن ممنون می شم

fri jun
یک شنبه 13 مرداد 1392, 12:37 عصر
بستگی به جدول هات داره ، یعنی اینکه ارتباط بینشون چه جوریه و اینکه ورودی و خروجیت دقیقا چیه!!!
اما من stored procedure رو پیشنهاد میدم
یعنی یه query مناسب بنویس توش و به راحتی تو مستر پیج ازش استفاده کن

mor_zia
یک شنبه 13 مرداد 1392, 17:07 عصر
بستگی به جدول هات داره ، یعنی اینکه ارتباط بینشون چه جوریه و اینکه ورودی و خروجیت دقیقا چیه!!!
اما من stored procedure رو پیشنهاد میدم
یعنی یه query مناسب بنویس توش و به راحتی تو مستر پیج ازش استفاده کن
من 3 تا جدول دارم که میخوام از توی اونها جستجو انجام بشه . این سه تا جدول شامل جدول اخبار، اطلاعیه ها و مقالات هست
ولی اصلا بلد نیستم که چظور باید از stored procedur استفاده کنم . فقط می دونم که stored procedur رو از کجا میشه درست کرد. ولی دستورات داخلش رو هم اگه بتونی بهم بگی ممنونت می شم
در نهایت می خوام تو صفحه یک textbox و یک bottom باشه که هر کلمه ای که توش وارد شد با زدن دکمه نتایج در یک صفحه دیگر مثلا result.aspx بصورت سطح به سطر نمایش داده بشه، و هر کدوم قابلیت لینک داشته باشه که به صفحه اصلیش هدایت بشه
اگه بتونی کمکم کنی لطف بزرگی کردی بهم. مرسی

parvizwpf
یک شنبه 13 مرداد 1392, 17:17 عصر
دوست عزیز شما همت کنید شروع کنید به کدنویسی سپس کم کم دوستان یاری میکنند.
این طور استور پروسیجر تعریف کنید در اس کیو ال:

Create Proc MyProc
@var1 int
as
select * from tableNews where id=@var1

fri jun
یک شنبه 13 مرداد 1392, 17:34 عصر
من هم با parvizwpf موافقم
شما شروع کن ما هم کمکت می کنیم ، فعلا stored procedure های ساده باید بنویسی تا بتونی اون query مورد نظرت رو در بیاری
احتمالا با چندتا select و union می تونی راحت درش بیاری

mor_zia
یک شنبه 13 مرداد 1392, 18:54 عصر
من هم با parvizwpf موافقم
شما شروع کن ما هم کمکت می کنیم ، فعلا stored procedure های ساده باید بنویسی تا بتونی اون query مورد نظرت رو در بیاری
احتمالا با چندتا select و union می تونی راحت درش بیاری

یعنی مثل ساخت کوئری باید دستورات رو تو این بذارم ؟!
خب من الان یکی ساختم که فقط select * رو انجام میده
بعد چطور باید ازش تو صفحه استفاده کنم؟

fri jun
یک شنبه 13 مرداد 1392, 19:05 عصر
اره ترکیبی از چندتا select می تونی توش بنویسی و یه خروجی بگیری
این stored procedure الان مثل یه جدول هستش ، به راحتی می تونی بخونیش ، این جوری :
exec name_stored procedure
بریز تو یه datareader و اطلاعاتش رو بخون

mor_zia
یک شنبه 13 مرداد 1392, 19:29 عصر
اره ترکیبی از چندتا select می تونی توش بنویسی و یه خروجی بگیری
این stored procedure الان مثل یه جدول هستش ، به راحتی می تونی بخونیش ، این جوری :
exec name_stored procedure
بریز تو یه datareader و اطلاعاتش رو بخون
مرسی
خب حالا چطوری از textbox استفاده کنم و وقتی که textbox تو صفحه مستر پیج هست، چطور وقتی دکمه رو زدم اطلاعت رو تو صفحه دیگه مثل result ببینم

fri jun
یک شنبه 13 مرداد 1392, 21:18 عصر
اول stored procedure رو طوری تنظیم کن که بتونه ورودی بگیره
دوم
exec name_stored procedur "'+ textbox1.text + '"
حالا خروجی رو بخون
بقیه سوالتم که دیگه روال عادی asp.net هستش
مطالبی مثل query string که دیگه خودت می تونی انجام بدهی
موفق باشی

mor_zia
شنبه 19 مرداد 1392, 13:48 عصر
اول stored procedure رو طوری تنظیم کن که بتونه ورودی بگیره
دوم
exec name_stored procedur "'+ textbox1.text + '"
حالا خروجی رو بخون
بقیه سوالتم که دیگه روال عادی asp.net هستش
مطالبی مثل query string که دیگه خودت می تونی انجام بدهی
موفق باشی

مرسی از راهنماییت .

okpnz1
شنبه 19 مرداد 1392, 15:58 عصر
نمیشه کسی که کامل میدونه یه کد بذاره همه استفاده کنن؟

خیلیا تو سرچ (مث سرچ گوگل) مشکل دارن از هر کسی می پرسیم کامل نمیگه:گریه:

General-Xenon
شنبه 19 مرداد 1392, 17:28 عصر
بستگی به جدول هات داره ، یعنی اینکه ارتباط بینشون چه جوریه و اینکه ورودی و خروجیت دقیقا چیه!!!
اما من stored procedure رو پیشنهاد میدم
یعنی یه query مناسب بنویس توش و به راحتی تو مستر پیج ازش استفاده کن

سلام .
چرا از Data Adapter استفاده نمیکنید ؟
هم کوئری زیر دستتونه و هم بدون نیاز به دنگ و فنگ تغییر توی stored procedure...
using (SqlConnection cn = new SqlConnection("Connection string"))
{
DataSet _res = new DataSet();
string[] _command = new string[]{
"SELECT 1 WITH @var1",
"SELECT 2 WITH @var1",
"SELECT 3 WITH @var1",
"SELECT 4 WITH @var1",
"SELECT 5 WITH @var1",
"SELECT 6 WITH @var1"
};
SqlDataAdapter da = new SqlDataAdapter(string.Join(";", _command), cn);
da.SelectCommand.Parameters.AddWithValue("@var1", "Value");
da.Fill(_res);
da.Dispose();
foreach (DataTable dt in _res.Tables)
{
if (dt.Rows.Count < 1) break;
// آماده برای خواندن مقادیر پیدا شده
}
}

mor_zia
شنبه 19 مرداد 1392, 18:12 عصر
سلام .
چرا از Data Adapter استفاده نمیکنید ؟
هم کوئری زیر دستتونه و هم بدون نیاز به دنگ و فنگ تغییر توی stored procedure...
using (SqlConnection cn = new SqlConnection("Connection string"))
{
DataSet _res = new DataSet();
string[] _command = new string[]{
"SELECT 1 WITH @var1",
"SELECT 2 WITH @var1",
"SELECT 3 WITH @var1",
"SELECT 4 WITH @var1",
"SELECT 5 WITH @var1",
"SELECT 6 WITH @var1"
};
SqlDataAdapter da = new SqlDataAdapter(string.Join(";", _command), cn);
da.SelectCommand.Parameters.AddWithValue("@var1", "Value");
da.Fill(_res);
da.Dispose();
foreach (DataTable dt in _res.Tables)
{
if (dt.Rows.Count < 1) break;
// آماده برای خواندن مقادیر پیدا شده
}
}

این کوئری رو تو چه صفحه ای باید بنویسیم. منظورم اینه که من میخوام textbox رو تو مسترپیج بذارم و و قتی کلمه ای رو زدم نتیجش از تو هر 4 تا جدول موجود بیاد تو یک صفحه دیگه مثل result.aspx نشون داده بشه
میدونم سوالم یکم آماتوریه، ولی خوب باید یاد بگیرم دیگه ...
در ضمن ، چون من کل تبادل اطلاعات با دیتابیس رو از طریق dataset انجام دادم، میشه دقیقا بگید که این کوئری رو اونجا هم می تونم بنویسم یا نه یا حتما باید تو کد بنویسم؟
مرسی

General-Xenon
شنبه 19 مرداد 1392, 18:18 عصر
این کوئری رو تو چه صفحه ای باید بنویسیم. منظورم اینه که من میخوام textbox رو تو مسترپیج بذارم و و قتی کلمه ای رو زدم نتیجش از تو هر 4 تا جدول موجود بیاد تو یک صفحه دیگه مثل result.aspx نشون داده بشه
میدونم سوالم یکم آماتوریه، ولی خوب باید یاد بگیرم دیگه ...
در ضمن ، چون من کل تبادل اطلاعات با دیتابیس رو از طریق dataset انجام دادم، میشه دقیقا بگید که این کوئری رو اونجا هم می تونم بنویسم یا نه یا حتما باید تو کد بنویسم؟
مرسی
ببین این تکه کدیست که برای جستجو در چند Table به کار میره .. باید در مستر پیجت یک باتن بزاری که هنگامی که فشرده شد مقدار اون تکستت رو بگیره و بصورت کوئری استرینگ پاس بدی به Result و این کد رو باید اونجا استفاده کنی و در Page load صفحه Result بزاری یا حالا میتونی مقادیر رو به هر نحوی که خواستی نشون بدی ...
دستور سرچ :
SELECT * FROM TABLE1 WHERE FIELD LIKE %'مقدار'%

okpnz1
شنبه 19 مرداد 1392, 20:34 عصر
من یه سوال می پرسم بخندید مدیونید:لبخندساده:
"SELECT 1 WITH @var1",تواینجا 1 (اسم جدولمونه؟)؟؟؟؟:خجالت:
SqlDataAdapter da = new SqlDataAdapter(string.Join(";", _command), cn) این سیمیکالون چیه؟:خجالت:
da.SelectCommand.Parameters.AddWithValue("@var1", "Value"); اینجا باید فیلدارو بنویسیم؟:خجالت:
یه سوال دیگه
توی فورایج بگیم که نتیجرو بریز تو مثلا گرید ویو؟

ببخشید این همه سوال پرسیدم اخه واقعا سرجم مشکل داره

راسی میتونم از دوستان بخام درمورد سایتم نظرشونو بدن؟؟؟؟؟؟؟؟؟؟؟؟:لبخند:

تو این لینک (http://barnamenevis.org/showthread.php?413280-%D9%86%D8%B8%D8%B1-%D8%B3%D9%86%D8%AC%DB%8C-%D8%AF%D8%B1%D8%A8%D8%A7%D8%B1%D9%87-%D8%B3%D8%A7%DB%8C%D8%AA)هستش ادرس

General-Xenon
شنبه 19 مرداد 1392, 21:08 عصر
من یه سوال می پرسم بخندید مدیونید:لبخندساده:
"SELECT 1 WITH @var1",تواینجا 1 (اسم جدولمونه؟)؟؟؟؟:خجالت:
SqlDataAdapter da = new SqlDataAdapter(string.Join(";", _command), cn) این سیمیکالون چیه؟:خجالت:
da.SelectCommand.Parameters.AddWithValue("@var1", "Value"); اینجا باید فیلدارو بنویسیم؟:خجالت:
یه سوال دیگه
توی فورایج بگیم که نتیجرو بریز تو مثلا گرید ویو؟

ببخشید این همه سوال پرسیدم اخه واقعا سرجم مشکل داره

راسی میتونم از دوستان بخام درمورد سایتم نظرشونو بدن؟؟؟؟؟؟؟؟؟؟؟؟:لبخند:

تو این لینک هستش ادرس
http://barnamenevis.org/showthread.php?413280-%D9%86%D8%B8%D8%B1-%D8%B3%D9%86%D8%AC%DB%8C-%D8%AF%D8%B1%D8%A8%D8%A7%D8%B1%D9%87-%D8%B3%D8%A7%DB%8C%D8%AA



SELECT 1 WITH @var1",تواینجا 1 (اسم جدولمونه؟)؟؟؟؟
منظور از این یعنی اولین دستور Select با متغیر var1 که مابین همه Select ها یکی هست .......

SqlDataAdapter da = new SqlDataAdapter(string.Join(";", _command), cn) این سیمیکالون چیه؟
برای جدا سازی دستورات Select استفاده میشه که درهم برهم نشه Select ها . .. . .

da.SelectCommand.Parameters.AddWithValue("@var1", "Value"); اینجا باید فیلدارو بنویسیم؟
مقدار دهی همون متغیر تیکه اولی که خندیدی بهش.. یعنی عبارتی که می خوای سرچ کنی....

توی فورایج بگیم که نتیجرو بریز تو مثلا گرید ویو؟
میتونی همه جستجو شده ها رو یکجا جمع کنی مثل Datatable و با استفاده از مثلا Repeater , Gridview و .. .. نشون بدی و لینک کنی .. .. . .

موفق باشی

okpnz1
شنبه 19 مرداد 1392, 21:13 عصر
خیلی زشته این جوری پست دادن ها .. !!!!
---Quote--- SELECT 1 WITH @var1",تواینجا 1 (اسم جدولمونه؟)؟؟؟؟
منظور از این یعنی اولین دستور Select با متغیر var1 که مابین همه Select ها یکی هست ....... خنده داره ؟ بخند SqlDataAdapter da = new SqlDataAdapter(string.Join(";", _command), cn) این سیمیکالون چیه؟
برای جدا سازی دستورات Select استفاده میشه که درهم برهم نشه Select ها . .. . . خنده داره ؟؟؟؟ بخند
---Quote--- da.SelectCommand.Parameters.AddWithValue("@var1", "Value"); اینجا باید فیلدارو بنویسیم؟

مقدار دهی همون متغیر تیکه اولی که خندیدی بهش.. یعنی عبارتی که می خوای سرچ کنی....خنده داره ؟ بخند
توی فورایج بگیم که نتیجرو بریز تو مثلا گرید ویو؟
میتونی همه جستجو شده ها رو یکجا جمع کنی مثل Datatable و با استفاده از مثلا Repeater , Gridview و .. .. نشون بدی و لینک کنی .. .. . . خنده داره اینا ؟؟؟
در ضمن سعی کن کسی و مسخره نکنی گرامی .. . این جا جای اینجور کارا نیست ... اگر نمی دونی چی به چیه یا اینکه کمکی نمی کنی سعی کن پست هم نفرستی ... نمیگن که . . . آفرین... موفق باشی



مرسی بابت جواب من گفتم سرجم مشکل داره یا بهتر بگن کوئری نوشتنم
جواب نمیدادین بهتر از اینجور جواب دادن بود اگه ناراحتتون کرده سوالام می تونستی پیام بدی
بابت جواباتون ممنون شمام موفق باشین

General-Xenon
شنبه 19 مرداد 1392, 21:28 عصر
مرسی بابت جواب ولی من نه کسیو مسخره کردم نه چیزی اولشم گفتم مشکل خودمه
جواب نمیدادین بهتر از اینجور جواب دادن بود اگه ناراحتتون کرده سوالام می تونستی پیام بدی
بابت جواباتون ممنون آقای محترم

بله من از شما معذرت می خوام . تند روی از سمت من بود

khorsandreza
شنبه 19 مرداد 1392, 22:50 عصر
سلام .
چرا از Data Adapter استفاده نمیکنید ؟
هم کوئری زیر دستتونه و هم بدون نیاز به دنگ و فنگ تغییر توی stored procedure...
using (SqlConnection cn = new SqlConnection("Connection string"))
{
DataSet _res = new DataSet();
string[] _command = new string[]{
"SELECT 1 WITH @var1",
"SELECT 2 WITH @var1",
"SELECT 3 WITH @var1",
"SELECT 4 WITH @var1",
"SELECT 5 WITH @var1",
"SELECT 6 WITH @var1"
};
SqlDataAdapter da = new SqlDataAdapter(string.Join(";", _command), cn);
da.SelectCommand.Parameters.AddWithValue("@var1", "Value");
da.Fill(_res);
da.Dispose();
foreach (DataTable dt in _res.Tables)
{
if (dt.Rows.Count < 1) break;
// آماده برای خواندن مقادیر پیدا شده
}
}
سلام
من حقیقتا متوجه نشدم در دستورات نام جدول و ستون ها را باید چگونه انتخاب کرد شما یک دستور کاربدی خودتان ناقص گذاشین اینجوری افرادی مثل من که آماتور هستن سر در گم میشن.
من این مثال را بارها با سعی و خطا نتونستم اجراش کنم


string[] _command = new string[]{
"SELECT 1 WITH @var1",
"SELECT 2 WITH @var1",
"SELECT 3 WITH @var1",
"SELECT 4 WITH @var1",
"SELECT 5 WITH @var1",
"SELECT 6 WITH @var1"
};
تو این قسمت نام جدول چگونه باید درج بشه؟

General-Xenon
یک شنبه 20 مرداد 1392, 00:03 صبح
سلام
من حقیقتا متوجه نشدم در دستورات نام جدول و ستون ها را باید چگونه انتخاب کرد شما یک دستور کاربدی خودتان ناقص گذاشین اینجوری افرادی مثل من که آماتور هستن سر در گم میشن.
من این مثال را بارها با سعی و خطا نتونستم اجراش کنم

تو این قسمت نام جدول چگونه باید درج بشه؟

ببینید دوست عزیز من که نمی دونم شما جداولتون به چه صورت هست اما Query براتون گذاشتم تا بر اساس داده های خودتون ....... بنویسید .....

مثلا جدول tbNews
فیلد NewsContent
عبارت 'سلام'

کوئری : SELECT * FROM [tbnews] WHERE [newscontent] LIKE %N'سلام'%

چندین جدول اگر داشته باشید جای همین Select 1 , Select 2 کوئری های متفاوت قرار بدین.... خیلی سادست
string[] _command = new string[]{
"SELECT * From tbnews where desc like %N'سلام'%",
"SELECT * From tbcomment where desc like %N'سلام'%"",
"SELECT * From tbebook where desc bookname %N'سلام'%"",
"SELECT * From tbDescription where desc like %N'سلام'%"",
"SELECT TOP 10 * From tbproduct where name like %N'سلام'%""
};

mor_zia
چهارشنبه 23 مرداد 1392, 10:57 صبح
ببینید دوست عزیز من که نمی دونم شما جداولتون به چه صورت هست اما Query براتون گذاشتم تا بر اساس داده های خودتون ....... بنویسید .....

مثلا جدول tbNews
فیلد NewsContent
عبارت 'سلام'

کوئری : SELECT * FROM [tbnews] WHERE [newscontent] LIKE %N'سلام'%

چندین جدول اگر داشته باشید جای همین Select 1 , Select 2 کوئری های متفاوت قرار بدین.... خیلی سادست
string[] _command = new string[]{
"SELECT * From tbnews where desc like %N'سلام'%",
"SELECT * From tbcomment where desc like %N'سلام'%"",
"SELECT * From tbebook where desc bookname %N'سلام'%"",
"SELECT * From tbDescription where desc like %N'سلام'%"",
"SELECT TOP 10 * From tbproduct where name like %N'سلام'%""
};
دوست عزیز ، مرسی از راهنماییت
من این کار رو کردم حالا 2 تا سوال دارم
1- تو این select که نوشتیم، من میخوام که بجای کلمه "سلام" بیاد از کلمه ای که از طریق query string به این صفحه آوردم استفاده بکنه
2- اینکه میخوام خروجی این کوئری رو به وسیله یک دیتا لیست نمایش بدم و هر چیزی که پیدا کرد رو بصورت لینک نمایش بده و با کلیک روی او به صفحه مربوطش هدایت بشه
دستت درد نکنه

fakhravari
چهارشنبه 23 مرداد 1392, 18:10 عصر
نمونه :لبخندساده:
http://barnamenevis.org/showthread.php?319398

محمدجواد67
پنج شنبه 24 مرداد 1392, 08:37 صبح
نمونه :لبخندساده:
http://barnamenevis.org/showthread.php?319398
نمیدونم چرا من هرچی میگردم کدهای HTML برای قسمت جستجو سایت شما رو پیدا کنم نمی تونم.

okpnz1
پنج شنبه 24 مرداد 1392, 10:49 صبح
نمونه :لبخندساده:
http://barnamenevis.org/showthread.php?319398
شما سرجتون از یه جدول بود درسته؟
حالا جنتا جدول جطور میشه؟

محمدجواد67
پنج شنبه 24 مرداد 1392, 13:36 عصر
شما سرجتون از یه جدول بود درسته؟
حالا جنتا جدول جطور میشه؟
فقط کافی شما داخل Procedure به جای یک دستور select به ازای هر جدول یک دستور select بذاری و در نهایت Procedure بعد از اجرا به شما یه خروجی از تمام جدول ها میده
البته اگر از Procedure استفاده کرده باشید
موفق باشید.

mor_zia
جمعه 25 مرداد 1392, 14:47 عصر
نمونه :لبخندساده:
http://barnamenevis.org/showthread.php?319398
جناب fakhravari (http://barnamenevis.org/member.php?128926-fakhravari)
واقعا از شما تشکر می کنم. این نمونه ای که گذاشتین خیلی به من کمک کرد تا بتونم دقیقا بفهمم موضوع از چه قراره
باز هم تشکر
فقط یک سوال من نتونستم همزمان تو کوئری از 3 تا جدول جستجو کنم، میتونی یک راهنمایی تو این زمینه بکنید
فکر میکنم که باید تو Count_like دو تا select دیگه اضافه کنم. ولی هر کار می کنم جواب نمیگیرم.


SqlConnection con = new SqlConnection(ConnectionString);
SqlCommand cmd = new SqlCommand("SELECT COUNT(*)AS Jam FROM " + SQLTableName + " WHERE NewsTitle like N'%" + like + "%' " , con);
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@NewsTitle", SqlDbType.NVarChar).Value = like;



"SELECT COUNT(*) AS Jam FROM" + SQLTableName + " WHERE EttelaTitle like N'%" + like + "%' "