PDA

View Full Version : فرستادن پارامتر



mahdishojaee
شنبه 26 خرداد 1386, 10:34 صبح
چطوری میتونم به یک دستور SQL که پارامتری از نوع DateTime میگیره مقادیر متعددی بفرستم؟

iranrose63
شنبه 26 خرداد 1386, 11:22 صبح
...
com.CommandText="select * from tabel where date=@param";
com.Parameters.Clear();
com.Parameters.Add("@param", SqlDbType.DateTime).Value = DateTime.Now;
...

mahdishojaee
شنبه 26 خرداد 1386, 11:41 صبح
دوست عزیز این کدی که شما نوشتین فقط یک تاریخ به پارامتر ارسال می کند من می خوام که تعداد تاریخ هایی که می فرستم نا محدود باشه مثلا 10 تا تاریخ یا بیشتر و کمتر.

sinpin
شنبه 26 خرداد 1386, 12:02 عصر
چطوری میتونم به یک دستور SQL که پارامتری از نوع DateTime میگیره مقادیر متعددی بفرستم؟

شاید بهتر باشه همه تاریخ ها رو بهم بچسبونید و تحت یک استرینگ به دیتابیس پاس کنید و از اونور با یه تابع داخلی اون رو اسپیلیت کنید.

mahdishojaee
شنبه 26 خرداد 1386, 12:11 عصر
منظورتون اینه که از Stored Procedure استفاده کنم؟
اگه اینطوره لطفا کدش رو بنویسید چون من بلد نیستم ....
در غیر اینصورت هم کد مورد نظرتون رو بنویسید.

