PDA

View Full Version : متد جستجو



cse.Abdali
شنبه 25 شهریور 1391, 18:18 عصر
سلام، دو تا مشکل توی نوشتن نرم افزار آموزشگاه دارم. اگه امکانش هست لطف کنید راهنماییم کنید

1. مشکل این متد جستجو کجاست؟



کد پشت فرم برای فراخوانی متد


clsCourse course=new clsCourse();
dgvCourseResultSearch.DataSource = course.advancedSearch(txtCourseName.Text, cmbTeacherName.SelectedValue.ToString(), cmbSkill.SelectedValue.ToString(), cmbDegree.SelectedValue.ToString(), txtMajor.Text, txtStartTime.Text, txtEndTime.Text, txtRegisterStartTime.Text, txtRegisterEndTime.Text, Convert.ToInt32(txtCourseCode.Text));




و این هم متد جستجو در لایه Business Logic



public DataTable advancedSearch(string strCourseName, string strTeacherName, string strSkillName, string strDegree, string strMajor, string strStartTime, string strEndTime, string strRegisterStartTime, string strRegisterEndTime, int intCourseCode)
{
string strAdvancedSearch = " select * from tblCourse c inner join tblTeacher t on c.Teacher_TeacherId=t.TeacherId inner join tblClass cl on c.Class_ClassName=cl.ClassName inner join tblSkill s on s.SkillCode=c.Skill_SkillCode where CourseName like N'%{0}%' and Name like N'%{1}%' and SkillName like N'%{2}%' and StudentDegree like N'%{3}%' and StudentMajor like N'%{4}%' and StartTime>'{5}' and EndTime<'{6}' and RegisterStartTime >'{7}' and RegisterEndTime<'{8}' and CourseCode like {9} ";
strAdvancedSearch=string.Format(strAdvancedSearch, strCourseName,trTeacherName, strSkillName, strDegree, strMajor, strStartTime, strEndTime, strRegisterStartTime, strRegisterEndTime, intCourseCode);
clsDataAccess dataAccess = new clsDataAccess();
dataAccess.connect();
DataTable dt = dataAccess.query(strAdvancedSearch);
dataAccess.disConnect();
return dt;
}



با کلیک روی دکمه جستجو با خطای

'System.NullReferenceException'


Object reference not set to an instance of an object.


مواجه میشم







2. برای هر دوره باید مشخص کنیم این دوره برای خانم ها، آقایان و یا برای هر دو مورد برگزار شود. این فیلد از چه نوعی باید تعریف شود



با تشکر از راهنمایی شما

nilmil_nil
شنبه 25 شهریور 1391, 18:55 عصر
احتمالا به ComboBox هات گیر میده حتما قبل از فراخوانی این متد جستجو خالی هستن یا selectedValue مقدار null داره یعنی همون کمبو باکس خالیه

nilmil_nil
شنبه 25 شهریور 1391, 18:57 عصر
ضمنا سوال دوم هام یادم رفت بگم
از tiny Int استفاده کن
و مقدار هاشو 1و2و3
1=آقایان
2=خانم ها
3= هردو ...

cse.Abdali
یک شنبه 26 شهریور 1391, 07:32 صبح
احتمالا به ComboBox هات گیر میده حتما قبل از فراخوانی این متد جستجو خالی هستن یا selectedValue مقدار null داره یعنی همون کمبو باکس خالیه
نه همه ComboBox ها پر هستن

cse.Abdali
یک شنبه 26 شهریور 1391, 15:41 عصر
من که در تمام برنامه هام از Binding Source استفاده می کنم و چنین مشکلاتی ندارم. نمی دونم چرا افراد کمی از biniding استفاده می کنند ولی اونایی که استفاده نمی کنند دارن الکی وقتشونو با این همه کد نویسی هدر می دن...
راستش من اولین نرم افزارم هست که دارم می نویسم و برای همین با خیلی از مفاهیم از جمله همین که شما فرمودید آشنایی ندارم.

ali_habibi1384
دوشنبه 27 شهریور 1391, 08:19 صبح
راستش من اولین نرم افزارم هست که دارم می نویسم و برای همین با خیلی از مفاهیم از جمله همین که شما فرمودید آشنایی ندارم.
خب برام جالبه كه براي اولين بار برنامه مينويسيد و يكهو اومدين معماري سه لايه!
روش Binding Source: روشي هست كه بجاي استفاده از كد نويسي از ويزارد استفاه ميشه و هميشه توصيه شده كه از اين روش بپرهيزيد معمولا افراد تازه كار از اين روش استفاده ميكنند

سلام، دو تا مشکل توی نوشتن نرم افزار آموزشگاه دارم. اگه امکانش هست لطف کنید راهنماییم کنید
1. مشکل این متد جستجو کجاست؟
کد پشت فرم برای فراخوانی متد
راستش شما خيلي سخت داريد سرچ ميكنيد واقعا پيدا كردن خطا در چنين كدي كه حتي معلوم نيست view كه ساختيد ساختار درستي رو برميگردونه واقعا پيچيده است.
پيشنهاد ميكنم ويو رو تويSQL درست كنيد و سپس توسط يه SP جستجو رو انجام بديد حداقل اينجوري ميوتنيد بفهميد دقيقا كجاي كد مشكل داره.

