PDA

View Full Version : query گرفتن از دیتابیس با شرط ترکیبی از خود فیلدها در سی شارپ



mehdihalla
دوشنبه 23 فروردین 1395, 06:07 صبح
یه دیتابیس دارم با سه تا فیلد سال و ماه و روز و مقدار مصرف . ودر برنامه سی شارپی که نوشتم می خوام کوری بگیرم در قسمت commandtext نمیدونم چطور شرطم رو بذارم؛ قابل توضیح اینکه شرطم میخوام از مقادیر فیلدها به صورت تابع استفاده کنه (به طور مثال می خوام از توابع زمان استفاده کنم -datetime - و بگم که اگه اگه تاریخ حاصله از یه مقداری بیشتر بود select کن اون ردیف ها رو.) در حالت شرط های ساده در کوری مشکلی ندارم).ممنون از وقتی که میذارین.

csharpcollegian
دوشنبه 23 فروردین 1395, 08:49 صبح
سلام
ببین دوست عزیز سوالت خیلی کلی هستش و حالت های زیادی رو میتونه شامل بشه...
شما می تونی با استفاده از سازنده های کلاس DateTime تاریخ رو به صورت دستی بسازی :

DateTime date = new DateTime(2008, 3, 1, 7, 0, 0);
یا می تونی تاریخ رو به صورت رشته داشته باشی و با کمک توابع DateTime تبدیلش کنی به یک فرمت معتبر تاریخ :

DateTime date = DateTime.Parse("5/1/2008" + " 08:30:52");
یا حتی می تونی از کلاس PersianCalendar استفاده کنی و زمان رو به فرمت شمسی بسازی :

PersianCalendar pcObj = new PersianCalendar();
string date = pcObj.GetYear(DateTime.Now) + "/" + pcObj.GetMonth(DateTime.Now) + "/" + pcObj.GetDayOfMonth(DateTime.Now);
date += pcObj.GetHour(DateTime.Now) + ":" + pcObj.GetMinute(DateTime.Now);
و در نهایت با استفاده از یک کوئری نتیجه دلخواهت رو بگیری. به عنوان یک مثال خیلی ساده می تونی از کوئری زیر در CommandText استفاده کنی :

string sql = "Select * From TableName Where DateColumn Between '{0}' And '{1}'";
sql = string.Format(sql, DateTime.Now.ToShortDateString() + " 00:00:00", DateTime.Now.ToShortDateString() + " 23:59:00");
این کوئری نتیجه دلخواهت رو در بازه زمانی 24 ساعته روز برمی گردونه. البته این ساده ترین نوعشه که اگه میخوای سطحش رو ببری بالاتر باید با رویه ها، پارامترها و... آشنا باشی.
موفق باشی

mehdihalla
سه شنبه 24 فروردین 1395, 03:25 صبح
و در نهایت با استفاده از یک کوئری نتیجه دلخواهت رو بگیری. به عنوان یک مثال خیلی ساده می تونی از کوئری زیر در CommandText استفاده کنی :

string sql = "Select * From TableName Where DateColumn Between '{0}' And '{1}'";
sql = string.Format(sql, DateTime.Now.ToShortDateString() + " 00:00:00", DateTime.Now.ToShortDateString() + " 23:59:00");
این کوئری نتیجه دلخواهت رو در بازه زمانی 24 ساعته روز برمی گردونه. البته این ساده ترین نوعشه که اگه میخوای سطحش رو ببری بالاتر باید با رویه ها، پارامترها و... آشنا باشی.
موفق باشی

سلام خیلی ممنون از وقتی که گذاشتین.این مواردی رو که فرمودین رو آشنا هستم باهاشون و مشکلی ندارم در این مورد..
مساله اینه که من اصلا فیلد تاریخ در دیتابیسم ندارم.فقط سال و ماه وروز رو به صورت مجزا دارم. و چون می خوام دیتای یک بازه زمانی
رو select کنم ، میخوام ببینم میشه داخل کوری ام از توابع زمان استفاده کنم یعنی داخل کوری زمان را با استفاده از سه فیلد موجودم بسازم؟ (البته بنده به صورت تکست نوشتم اما قبول نکرد!! به نظرتون باید با پارامتر بنویسم؟).و اینکه کلا داخل کوری میشه تابع استفاده کرد؟خیلی ممنون

csharpcollegian
سه شنبه 24 فروردین 1395, 06:48 صبح
سلام
اگر نظر من رو می خواید یه فیلد تاریخ به جدولتون اضافه کنید، یه برنامه ساده بنویسید و به کمک یک حلقه سال و ماه و روز رو واکشی کنید و تبدیلشون کنید به فرمت معتبر تاریخ و در فیلد تاریخ ثبتشون کنید.
اینجوری از اینجا به بعد هم کارتون راحت میشه ولی اگر تصمیم ندارید ساختار جدول رو تغییر بدید می تونید از DATEFROMPART استفاده کنید. این Function سال و ماه و روز رو به صورت جداگانه میگیره و
DateTime برمی گردونه. اینم یک مثال :

Select * From TableName Where (Select DATEFROMPARTS(TableName.[Year], TableName.[Month], TableName.[Day])) Between Date1 And Date2
موفق باشید

mehdihalla
سه شنبه 24 فروردین 1395, 07:53 صبح
خیلی خیلی لطف فرمودین استاد.