Впервые на StackOverflow и очень много с # начинающимSqlDataReader не читает все строки, кроме первой
В настоящее время создания формы, которая производит гистограмму из данных, хранящихся в базе данных. Выбранная запись идентифицируется идентификатором PID (идентификатор пациента) и tdate (дата тестирования). Эти значения определяются двумя комбинированными полями, которые пользователь может выбрать из них. Проблема, с которой я столкнулась, заключается в том, что только первая и последняя записи, хранящиеся в базе данных, заполняют барьер.
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);
}
}
Вот рис данных: Test_results_table
здесь ПИК интерфейс с первой записи работы: interface
Я знаю, это что-то делать с читателем но не может решить, как правильно функционировать
Любая помощь очень ценится
Вы читаете в цикле все возвращаемые значения, затем выходите из цикла и используете только последнее значение для установки своих очков. Я думаю, что вы должны переместить настройки точки внутри цикла – Steve
Все даты в вашем наборе данных уникальны, поэтому вы получите только одну строку с запросом, который у вас есть. Вы также открыты для SQL-инъекции FYI. – ElGavilan