PDA

View Full Version : جستجو بین دو تاریخ بر حسب میلادی



arshia_1979
پنج شنبه 16 خرداد 1387, 17:12 عصر
با سلام
یه سری مطلب در سایت جستجو کردم همه مشکلشون تبدیل به شمسی و میلادی بود ولی هیچ کدوم جستجو رو به طور کامل توضیح ندادن
من می خواهم دو تا textbox در فرم داشته باشم و بعد از وارد کردن دو تاریخ متفاوت نتیجه جستجو بر حسب میلادی را در دیتا گرید نمایش دهد(منظور همان تاریخ های بین دو textboxمی باشد با اطلاعاتشون) با تشکر

linux
پنج شنبه 16 خرداد 1387, 18:24 عصر
با سلام
یه سری مطلب در سایت جستجو کردم همه مشکلشون تبدیل به شمسی و میلادی بود ولی هیچ کدوم جستجو رو به طور کامل توضیح ندادن
من می خواهم دو تا textbox در فرم داشته باشم و بعد از وارد کردن دو تاریخ متفاوت نتیجه جستجو بر حسب میلادی را در دیتا گرید نمایش دهد(منظور همان تاریخ های بین دو textboxمی باشد با اطلاعاتشون) با تشکر
شما باید با استفاده از sqlcommand این دستور را اجرا کنی.


Using cnn As New SqlClient.SqlConnection("Data Source=server;Initial Catalog=Northwind;Integrated Security=True")
cnn.Open()
Dim cmd As New SqlClient.SqlCommand
cmd.Connection = cnn
Dim p1 As New SqlClient.SqlParameter("@startDate", SqlDbType.DateTime)
Dim p2 As New SqlClient.SqlParameter("@EndDate", SqlDbType.DateTime)
cmd.CommandText = "Select * from employees where HireDate between @startdate AND @EndDate"
p1.Value = CDate(TextBox2.Text)
p2.Value = CDate(TextBox3.Text)
cmd.Parameters.Add(p1)
cmd.Parameters.Add(p2)
Dim da As New SqlClient.SqlDataAdapter(cmd)
Dim dt As New DataTable
da.Fill(dt)
DataGridView1.DataSource = dt
cnn.Close()
End Using

arshia_1979
جمعه 17 خرداد 1387, 00:03 صبح
دوست عزیز من در قسمت دیتا sqlcommand را روی فرم قرار داده و دو تا text box و در یک دیتا گرید بعد کد شما رو در داخل button قرار دادم بعد از سطر ها اول و دوم ارور می دهد از این قسمتها

Using cnn As
و cnn های خط پایینی را ارور و ریز ان خط آبی . مشگل چیه

linux
جمعه 17 خرداد 1387, 11:51 صبح
دوست عزیز من در قسمت دیتا sqlcommand را روی فرم قرار داده و دو تا text box و در یک دیتا گرید بعد کد شما رو در داخل button قرار دادم بعد از سطر ها اول و دوم ارور می دهد از این قسمتها

Using cnn As
و cnn های خط پایینی را ارور و ریز ان خط آبی . مشگل چیه
1- احتیاج به قرار داد هیچ sqlcommand روی فرم نیست، sqlcommand اینجا ساخته شده است.
2- شما باید کانکشن استرینگ خودتان را بسازید این فقط یک مثال بود تا شما با نحوه کار آشنا بشوید.

arshia_1979
جمعه 17 خرداد 1387, 14:24 عصر
دوست عزیز:
همان طوری که گفتید این اموزش رو که به صورت کد می باشد به صورت دستی انجام دادم
SqlDataAdapter1

SqlConnection1
DataSet11
SqlCommand1
را ایجاد کرده SqlDataAdapter را sqlcommand وصل کرده بعد از ایجاد پرامتر دو قسمت ایراد دارد

1-

در قسمت properties بعد از ایجاد دو parameters طبق اموزش شما بعد command.tex که کوری باز می شود کد

employees where HireDate between @startdate AND @EndDateرا وارد و بعد از ok پرامتر را گم می کند که با زدن ok پرامتر را تغییر می دهد




2-