allameh
شنبه 26 خرداد 1386, 13:45 عصر
public System.Data.DataTable Getdailyleave(string names, string strFromDate, string strToDate)
{
System.Globalization.PersianCalendar pc = new System.Globalization.PersianCalendar();
string strReportDate = pc.GetYear(DateTime.Now).ToString() + pc.GetMonth(DateTime.Now).ToString().PadLeft(2, '0') + pc.GetDayOfMonth(DateTime.Now).ToString().PadLeft( 2, '0');
DataTable DT = new DataTable();
DT.Columns.Add(new DataColumn(hourleaveentity.FirstNameField, typeof(string)));
DT.Columns.Add(new DataColumn(hourleaveentity.LastNameField, typeof(string)));
DT.Columns.Add(new DataColumn(hourleaveentity.DateField, typeof(string)));
DT.Columns.Add(new DataColumn(hourleaveentity.DescriptionField, typeof(string)));
DT.Columns.Add(new DataColumn(hourleaveentity.ToDateField, typeof(string)));
DT.Columns.Add(new DataColumn(hourleaveentity.FromDateField, typeof(string)));
DT.Columns.Add(new DataColumn(hourleaveentity.ToTimeField, typeof(string)));
DT.Columns.Add(new DataColumn(hourleaveentity.FromTimeField, typeof(string)));
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "hourleave";
cmd.Connection = (System.Data.SqlClient.SqlConnection)ConnectionFac tory.CreateConnection();
cmd.Connection.Open();
SqlParameter[] paramsToStore = new SqlParameter[3];
paramsToStore[1] = new SqlParameter("@fromdate", SqlDbType.VarChar);
paramsToStore[1].Value = strFromDate;
paramsToStore[1].Size = 8;
paramsToStore[2] = new SqlParameter("@todate", SqlDbType.VarChar);
paramsToStore[2].Value = strToDate;
paramsToStore[2].Size = 8;
paramsToStore[0] = new SqlParameter("@names", SqlDbType.NVarChar);
paramsToStore[0].Value = names;
paramsToStore[0].Size = 50;
cmd.Parameters.AddRange(paramsToStore);
SqlDataReader dr = cmd.ExecuteReader();
DataRow dtr;
while (dr.Read())
{
dtr = DT.NewRow();
dtr[hourleaveentity.FirstNameField] = dr[hourleaveentity.FirstNameField];
dtr[hourleaveentity.LastNameField] = dr[hourleaveentity.LastNameField];
dtr[hourleaveentity.DateField] = dr[hourleaveentity.DateField];
dtr[hourleaveentity.DescriptionField] = dr[hourleaveentity.DescriptionField];
dtr[hourleaveentity.FromTimeField] = dr[hourleaveentity.FromTimeField];
dtr[hourleaveentity.ToTimeField] = dr[hourleaveentity.ToTimeField];
dtr[hourleaveentity.FromDateField] = strFromDate;
dtr[hourleaveentity.ToDateField] = strToDate;
DT.Rows.Add(dtr);
}
return DT;
}
DataService.hourleave hour = new DataService.hourleave();
frmReport frmDaily = new frmReport();
Reports.hourleave rpthour = new TAPInternalSystemGUI.Reports.hourleave();
try
{
DataTable dt = hour.Getdailyleave(uiComboBox2.SelectedItem.Text.T oString(), ucDate9.CurrentDate.Replace("/", ""), ucDate10.CurrentDate.Replace("/", ""));
if (dt.Rows.Count > 0)
{
rpthour.SetDataSource(dt);
frmDaily.rptViewer.ReportSource = rpthour;
frmDaily.MdiParent = this.NonDialogForm;//(Form)((MdiClient)this.NonDialogForm.Parent).Paren t;
frmDaily.Text = "گزارش مرخصی ساعتی";
frmDaily.Show();
}
else
MessageBox.Show("هیچ گزارشی در بازه مورد نظر یافت نشد", "اخطار", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

}
catch
{
MessageBox.Show(" لطفا فیلد نام را انتخاب کنید", "پیام", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
}
private void showdailyleave()
{
DataService.dailyleave daily = new DataService.dailyleave();
frmReport frmDaily = new frmReport();
Reports.rptdailyleave rptdaily = new TAPInternalSystemGUI.Reports.rptdailyleave();

try
{
DataTable dt = daily.Getdailyleave(uiComboBox1.SelectedItem.Text. ToString(), ucDate5.CurrentDate.Replace("/", ""), ucDate6.CurrentDate.Replace("/", ""));
if (dt.Rows.Count > 0)
{
rptdaily.SetDataSource(dt);
frmDaily.rptViewer.ReportSource = rptdaily;
frmDaily.MdiParent = this.NonDialogForm;//(Form)((MdiClient)this.NonDialogForm.Parent).Paren t;
frmDaily.Text = "گزارش مرخصی روزانه";
frmDaily.Show();
}
else
MessageBox.Show("هیچ گزارشی در بازه مورد نظر یافت نشد", "اخطار", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

}
catch {
MessageBox.Show(" لطفا فیلد نام را انتخاب کنید", "پیام", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

}

البته من از برنامه نویسی لایه استفاده کردم ولی کلاس getleavedaily ra negah kon.

ghabil
شنبه 26 خرداد 1386, 16:23 عصر
چطوری میتونم به یک دستور SQL که پارامتری از نوع DateTime میگیره مقادیر متعددی بفرستم؟

مقادیر متعددی بفرسیتی یعنی چی ؟ ببین دستور SQL تو قرار هست که مثلا یک فیلد رو با این پارامتر آپدیت بکنه یا مثلا اطلاعاتش رو Insert بکنه دیگه ، اونوقت چه جوری میشه توی یک فیلد بیش از یک مقدار بریزی ؟ فیلدی که از نوع تاریخ ایجاد شده و داری با پارامتر DateTime مقدارش رو پر میکنی نمیتونه بیش از یک مقدار بگیره!

شاید من بد متوجه شدم منظورت چیه !

mahdishojaee
یک شنبه 27 خرداد 1386, 19:14 عصر
منظورم اینه که من توی دستور select می خوام که پارامتر تاریخی که توی شرط گذاشتم چند مقدار بگیره که بین این تاریخ ها OR قرار دارد.

Alireza_Salehi
یک شنبه 27 خرداد 1386, 21:42 عصر
منظورم اینه که من توی دستور select می خوام که پارامتر تاریخی که توی شرط گذاشتم چند مقدار بگیره که بین این تاریخ ها OR قرار دارد.

خوب چند تا پارامتر تعریف کنید!


SELECT * FROM Table1 WHERE mDate<@x OR mDate>@y

mahdishojaee
دوشنبه 28 خرداد 1386, 01:45 صبح
منظور من اینه :
"select * from table where myDate=@date"
حالا این تاریخ مثلا می خواد این مقادیر رو بگیره :
6/6/2007 , 20/6/2007 , 3/11/2006 , . .. . . . .

Alireza_Salehi
دوشنبه 28 خرداد 1386, 09:55 صبح
منظور من اینه :
"select * from table where myDate=@date"
حالا این تاریخ مثلا می خواد این مقادیر رو بگیره :
6/6/2007 , 20/6/2007 , 3/11/2006 , . .. . . . .

در یک پارامتر فقط یک مقدار قرار می گیرد و نه بیشتر!

به نظر میرسه شما می خواهید مجموعه ای از اطلاعات را بدست بیارید که تاریخشون با یکی از اینها برابر باشه، در این صورت باید از کلمه کلیدی IN در SQL استفاده کنید.مثلا با یک همچین کدی که تاریخ ها رو با کاما از هم جدا میکنند:

SELECT * FROM [table1] WHERE [myDate] IN ('7/10/1996','8/9/1996')

یا این که نتیجه یک SELECT دیگه رو که ستونی از نوع DateTime برمیگردونه در داخل پرانتز قرار بدید.


SELECT * FROM [table1] WHERE [mydate] IN
(SELECT [mdate] FROM [table2] WHERE mdate>'5/2/2006')


با توجه به این که پارامترهای Command مقداری ازنوع Table قبول نمی کنند در صورتی که تاریخ های مورد نظر با دستورات SQL قابل بازیابی نیست باید به تعداد تاریخ ها پارامتر اضافه کنید و دونه دونه مقدار بدید!


SELECT * FROM [table1] WHERE [mydate] IN (@d1,@d2,@d3,@d4)

TeacherMath
یک شنبه 28 فروردین 1390, 16:18 عصر
خوب می تونید یک جدول دیگه درست کنید که این تاریخ ها رو بگیره.که فقط از سه ستون ID ,کلید اصلی جدول فعلی و تاریخ ایجاد شده باشد.