cse.Abdali
دوشنبه 27 شهریور 1391, 11:29 صبح
خب برام جالبه كه براي اولين بار برنامه مينويسيد و يكهو اومدين معماري سه لايه!من سی# را با معماری سه لایه آموزش دیدم و اصلا بدون این معماری فکر نمی کنم بتونم کار کنم!


روش Binding Source: روشي هست كه بجاي استفاده از كد نويسي از ويزارد استفاه ميشه و هميشه توصيه شده كه از اين روش بپرهيزيد معمولا افراد تازه كار از اين روش استفاده ميكنندپس binding برای افراد تازه کاره!!! اینطور که danialafshari گفتن احساس کردم برای حرفه ای هاست!


راستش شما خيلي سخت داريد سرچ ميكنيد واقعا پيدا كردن خطا در چنين كدي كه حتي معلوم نيست view كه ساختيد ساختار درستي رو برميگردونه واقعا پيچيده است.
پيشنهاد ميكنم ويو رو تويSQL درست كنيد و سپس توسط يه SP جستجو رو انجام بديد حداقل اينجوري ميوتنيد بفهميد دقيقا كجاي كد مشكل داره.هم ویو را ساختم و هم sp. اما برای فراخوانی sp در معماری سه لایه مشکل دارم. اگه لطف کنید برام مثال بذارید ممنون میشم

از راهنمایی تون سپاسگزارم

ali_habibi1384
دوشنبه 27 شهریور 1391, 12:02 عصر
اگر واقعا براي فراخواني sp در سه لايه مشكل داريد معلومه كه استاد راهنماتون يه مقدار كم كاري كرده.
در اين معماري يه لايه dal داريم كه كانكشن و توابع ارتباط با ديتا ها در اونجا قرار داره. و يك سري كلاس كه معادل هر تيبل در ديتابيس در برنامه ساخته ميشه و از كلاس dal ارث بري ميكنند.
حالا كافيه بدونيد مقداري كه قراره SP برگردونه از چه نوعي هست؟ ديتا تيبل؟ تك مقداري؟ ديتاست؟ و ...
بسته به اين مقدار از تابه مورد نظر با پارامترهاي ورودي همون SP استفاده ميكنيد. مثال زير نمونه اي از كلاسي است كه از لايه Dal ارث بري كرده و SP رو فراخواني ميكنند:
class TariffDay:DALBase
{
public DataTable SelectAll()
{
return ExecuteDataTable(CommandType.StoredProcedure, "tblTariffDay_SelectAll", null);
}

public DataTable SelectRow(string IdTariffDay)
{
return ExecuteDataTable(CommandType.StoredProcedure, "tblTariffDay_SelectRow", new SqlParameter[]{
new SqlParameter( "@IdTariffDay",IdTariffDay )
});
}

public int Delete(string IdTariffDay)
{
return ExecuteNoneQuery(CommandType.StoredProcedure, "tblTariffDay_DeleteRow", new SqlParameter[]{
new SqlParameter( "@IdTariffDay",IdTariffDay )
});
}
public DataTable SelectRowsByIdCarType(string idCarType)
{
return ExecuteDataTable(CommandType.StoredProcedure, "tblTariffDay_SelectRowsByIdCarType", new SqlParameter[]{
new SqlParameter( "@idCarType",idCarType )
});
}
public int Insert(string idCarType, string FromDay,string ToDay,string Price)
{
return ExecuteNoneQuery(CommandType.StoredProcedure, "tblTariffDay_Insert", new SqlParameter[]{
new SqlParameter("idCarType",idCarType),
new SqlParameter("FromDay",FromDay),
new SqlParameter("ToDay",ToDay),
new SqlParameter("Price",Price)

});
}
public int Update(string IdTariffDay, string idCarType, string FromDay, string ToDay, string Price)
{
return ExecuteNoneQuery(CommandType.StoredProcedure, "tblTariffDay_Update", new SqlParameter[]{
new SqlParameter("IdTariffDay",IdTariffDay),
new SqlParameter("idCarType",idCarType),
new SqlParameter("FromDay",FromDay),
new SqlParameter("ToDay",ToDay),
new SqlParameter("Price",Price)

});
}

}

cse.Abdali
سه شنبه 28 شهریور 1391, 09:00 صبح
نه آقای ali_habibi1384 (http://barnamenevis.org/member.php?48789-ali_habibi1384) کم کاری از استاد نبوده چون من توی دو دوره جدا سی# و اس کیو ال را یاد گرفتم و تو دوره سی# حرفی از sp نبود
من الان یه مشکلی دارم
ما تو لایه DAL 4 متد داریم
connect
disconnect
Query
NonQuery
که ظاهرا من باید از Query استفاده کنم. اما ورودی این متد رشته است. مثلا من دستورهای SQL را در کلاس های لایه BL داخل رشته قرار میدم و به این متد می فرستم، اما الان sp رو با پارامترهاش بهش پاس میدم، که درست نیست. میشه بگید چکار کنم؟!!