「日付」列の日付が今日の日付である行からすべてのフィールドを取得したいと思います。
私のコードは
Dim today As Date = DateTime.Now
vandaag = Format(today, "dd/MM/yyyy")
"select * from tblPatients where PatientDate =" & today & ""
誰か助けてくれませんか?学校用です...
データベースエンジンに渡すSQLコマンドを作成するために文字列連結を使用しないでください。
パラメータを使用すると、テキストの解析(日付、特殊文字を含む文字列など)の問題を回避できますが、最も重要なのは、SQLインジェクション攻撃を回避することです。
これは、データベースを扱うすべての開発者ができるだけ早く習得する必要がある習慣です。
したがって、OleDbConnectionがすでにビルドされて開かれているとすると、次のように記述できます。
Dim strSql As String = "select * from tblPatients where PatientDate = ?dt"
Using dadapter = New OleDbDataAdapter()
dadapter.SelectCommand = New OleDbCommand(strSql, con)
dadapter.SelectCommand.Parameters.AddWithValue("?dt", DateTime.Today)
Dim dset As DataSet = New DataSet()
dadapter.Fill(dset, "Books")
End Using
Usingステートメントにも注意してください。これは従うべきもう1つの良い習慣です。
Using
OleDbConnectionやOleDbDataAdapterなどのオブジェクトをメモリから破棄し、オブジェクトによって使用されているすべてのシステムリソースを解放します。
実際には、クエリにパラメータはまったく必要ありません
SELECT * FROM tblPatients WHERE PatientDate = DATE()
。PatientDateが日時の組み合わせである場合は、次を使用できます。Date
SELECT * FROM tblPatients WHERE PatientDate BETWEEN DATE() AND DATEADD('d', 1, DATE())
()-関数の時間部分は0:00になるため、次のようになります。当日の正しい結果。
DATEADD
およびDATEDIFF
関数を使用して、日付から時刻を削除します。
Dim dayPart As String = Chr(34) & "d" & Chr(34) 'Chr(34) = ", resulting string is "d" (enclosed in quotes)
Dim query As String = "SELECT * FROM tblPatients"
'Declared as separate variables for better readability
Dim patientDate As String = "DATEADD(" & dayPart & ", DATEDIFF(" & dayPart & ", 0, PatientDate), 0)"
Dim todaysDate As String = "DATEADD(" & dayPart & ", DATEDIFF(" & dayPart & ", 0, Now());"
'patientDate = 'DATEADD("d", DATEDIFF("d", 0, PatientDate), 0)' which is the patientDate, stripped of a timevalue
'todaysDate = 'DATEADD("d", DATEDIFF("d", 0, Now()), 0)' which is today's date, stripped of a timevalue
'This works because:
'DATEDIFF("d", 0, PatientDate) returns the number of days that have passed since the "zero" date and strips the time component
'DATEADD("d", DATEDIFF("d", 0, PatientDate), 0) adds the DATEDIFF calculation to the "zero" date returning a date
'equal to PatientDate with no time component.
'This same principle is applied to the 'Now()' function to get today's date with no time component.
'
'Now that patientDate can equal today's date (because the time components have been stripped away), we can affix the where clause
query &= " WHERE " & patientDate & " = " & todaysDate
'and run the query
Dim strSql As String = "select * from tblPatients where PatientDate =#" & today & "#"
Dim dadapter As OleDbDataAdapter
dadapter = New OleDbDataAdapter()
dadapter.SelectCommand = New OleDbCommand(strSql, con)
Dim dset As DataSet = New DataSet()
dadapter.Fill(dset, "Books")
これを試して
"select * from tblPatients where PatientDate =" & Now() & ""
また
"select * from tblPatients where PatientDate =" & Now().Date() & ""