C# Ms Access

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by eregis, 29 Apr 2012.

  1. eregis

    eregis Member

    Joined:
    15 Jul 2010
    Messages:
    104
    Likes Received:
    5
    Reputations:
    -5
    Существует клас Db в нем описан метод
    Code:
     public static string[] selects(string zapros, string from, string count, string what_select)
            {
                string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:/Kursach/Kursach.mdb;Persist Security Info=False;";
                OleDbConnection myConnection = new OleDbConnection(connectionString);
                myConnection.Open();
                OleDbCommand myCommand = myConnection.CreateCommand();
                myCommand.CommandText = zapros;
                OleDbDataReader myDataReader = myCommand.ExecuteReader();
                string[] temp = new string[select_count("SELECT COUNT("+count+") FROM "+from)];
                int i = 0;
                while (myDataReader.Read())
                {
                    temp[i] = (string)myDataReader[what_select];
                    i++;
                }
                myDataReader.Close();
                myConnection.Close();
                return temp;
            }
    
    Если в класе Form1 вызвать этот метод, все прекрасно работает !! Обратное происходит при вызове метода во From2

    Вызов в Form1
    Code:
     private void Form1_Load(object sender, EventArgs e)
            {
                comboBox1.Items.AddRange(Db.selects("SELECT * FROM Працівники", "Працівники", "id", "Логін"));
            }
    
    Вызов у класе From2
    Code:
    private void Form2_Load(object sender, EventArgs e)
            {
                WindowState = FormWindowState.Maximized;
                string[] sl = Db.selects("SELECT * FROM Працівники", "Працівники", "id", "Логін");
    
                dataGridView1.Rows.Add(sl);
    
                textBox2.Text = ""+sl;
                
                foreach(string value in sl){
                    textBox2.Text += value;
                }
    
            }
    
    Метод ничего не возвращает.. Жду ваших ответов!!
     
  2. Spot

    Spot Elder - Старейшина

    Joined:
    1 Mar 2007
    Messages:
    461
    Likes Received:
    38
    Reputations:
    1
    Code:
    
    private void Form2_Load(object sender, EventArgs e)
            {
                WindowState = FormWindowState.Maximized;
                string[] sl = Db.selects("SELECT * FROM Працівники", "Працівники", "id", "Логін");
    
                dataGridView1.Rows.Add(sl);
    
                textBox2.Text = ""+sl;
                
                foreach(string value in sl){
                    textBox2.Text += value;
                }
    
            }
    
    
    Из БД ты считываешь информацию, но дело в том, как ты её обрабатываешь-
    Смотри это твой массив: string[] sl
    В него ты записываешь ВСЮ информацию считываемую из дб, причем делаешь это в одну ячейку. То есть представь себе в массиве sl[0] у тебя находятся все записи таблицы.
    Ессно так не проканает:

    Code:
         dataGridView1.Rows.Add(sl);//Таким образом ты сможешь добавить только одну строку, представь себе у тебя 10 записей идут формы: Вася,Иванов,10,Петя,Сидоров,11,Кристина Бобкова 12 ...
    //заноситься в датагрид только однастрока и только Вася Иванов 10, остальное обрезается.
    
                textBox2.Text = ""+sl;//Тут возвращает String[]
                
                foreach(string value in sl){//Тут вообще через for искать нужно, если ты хочешь использовать string[]
                    textBox2.Text += value;
                }
    
    Предлогаю прочитать и шлянуть пример здесь

    Ред.: только сейчас заметил, что ты пишешь в массив так:
    Code:
     string[] sl = Db.selects("SELECT * FROM Працівники", "Працівники", "id", "Логін");
    
    Разве у тебя компилятор не ругается на эту строчку?
     
    #2 Spot, 29 Apr 2012
    Last edited: 29 Apr 2012
  3. eregis

    eregis Member

    Joined:
    15 Jul 2010
    Messages:
    104
    Likes Received:
    5
    Reputations:
    -5
    Спасибо конечно, но хотелось бы екононмить строки кода, или же прийдется переделывать все )
     
  4. Spot

    Spot Elder - Старейшина

    Joined:
    1 Mar 2007
    Messages:
    461
    Likes Received:
    38
    Reputations:
    1
    Я прошу прощение, я немного тупанул, не знаю куда я смотрел:)На первый кусок кода как-то слишком поверхностно глянул, в итоге дальнейшие выводы были неверны:)
    Вообще все просто, оставляйте как есть, только измените здесь:
    Code:
    for(int i = 0; i<sl.Length; i++)
    {
     textBox2.Text +=sl[i];
     dataGridView1.Rows.Add(sl[i]);
    
    }
    
     
    #4 Spot, 29 Apr 2012
    Last edited: 29 Apr 2012
    1 person likes this.
  5. eregis

    eregis Member

    Joined:
    15 Jul 2010
    Messages:
    104
    Likes Received:
    5
    Reputations:
    -5
    Я понял недостатки мого метода выборки. Для datagrid буду лучьше использовать выше указанный пример.