از این قسمت ارور می گیردMe.SqlDataAdapter1.Fill(Me.DataSet11.Table 1) کد شما رو هم زدم
Dim dt As New DataTable
(me.SqlDataAdapter(dt
DataGridView1.DataSource = dt

که در دو صورت ازfill شدن SqlDataAdapte ارورر میگیرد

linux
جمعه 17 خرداد 1387, 15:21 عصر
دوست عزیز:

همان طوری که گفتید این اموزش رو که به صورت کد می باشد به صورت دستی انجام دادم
SqlDataAdapter1

SqlConnection1
DataSet11
SqlCommand1
را ایجاد کرده SqlDataAdapter را sqlcommand وصل کرده بعد از ایجاد پرامتر دو قسمت ایراد دارد

1-

در قسمت properties بعد از ایجاد دو parameters طبق اموزش شما بعد command.tex که کوری باز می شود کد


employees where HireDate between @startdate AND @EndDateرا وارد و بعد از ok پرامتر را گم می کند که با زدن ok پرامتر را تغییر می دهد




2-



از این قسمت ارور می گیردMe.SqlDataAdapter1.Fill(Me.DataSet11.Table 1) کد شما رو هم زدم
Dim dt As New DataTable
(me.SqlDataAdapter(dt
DataGridView1.DataSource = dt
که در دو صورت ازfill شدن SqlDataAdapte ارورر میگیرد

شما هیچ احتیاجی به این کارها ندارید ، فقط کانکشن استرینگ مناسب را در قسمت تعریف cnn بگذارید.

arshia_1979
جمعه 17 خرداد 1387, 16:46 عصر
اقا من می دونم ساده هستش ولی اگه میشه دقیقا بگو من چه کار کنم کانکشن استریگ من نام سرور و دیتابیس من amir.amir.dbo هستش و من استرینگ ان را که

workstation id=AMIR;packet size=4096;integrated security=SSPI;initial ""catalog=amir;persist security info=False

رادر خط اول در داخل پرانتز قرار می دهم مشگل این است که اصلا از
Using cnn As

اروور می گیرد و براش تعریف نشده هستش و زیر این قسمت خط ابی کشیده شده اگه میشه گام به گام تو ضیح دهید یا مثال بگذارید تا من دانلودش کنم با تشکر از شما

linux
جمعه 17 خرداد 1387, 19:41 عصر
اقا من می دونم ساده هستش ولی اگه میشه دقیقا بگو من چه کار کنم کانکشن استریگ من نام سرور و دیتابیس من amir.amir.dbo هستش و من استرینگ ان را که

workstation id=AMIR;packet size=4096;integrated security=SSPI;initial ""catalog=amir;persist security info=False

رادر خط اول در داخل پرانتز قرار می دهم مشگل این است که اصلا از
Using cnn As


اروور می گیرد و براش تعریف نشده هستش و زیر این قسمت خط ابی کشیده شده اگه میشه گام به گام تو ضیح دهید یا مثال بگذارید تا من دانلودش کنم با تشکر از شما

میشه بگید از کدام نسخه استفاده می کنید؟
vb.net 2003 یا 2005 یا 2008؟

arshia_1979
جمعه 17 خرداد 1387, 23:22 عصر
من چون برنامه نویسی vs را قبلا کار کردم و بعد از مدتها دوباره شروع کردم با vb.net 2003کار می کنم چون باهاش راحت ترم

arshia_1979
شنبه 18 خرداد 1387, 19:19 عصر
از دوستان کسی هست جواب سوال من رو بده بد جوری توش موندم از آقای مداح و سایر دوستان خواهش می کنم کمک کنن

linux
شنبه 18 خرداد 1387, 22:08 عصر
از دوستان کسی هست جواب سوال من رو بده بد جوری توش موندم از آقای مداح و سایر دوستان خواهش می کنم کمک کنن
دقیقا یادم نیست ولی using توی 2003 مثل اینکه نبود شما using و end using را حذف کن.

New SqlClient.SqlConnection("Data Source=server;Initial Catalog=Northwind;Integrated Security=True")
cnn.Open()
Dim cmd As New SqlClient.SqlCommand
cmd.Connection = cnn
Dim p1 As New SqlClient.SqlParameter("@startDate", SqlDbType.DateTime)
Dim p2 As New SqlClient.SqlParameter("@EndDate", SqlDbType.DateTime)
cmd.CommandText = "Select * from employees where HireDate between @startdate AND @EndDate"
p1.Value = CDate(TextBox2.Text)
p2.Value = CDate(TextBox3.Text)
cmd.Parameters.Add(p1)
cmd.Parameters.Add(p2)
Dim da As New SqlClient.SqlDataAdapter(cmd)
Dim dt As New DataTable
da.Fill(dt)
DataGridView1.DataSource = dt
cnn.Close()

arshia_1979
شنبه 18 خرداد 1387, 23:38 عصر
امتحان کردم توی vb.net 2003 این جواب نمیده حالا از قسمت new در سطر اول و cnn ارور می ده در ضمن دوست عزیز من در 2005 امتحان کردم وقتی برنامه برای کامپایل می ره اون وقت از da.fill که همان پر کردن sqldataAdabter هستش اروور می گیره
خواهشن یک نفر این مشگل vb.net 2003 راهنمایی بکنه

linux
شنبه 18 خرداد 1387, 23:47 عصر
امتحان کردم توی vb.net 2003 این جواب نمیده حالا از قسمت new در سطر اول و cnn ارور می ده در ضمن دوست عزیز من در 2005 امتحان کردم وقتی برنامه برای کامپایل می ره اون وقت از da.fill که همان پر کردن sqldataAdabter هستش اروور می گیره
خواهشن یک نفر این مشگل vb.net 2003 راهنمایی بکنه
قبل new این را اضافه کن متغیر cnn را تعریف کن.من فراموش کردم

Amateur_G
یک شنبه 19 خرداد 1387, 01:07 صبح
سلام.
من مشكلات و پاسخ اساتيد عزيز و ديدم.
من خودم با اين مشكل مواجه شدم و از كد زير استفاده كردم شايد كمكي بكنه:




objDataAdapter.SelectCommand = New OleDbCommand
objDataAdapter.SelectCommand.Connection = objconnection
objDataAdapter.SelectCommand.CommandText = "select * from TableName where date between '" & MinDate & "' and '" & MaxDate & "'"

objDataAdapter.SelectCommand.CommandType = CommandType.Text
objconnection.open()

objDataSetKhodro = New DataSet
objDataAdapter.Fill(objDataSetKhodro, TableName)
objDataViewKhodro = New DataView(objDataSetKhodro.Tables(TableName))
objCurrencyManagerKhodro = CType(Me.BindingContext(objDataViewKhodro), CurrencyManager)
objconnection.close()



توضيح اينكه من maxdate و mindate را به صورت text در اوردم و تو دستور select با مقدار date تو database مقايسه كردم.
اگه سوالي بود در حد سوادم در خدمتيم.:تشویق:

linux
یک شنبه 19 خرداد 1387, 06:43 صبح
سلام.
من مشكلات و پاسخ اساتيد عزيز و ديدم.
من خودم با اين مشكل مواجه شدم و از كد زير استفاده كردم شايد كمكي بكنه:



objDataAdapter.SelectCommand =

New OleDbCommand

objDataAdapter.SelectCommand.Connection = objconnection
objDataAdapter.SelectCommand.CommandText = "select * from TableName where date between '" & MinDate & "' and '" & MaxDate & "'"
objDataAdapter.SelectCommand.CommandType = CommandType.Text
objconnection.open()
objDataSetKhodro =


New DataSet

objDataAdapter.Fill(objDataSetKhodro, TableName)
objDataViewKhodro = New DataView(objDataSetKhodro.Tables(TableName))
objCurrencyManagerKhodro = CType(Me.BindingContext(objDataViewKhodro), CurrencyManager)
objconnection.close()


توضيح اينكه من maxdate و mindate را به صورت text در اوردم و تو دستور select با مقدار date تو database مقايسه كردم.

اگه سوالي بود در حد سوادم در خدمتيم.:تشویق:


با این کار شما راه را برای sql injection بازکردید.

arshia_1979
یک شنبه 19 خرداد 1387, 23:51 عصر
سلام دوست عزیز
من کد شما رو امتحان کردم البته vb.net 2003 اول اینکه
CommandText = "select * from TableName where date between '" & MinDate & "' and '" & MaxDate & "'"
از mindate , maxdate رو نمی شناسه
دوم
objCurrencyManagerKhodro این چی هستش ارور می ده و این رو هم نمیشناسه اگه یه ابجکت هستش کجاست دوست عزیز شما میشه پرامتر هاشو هم تعریف کنید و به طور کامل بزاریتش اگه مقدرو هستش خود برنامه رو بزارید تا دانلود کنم با تشکر

linux
دوشنبه 20 خرداد 1387, 07:55 صبح
سلام دوست عزیز
من کد شما رو امتحان کردم البته vb.net 2003 اول اینکه
CommandText = "select * from TableName where date between '" & MinDate & "' and '" & MaxDate & "'"
از mindate , maxdate رو نمی شناسه
دوم
objCurrencyManagerKhodro این چی هستش ارور می ده و این رو هم نمیشناسه اگه یه ابجکت هستش کجاست دوست عزیز شما میشه پرامتر هاشو هم تعریف کنید و به طور کامل بزاریتش اگه مقدرو هستش خود برنامه رو بزارید تا دانلود کنم با تشکر

اگر شما یک کتاب مطالعه کنید خیلی بهتر وسریعتر به جواب می رسید، منظور دوستمان در اینجا از mindate و maxdate مقدار تاریخ شروع و پایان بوده که شما باید یک مقدار قرار می دادید.

Reza Safa
دوشنبه 20 خرداد 1387, 10:50 صبح
باید از دستور between استفاده کنی
بهترین راه همین است

parsavb
دوشنبه 20 خرداد 1387, 13:04 عصر
همون کد اولی راحت تر بود فقط برای تنظیم cnn بایستی محل متغیر ها رو درست قرار بدی



Dim cnn As New SqlConnection(" data source = your cumputer\servername;"& _
" Initial Catalog = yuor data name;"& _
" user id = " & txtUsername.Text & _
";password = " & txtPassword.Text)

data source = نام کامپیوتر(در صورت داشتن بیش از یک نسخه اس کیوال)/ نام سرور
Initial Catalog= نام بانک اطلاعاتی
user id = نام یوزر بانک
password = پسورد ورود به بانک

Amateur_G
دوشنبه 20 خرداد 1387, 21:28 عصر
سلام.
در مورد CurrencyManager بايد بگم كه اين آبجكت مي تونه كار يه index رو برات روي dataview انجام بده.
طريقه تعريف كردنش اينطوريه:




Dim objCurrencyManager As CurrencyManager



با اون دستوراتي كه قبلا نوشتم ميشه به dataview وصلش كرد.
mindate و maxdate هم 2 تا string هستن كه من مقدار مينيمم و ماكسيمم تاريخ رو به صورت رشته توشون دارم.
موفق و پيروز باشيد.:تشویق:

arshia_1979
دوشنبه 20 خرداد 1387, 22:54 عصر
من فهمیدم مگل چیه من با یک سرچی که از date انجام دادم جستجو درسته مشگل دستوری هستش که توی کوری sql نوشته میشه و پرامتر رو گم می کنه حالا میشه این دستور رو طوری دیگه نوشت مثلا به صورت حلقه و یا نوع دیگری از between
sql2000 دیتا بیس من هستش :متفکر:

Amateur_G
سه شنبه 21 خرداد 1387, 11:30 صبح
سلام.
currencymanager به مانند يك index بر روي dataview عمل ميكنه براي تعريفش بنويس:


Dim objCurrencyManager As CurrencyManager

mindate و maxdate هم دو تا متغيير رشتهاي(string) هستند كه من مينيمم و ماكسيمم تاريخ رو تو آنها ذخيره كردم.

arshia_1979
شنبه 25 خرداد 1387, 18:52 عصر
با سلام مجدد به اساتید
من آخر موفق نشدم می خواستم بدونم میشه دستوری که به کوری sql می دهیم به غیر between باشد یا دستوری باشد که نوع دیگری از between که در این پست گفته شده نوشت چون همان طور که گفتم اشکال از این دستور می باشد و پرامتر تعریف شده را گم می کند

linux
شنبه 25 خرداد 1387, 22:36 عصر
با سلام مجدد به اساتید
من آخر موفق نشدم می خواستم بدونم میشه دستوری که به کوری sql می دهیم به غیر between باشد یا دستوری باشد که نوع دیگری از between که در این پست گفته شده نوشت چون همان طور که گفتم اشکال از این دستور می باشد و پرامتر تعریف شده را گم می کند
همین سوال را دوستان در بخش C# پرسیدند که یک مثال نوشتم شما هم نگاه کن شاید به درد شما هم خورد
http://barnamenevis.org/forum/showthread.php?t=109801&page=2