New lesen zu Stackoverflow und sehr viel ein C# AnfängerSqlDataReader keine Zeile abgesehen von erstem
Zeit eine Form zu schaffen, die in einer Datenbank gespeichert, um ein Balkendiagramm aus Daten erzeugt. Der gewählte Datensatz wird durch pID (Patienten-ID) und tdate (Testdatum) identifiziert. Diese Werte werden durch 2 Kombinationsfelder bestimmt, aus denen der Benutzer auswählen kann. Das Problem besteht darin, dass nur die ersten und letzten Datensätze in der Datenbank das Balkendiagramm füllen.
if (radioButtonTestResult.Checked)
{
foreach (var series in TestResultBarChart.Series)
{
series.Points.Clear();
}
string tdate = comboBox2.Text;
using (SqlConnection connection = new SqlConnection(@"Data Source= (LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\MMSEDB.mdf;Integrated Security=True"))
{
connection.Open();
string sql = "SELECT T_CLOCK_SCORE,T_LANGUAGE_SCORE,T_RECALL_SCORE,T_REGISTRATION_SCORE,T_ORIENTATION _SCORE,T_TIME FROM TEST_RESULTS WHERE P_ID='" + pID + "' AND T_DATE='"+ tdate +"'";
using(SqlCommand command = new SqlCommand(sql, connection))
{
command.CommandTimeout = 3600;
using (SqlDataReader reader = command.ExecuteReader(CommandBehavior.SequentialAccess))
{
while (reader.Read())
{
MessageBox.Show("hello4");
String clockScoreString = reader["T_CLOCK_SCORE"].ToString();
MessageBox.Show(clockScoreString);
clockScore = Int32.Parse(clockScoreString);
String langScoreString = reader["T_LANGUAGE_SCORE"].ToString();
langScore = Int32.Parse(langScoreString);
String recallScoreString = reader["T_RECALL_SCORE"].ToString();
recallScore = Int32.Parse(recallScoreString);
String regScoreString = reader["T_REGISTRATION_SCORE"].ToString();
regScore = Int32.Parse(regScoreString);
String orientScoreString = reader["T_ORIENTATION_SCORE"].ToString();
orientScore = Int32.Parse(orientScoreString);
String timeScoreString = reader["T_TIME"].ToString();
timeScore = Int32.Parse(timeScoreString);
}
reader.Close();
}
}
this.TestResultBarChart.Series["Series1"].Points.AddXY("Clock Score", clockScore);
this.TestResultBarChart.Series["Series1"].Points.AddXY("Language Score", langScore);
this.TestResultBarChart.Series["Series1"].Points.AddXY("Recall Score", recallScore);
this.TestResultBarChart.Series["Series1"].Points.AddXY("Registration Score", regScore);
this.TestResultBarChart.Series["Series1"].Points.AddXY("Orientation Score", orientScore);
}
}
Hier ist ein Bild der Daten: Test_results_table
hier ist ein Bild von der Schnittstelle mit dem ersten Datensatz Arbeits: interface
Ich weiß, das etwas mit dem Leser zu tun hat aber kann nicht herausfinden, wie man richtig funktioniert
Jede Hilfe wird sehr geschätzt
Sie lesen alle zurückgegebenen Werte in einer Schleife, verlassen dann die Schleife und verwenden nur den letzten Wert, um Ihre Punkte festzulegen. Ich denke, Sie sollten die Punkteinstellungen innerhalb der Schleife bewegen – Steve
Alle Daten in Ihrem Datensatz sind einzigartig, so dass Sie nur eine Zeile mit der Abfrage erhalten, die Sie haben. Sie sind auch offen für SQL Injection FYI. – ElGavilan