Ausführen der SQL-Befehl und die Ausgabe von Ergebnis an ' DataGridView in C#
Ich versuche zum ausführen einer SQL-Befehl in einer Access-Datenbank über eine OleDbConnection mit C# und verwenden Sie die Informationen, die zum ausfüllen eines DataGridView auf einem windows form. Ich öffnete die Verbindung, erklärte die Abfrage, und ausgeführt es, aber ich kann nicht finden, wie die Ausgabe der Ergebnisse an den DataGridView auf dem windows-Formular (namens dataOutput).
private void Query()
{
string cmdText = "SELECT * FROM RetentionTable " +
"WHERE [DateTime] BETWEEN '" + getDateTimeFrom("") + "' AND '" + getDateTimeTo("") + "'";
string ConnectionPath = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=RetentionDB.mdb";
try
{
OleDbConnection cn = new OleDbConnection(ConnectionPath);
DataSet objDataSet = new DataSet();
OleDbDataAdapter objDataAdapter = new OleDbDataAdapter();
if (cn.State.Equals(ConnectionState.Closed))
{
cn.Open();
}
OleDbCommand OleDbSearch = new OleDbCommand(cmdText, cn);
OleDbSearch.ExecuteNonQuery();
objDataAdapter.Fill(objDataSet);
dataOutput.DataSource = objDataSet;
cn.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
MessageBox.Show(ex.StackTrace.ToString());
}
}
Von dem, was ich sehen kann, ist die Abfrage wird korrekt ausgeführt, aber das Problem kommt, wenn man versucht, die objDataAdapter.Füllen. Ich denke, ich bin nicht verstehen, wie Sie füllen das DataSet mit der Ausgabe der Abfrage. Jede Hilfe wäre sehr geschätzt werden. Danke!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ein paar Kommentare:
DataAdapter
machen das für Sie.OleDbConnection
undOleDbCommand
Objekte in einerusing
- block, um sicherzustellen, dass Ihre Ressourcen bereinigt werden.ExecuteNonQuery
oder andereExecute...
- Methode auf der Kommandozeile;SelectCommand
Eigenschaft desOleDbDataAdapter
oder übergeben Sie an den Konstruktor.Probieren Sie etwas wie dieses:
Ersetzen mit
ExecuteDataSet method
Ich schlage vor, Sie setzen Ihre enge Verbindung mit blok oder versuchen Sie es Schließlich mit der try-catch -
Best-Practice -
Ich denke, man kann auch zum laden der Daten in eine DataTable und zeigen Sie das DataGridView-Tabelle:
Sollten Sie nicht ausführen
OleDbSearch.ExecuteNonQuery
dies ist nur für Abfragen, die Daten ändern (INSERT/UPDATE). Stattdessen weisen Sie den Befehl an dataadatper:Tun, und dann Ihre
Fill
- und DataSource-Zuweisung.Den richtigen Weg, um ein DataSet abrufen mit einem
OleDbDataAdapter
ist die Zuordnung derOleDbCommand
zu denSelectCommand
Eigenschaft des OleDbDataAdapter-Objekt. Sie geben einfach das OleDbCommand-der Konstruktor der OleDbDataAdapter-Objekt.Auch Ihr code sollte eine parametrisierte Abfrage verwenden, die für den text des Befehls, nicht eine string-Verkettung. Mit parametrisierten Abfrage können Sie vermeiden, dass Sql-Injektionen und die richtige Analyse des Textes, das Datum, die Nachkommastellen variable erfolgt durch den framework-code.
Den using-Anweisung ist ein weiterer Punkt zu beachten. Dadurch wird sichergestellt, eine ordnungsgemäße Schließung und Entsorgung von connection, command und adapter auch im Fall von Ausnahmen.