Как показать значение sql (access) и количество ассоциаций - PullRequest
0 голосов
/ 13 октября 2019

Я попробовал комбинацию способов получить это: Как это должно выглядеть:

enter image description here

Однако я могу только заставить его работатьс первым значением, а не с количеством ассоциаций.

исключение, выброшенное в строке dbcount = dbcom2.ExecuteReader(); (исключение "значения для одного или нескольких обязательных параметров отсутствуют")

Вот мой код

private void Form1_Load(object sender, EventArgs e)
{
    OleDbConnection con = new OleDbConnection();
    con.ConnectionString = "provider=Microsoft.ACE.OLEDB.12.0;" + "data Source=C:\\Users\\Game-PC-Rick\\OneDrive - ROC Nova College\\C#\\Dell XPS Rick\\C# deel 3\\Vlinders\\Vlinders.accdb ; " + "Persist Security Info=False";
    con.Open();
    OleDbDataReader dbread = null;
    string sql = "SELECT familienamen.Familienaam FROM familienamen ORDER BY familienamen.Familienaam";
    OleDbCommand dbcom = new OleDbCommand(sql, con);

    OleDbDataReader dbcount = null;
    string sql2 = "SELECT familienamen.Familienaam, COUNT(vlinders.Familienaam) FROM familienamen Inner join vlinders ON Vlinders.Familienaam = Familienamen.Familie_Id GROUP BY familienamen.Familienaam ORDER BY familienamen.Familienaam";
    OleDbCommand dbcom2 = new OleDbCommand(sql2, con);

    dbread = dbcom.ExecuteReader();

    dbcount = dbcom2.ExecuteReader();

    while (dbread.Read())
    {
        listBox1.Items.Add(dbread[0].ToString() + " " + dbcount[1].ToString());
    }
    dbread.Close();
    con.Close();
}

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 13 октября 2019

Это не ответ, я просто хотел показать вам, как реализовать шаблон IDisposable.

    private void Form1_Load(object sender, EventArgs e)
    { 
        string connectString = "provider=Microsoft.ACE.OLEDB.12.0;" + "data Source=C:\\Users\\Game-PC-Rick\\OneDrive - ROC Nova College\\C#\\Dell XPS Rick\\C# deel 3\\Vlinders\\Vlinders.accdb ; " + "Persist Security Info=False";

        long totalCount = 0;

        using (OleDbConnection con = new OleDbConnection(connectString))
        {
            con.Open();

            string sql2 = "SELECT familienamen.Familienaam, COUNT(familienamen.Familienaam) FROM familienamen Inner join vlinders ON Vlinders.Familienaam = Familienamen.Familie_Id GROUP BY familienamen.Familienaam ORDER BY familienamen.Familienaam";
            using (OleDbCommand dbcom2 = new OleDbCommand(sql2, con))
            {
                using (OleDbDataReader dbcount = dbcom2.ExecuteReader())
                {
                    while (dbcount.Read())
                    {
                        listBox1.Items.Add($"{dbcount[0].ToString()} {dbcount[1].ToString()});

                        totalCount++;
                    }

                    dbcount.Close();
                }
            }

            con.Close();
        }
    }

Не уверен, для чего вам нужен первый читатель, так как второй читатель, кажется, имеет всю информациютебе нужно.

...