0

を使用しdatagridviewて生徒の記録を表示しています。

ホステラーの生年月日でフィルタリングされたレコードを表示したい。

datetimepickerカスタム形式を使用してから 11/09 を選択してデータを検索するdd/mmと、何も表示されません。

年を無視して dd/mm のみを一致させてすべてのレコードを表示するにはどうすればよいですか?

これが私のコードです:

Try
    con = New OleDbConnection(cs)
    con.Open()

    cmd = New OleDbCommand("SELECT HostelerID as [Hosteler ID],HostelerName as [Hosteler Name],DOB,HostelName as [Hostel Name],RoomNo as [Room No],DateOfJoining as [Date Of Joining],Purpose,FatherName as [Father's Name],MobNo1 as [Mobile No],Phone1 as [Phone No],MotherName as [Mother's Name],MobNo2 as [Mobile No 2],City,Address,Email,ContactNo as [Contact No],InstOfcDetails as [Ins/Ofc Details],Phone2 as [Phone No 2],Agreement,GuardianName as  [Guardian Name],GuardianAddress as [Guardian Address],MobNo3 as [Guardian Mobile No],Phone3 as [Guardian Phone No],FixedDeposit as [Fixed Deposit],CompletionDate as [Completion Date],Photo,DocsPic as [Docs Pic] from Hostelers where DOB like #" & DateTimePicker1.Text & "# order by HostelerName", con)

    Dim myDA As OleDbDataAdapter = New OleDbDataAdapter(cmd)
    Dim myDataSet As DataSet = New DataSet()

    myDA.Fill(myDataSet, "Hostelers")

    DataGridView6.DataSource = myDataSet.Tables("Hostelers").DefaultView

    con.Close()
Catch ex As Exception
    MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
4

3 に答える 3

2

「カスタム形式 dd/mm を使用して datetimepicker から 11/09 を選択してデータを検索します」

Access クエリでは、db エンジンに値を適用Format()してからDOB比較を行うように依頼できます。これは、静的な値「11/09」に対してそれを行います...

WHERE Format(DOB, 'dd/mm') = '11/09'

柔軟にするために、パラメーター クエリを使用しDateTimePicker1.Textて、パラメーター値として指定できます。

WHERE Format(DOB, 'dd/mm') = your_string
于 2013-10-02T22:36:47.627 に答える
2

「where」句を次のように変更してみてください。

" WHERE MONTH(DOB) = " & DateTimePicker1.Value.Month &
      " AND DAY(DOB) = " & DateTimePicker1.Value.Day 

ただし、パラメーター化された SQL コマンドを使用することも強くお勧めします http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbcommand.parameters.aspx

これにより、SQL インジェクション ( http://technet.microsoft.com/en-us/library/ms161953(v=SQL.105).aspx ) やその他のエラーを防ぐことができます。

于 2013-10-02T22:28:59.350 に答える
1

クエリを次のように変更します。

cmd = New OleDbCommand("
SELECT HostelerID as [Hosteler ID], HostelerName as [Hosteler Name], 
    DOB, HostelName as [Hostel Name],
    RoomNo as [Room No], DateOfJoining as [Date Of Joining], 
    Purpose, FatherName as [Father's Name],
    MobNo1 as [Mobile No], Phone1 as [Phone No], 
    MotherName as [Mother's Name], MobNo2 as [Mobile No 2],
    City, Address, Email, ContactNo as [Contact No], 
    InstOfcDetails as [Ins/Ofc Details], Phone2 as [Phone No 2],
    Agreement, GuardianName as  [Guardian Name],
    GuardianAddress as [Guardian Address], MobNo3 as [Guardian Mobile No],
    Phone3 as [Guardian Phone No], FixedDeposit as [Fixed Deposit],
    CompletionDate as [Completion Date], Photo, DocsPic as [Docs Pic] 
FROM Hostelers 
WHERE (DatePart(\"M\", DOB) = '" + DateTimePicker1.Value.Date.Month + '")
  AND (DatePart(\"D\", DOB) = '" + DateTimePicker1.Value.Date.Day + '"))
ORDER BY HostelerName
")
于 2013-10-02T22:29:15.367 に答える