verwendetes Datenbanksystem: <MSSQL>
Hallo Leute ,
ich bräuchte mal eure Hilfe bei dem auslesen der Ereignisse die in meiner MSSQL Datenbank stehen.
Folgendes Problem:
Ich habe in meiner Windows Form ein monthCalender erstellt.
Jetzt möchte ich gerne das wenn ich auf ein bestimmtes Datum klicke z.B. 12.12.2013 das er mir in meinem DataGridView die Ereignisse die für den 12.12.2013 vorhanden sind anzeigt.
F
private void Kalender_DateSelected(DateTime selectedDate)
{
try
{
SqlConnection cn = new SqlConnection(global::WindowsFormsApplication1.Properties.Settings.Default.Test99ConnectionString);
cn.Open();
SqlDataAdapter sda = new SqlDataAdapter("select Ereignisse from Verlauf WHERE Datum = @selectedDate", cn);
SqlCommand command = new SqlCommand();
command.Parameters.AddWithValue("@selectedDate", );
DataTable dt = new DataTable();
sda.Fill(dt);
dataGridViewBerichtAnzeigen.DataSource = dt;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Hallo Movementroboter,
da wir weder deine Datenstruktur kennen, können wir nicht genau sagen, ob das Query richtig ist. Nichts-desto-trotz kannst du dir mal anschauen, wie es in
[Artikelserie] SQL: Parameter von Befehlen
gemacht wurde.
Bitte sag auch, was passiert oder nicht passiert. Fliegt eine Exception? Ist das Ergebnis einfach leer? Deiner Überschrift "Folgendes Problem" folgt nur, was du willst. Nicht, was nicht funktioniert 😉
Gruss
Coffeebean
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
command.Parameters.AddWithValue("@selectedDate", );
AddWithValue 😃 wäre vielleicht eine gute Idee auch das Datum zu übergeben.
Gruss
Programmierhans
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
Hallo Leute
danke erstmal für die Antworten 😃
Coffeebean:
Wenn ich auf ein Datum klicke erscheint keine Exception und es werden auch keine Daten im Datagridview angezeigt. Habe schon diverse Beiträge zu diesem Thema angeschaut aber leider ohne Erfolg.
Programmierhans:
Habe extra kein Argument hineingeschrieben weil Kalender.DateSelected nicht funktioniert.
command.Parameters.AddWithValue("@selectedDate", Kalender.DateSelected);
Liebe Grüße und einen schönen Start in die neue Woche 😃,
Movementroboter
Hallo Movementroboter,
dann schau mal mit dem Debugger nach. (Schau das Datum, welches reingegeben wird, an. Schau dein Query an. )
Damit und mit den angegebenen Stichwörtern solltest du auf die Lösung kommen.
Gruss
Coffeebean
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
Hallo Leute habe gestern abend noch etwas im Internet gefunden und ausprobiert. Mir wird nun angezeigt das ich die Variable Datum deklarieren muss.
aber durch
cmd.Parameters.Add(new SqlParameter("@Datum", Kalender.SelectionStart.ToShortDateString()));
deklariere ich sie doch schon.
Was mach ich falsch ?
private void Kalender_DateChanged(object sender, DateRangeEventArgs e)
{
try
{
SqlConnection cn = new SqlConnection(global::WindowsFormsApplication1.Properties.Settings.Default.TestConnectionString);
cn.Open();
SqlDataAdapter sda = new SqlDataAdapter("select Ereignisse from Verlauf WHERE Datum = @Datum", cn);
SqlCommand cmd = new SqlCommand();
cmd.Parameters.Add(new SqlParameter("@Datum", Kalender.SelectionStart.ToShortDateString()));
DataTable dt = new DataTable();
sda.Fill(dt);
dataGridView1.DataSource = dt;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Hallo Movementroboter,
lass beim AddWithValue mal das"@" vor dem Parameterstring weg.
Gruss
Coffeebean
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
Hallo,
der Fehler ist ein anderer: der SqlDataAdapter und das SqlCommand haben bisher nichts miteinander zu tun (daher kann der Parameter gar nicht dem SQL-String zugewiesen werden).
Es fehlt noch
sda.SelectCommand = cmd;
Edit: evtl. muß dann aber der SQL-String dem SqlCommand als Parameter gegeben werden. Beispiele dazu gibt es unter How to use a DataAdapter with stored procedure and parameter
Hallo Leute habe gestern abend noch etwas im Internet gefunden und ausprobiert. Mir wird nun angezeigt das ich die Variable Datum deklarieren muss.
aber durchC#-Code:
cmd.Parameters.Add(new SqlParameter("@Datum", Kalender.SelectionStart.ToShortDateString()));deklariere ich sie doch schon.
Nein, du deklarierst einen Parameter als String, nicht als DateTime.
@Th69:
Es fehlt eher
sda.SelectCommand.Parameters.AddWithValue("@Datum", Kalender.SelectionStart);
Ich danke euch für eure Antworten 😃
Habe es direkt mal ausprobiert nun zeigt der Debugger an:
Fill:Selection.Command-Eigenschaft wurde nicht initialisiert.
Habe den Connection String bereits geprueft ob er in meiner MSSQL Datenbank funktioniert.
Also denke ich mal liegt es an der Variable @Datum
Bekomme hier noch die Krise.
LG,
Movementroboter
Du überschreibst ja auch das Kommando des SQLAdapters wieder wenn Du ihm später ein neues zuweist.
SqlDataAdapter sda = new SqlDataAdapter("select Ereignisse from Verlauf WHERE Datum = @Datum", cn);
und anschließend
sda.SelectCommand = cmd;
=> Effekt: dein erstes Command wurde überschrieben.
Stattdessen:
SqlDataAdapter sda = new SqlDataAdapter();
SqlCommand cmd = new SqlCommand("select Ereignisse from Verlauf WHERE Datum = @Datum");
cmd.Parameters.AddWithValue("Datum", Kalender.DateSelected);
cmd.Connection = new SqlConnection(global::WindowsFormsApplication1.Properties.Settings.Default.TestConnectionString);
sda.SelectCommand = cmd;
DataTable dt = new DataTable();
sda.Fill(dt);
dataGridView1.DataSource = dt;
Ich weis schon warum ich die ganzen Einsteigerbücher für schlecht halte.
Die ganzen Autoren haben scheinbar ihren Einstieg in .NET eins zu eins niedergeschrieben.
Anders ist nicht zu erklären das sich dieser Blödsinn durch jedes Buch zieht.
SqlDataAdapter sda = new SqlDataAdapter("select Ereignisse from Verlauf WHERE Datum = @Datum", connectionString);
sda.SelectCommand.Parameters.AddWithValue("@Datum", Kalender.DateSelected);
DataTable dt = new DataTable();
sda.Fill(dt);
dataGridView1.DataSource = dt;
Das ist doch so einfach, und vorallem kommen dann nicht wieder diejenigen die [Artikel] Ressourcen schonen - Datenbanken richtig öffnen und schließen missachten.
cmd.Parameters.Add(new SqlParameter("@Datum", Kalender.SelectionStart.ToShortDateString()));
Der Sinn der Parameter ist doch gerade dass die Typumwandlung vom .NET Framework übernommen wird. Du übergibst immer den Typ wie er in der Datenbank definiert ist.
Falls Du selbst umwandeln würdest müsstest Du viele Sachen beachten : deutsches und englisches Datumsformat, oder ein anderes, dann Sonderzeichen in Strings etc.
Grüße Bernd
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3