Lesen von Daten aus sql-Datenbank mithilfe von datetime-picker
Wie Lesen von Daten aus der Datenbank mithilfe der datetimepicker Wert. Ich habe eine datetimepicker und ein datagridview, in meiner form. Ich möchte Daten aus Sql-Datenbank-Tabelle mit den ausgewählten datetimepicker Wert. Ich versuche mit diesem code
Private Sub BTNFIND_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTNFIND.Click
getConnect()
Dim editdate As String
DTPEDITAT.Value= Format(DTPEDITAT.Value, "dd/MM/yyyy")
editdate = DTPEDITAT.Value
MessageBox.Show(editdate)
Try
Conn.Open()
Dim strSQL As String = "SELECT EMP_ID,EMP_NAME,AT_STATUS,AT_REMARK FROM ATTENDANCE WHERE AT_DATE = '" & editdate & "' ORDER BY EMP_NAME ASC"
Dim da As SqlDataAdapter = New SqlDataAdapter(strSQL, Conn)
Dim ds As DataSet = New DataSet
da.Fill(ds, "ATTENDANCE")
Dim dt As DataTable = ds.Tables("ATTENDANCE")
Dim row As DataRow
Dim atstat As String
For Each row In dt.Rows
If row("AT_STATUS") = 1 Then
atstat = "Present"
ElseIf row("AT_STATUS") = 0 Then
atstat = "Absent"
ElseIf row("AT_STATUS") = 0.5 Then
atstat = "Halfday"
Else
atstat = "Error"
End If
For x As Integer = 0 To ATCEDITGRID.Rows.Count - 1
ATCEDITGRID.Rows(x).Cells(2).Value = row("EMP_ID")
ATCEDITGRID.Rows(x).Cells(3).Value = row("EMP_NAME")
ATCEDITGRID.Rows(x).Cells(0).Value = atstat
ATCEDITGRID.Rows(x).Cells(1).Value = row("AT_REMARK")
Next x
Next row
Catch ex As SqlException
MsgBox(ex.Message, MsgBoxStyle.Critical, "SQL Error")
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical, "General Error")
End Try
End Sub
Datagridview nicht anzeigen nichts und es gibt keine Fehler...
InformationsquelleAutor Thanzeem | 2013-02-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sehen wir diese Fragen hier jeden Tag. Sie stammt von dem gleichen problem.
VERWENDEN SIE NIEMALS DIE STRING-VERKETTUNG ZUM ERSTELLEN VON SQL-ABFRAGEN.
Es ist ein großes problem. Natürlich haben Sie trafen sich bereits die ersten Auswirkungen. Wie konvertieren von Zeichenfolgen in einer akzeptablen Weise, um die effektive Daten-Typ? Die Sie lösen müssen parsing-Probleme mit eingebetteten Anführungszeichen, korrekte Darstellung von Datums-und dezimal-zahlen, die für die zugrunde liegende Datenbank-system. Aber die zweite und weitere subtile Nebeneffekt des string-Verkettung ist SQL-Injection (Dies ist nur ein lehrreicher link, da SQL-Injection ein sehr großes Thema)
Zur Lösung dieser Art von Problemen die einzige akzeptierte Weg ist, um die PARAMETER zu verwenden.
Dies bedeutet, dass database engine (Datenbankmodul) löst auf effiziente Weise die Frage, müssen Sie eine Zeichenfolge mit dem parameter-Platzhalter (@irgendwas) und eine Sammlung von Parametern mit dem exakten Datentyp für den Wert des Parameters.
Also der code sollte auf diese Weise ändert
:D
Ich denke nicht so. Einfach ist es immer besser, aber fehlerfrei sollte ein muss sein. Und es ist eine echte Unsitte zu tun, in dieser Weise. Wenn der Fehler zuschlägt, die Sie nicht wollen, sich selbst zu finden mit den Hosen unten. Und glauben Sie mir, die Fehler Streiks immer, wenn Sie demonstrieren Ihre app vor potentiellen Kunden
Sie sind richtig, sir. 100% richtig
:)
Bitte überprüfen Sie meine editierte Frage und geben Sie mir eine Lösung..
Ist Ihre
AT_DATE
Spalte ein text-Feld (varchar, nvarchar)? Wenn ja, was beabsichtigen Sie zu tun, die Anwendung einer WIE-Anweisung, um eine Zeichenfolge, die ein Datum? Suche zwischen den Perioden oder nach einem bestimmten Datum? Es ist ein grundlegender Fehler hier. Ein date sollte immer gespeichert werden, in einen datetime-oder smalldatetime-Spalte, ansonsten ist dies fast unmöglich anwenden diese Art von LogikInformationsquelleAutor Steve
Meine NICHT EMPFOHLEN Lösung:
Entfernen Sie die Klammer und
%
Zeichen. Setzen Sie ein Leerzeichen kurz vor derORDER
(obwohl es nicht die Ursache des syntax-Fehler).Beheben wählen Sie in dieser Art und Weise:
Was ich tun, empfehlen Sie ist, zu lernen, zu verwenden Sie SQL Parameter.
Sollte die Abfrage sieht dann wie folgt aus (beachten Sie die @editDate parameter Ort-Halter innen):
"SELECT
.EMP_ID,EMP_NAME,AT_STATUS,AT_REMARK FROM ATTENDANCE WHERE AT_DATE = @editDate ORDER BY EMP_NAME ASC"
Dann müssen Sie nur die Parameter hinzufügen, um die
SqlCommand
. Der einfachste Weg ist, das zu tun, ist die Verwendung SqlParameterCollection.AddWithValue.yourSqlCommand.Parameters.AddWithValue("@editDate", editDate)
Ein vollständiges Beispiel:
Vom MSDN über Sql-Parameter
Dim editdate As Date editdate = DTPEDITAT.Value
aditdate nicht aus der Datenbank. Nur ein DateTimePicker nur.Wenn Ihr mit diesem Feld die DateTimePicker.Wert - Eigenschaft, deren Wert bereits ein
DateTime
, und die Datenbank-Spalte eingegeben wirdDateTime
auch dann vergessen Sie Datum Konvertierungen in string und solche Sachen, nur verwenden Sie sql Parameter und fügen Sie den datetime-Wert direkt auf die parameter.+1, eigentlich ist diese Antwort ein Punkt..
:D
, ich guck mal für eine klare AntwortErklären Sie bitte etwas mehr..
Sie haben ein vollständiges Beispiel jetzt. Versuchen Sie es und lassen Sie es uns wissen
InformationsquelleAutor Luis Quijada
Versuchen, verschieben einen Raum in der Nähe zu Ihrer
"%)
und korrigierte ich die Abfrage. Versuchen Sie herauszufinden,.Convertion failed when converting datetime from character string
ich veränderte meine Antwort.. nur überprüfen Sie das korrekte format des Datums
k Freund.. ich werde warten, für Ihre replay...
check meine Antwort.. aber Vorsicht mein Freund. weil deine query ist anfällig für sql-injection 🙂
zeigt
type Date is not a defined system type
. Aber ich ändereCAST(AT_DATE AS Date)
zuCAST(AT_DATE AS DateTime)
. Jetzt zeigen keinerlei Fehler. Aber keine Daten erhalten.InformationsquelleAutor spajce
Ändere ich meinen code wie folgt
Itz eine Gute Arbeit....
InformationsquelleAutor Thanzeem
dies ist mein code seine Arbeit
oldbc.CommandText = "select * from recette wo" & "ComboBox1".Text & " zwischen #" & DateTimePicker1.Text & "# und #" & DateTimePicker2.Text & "#"
InformationsquelleAutor Sinoo Yassine