Debashis3850 Ответов: 2

Как я могу читать через таблицу базы данных SQL с помощью цикла и вставлять эти записи в datagridview


// Define the Variables for Connection to the SQL Server

            String ConnectionString2 = @"Data Source = hemsql02;Initial Catalog=OTITest;User ID=wgtest;Password=Testit$1";
            SqlConnection conn = new SqlConnection(ConnectionString2);
            con.Open();   // Open up the path to the Database.....

            // Setup Sql Statement for Selection of Records......
            String SqlSelectRecords = ("select g.[Year] ,g.[EffectiveDate],g.[Volume] ,g.[Currency] ,g.[RateType] ,g.[MinimumRate] ,i.[State], i.[Location], i.[IndexEffective], i.[Page], i.[PageDescription] FROM[MultiYearWageGuide]as g join[MultiYearWageIndex] as i ON g.Volume= i.Volume AND g.Page = i.Page AND g.LocCode = i.Location WHERE store= " + int.Parse(textBox2.Text));
                        
            // Assign the variable cmd the value of the selection with the connection.......
            SqlCommand cmd = new SqlCommand(SqlSelectRecords, con);

            // Assign the DataReader to a variable......
            SqlDataReader sqldr = cmd.ExecuteReader();


            // Keep reading thru the file for values from the selection and move them to the appropriate area of the Form .....                          
              if (sqldr.Read())       
              {
                
                    // Load the DataGrid Table1 with Values from DataBase Table ......

                    dataGridView1.Rows.Add(YearVal, EffDateVal, VolumeVal, CurrVal, RateTypeVal, MinRateVal);

                    // Load the DataGrid Table2 with Values from Database Table.....

                    //dataGridView2.Rows.Add(YearVal, EffDateVal, VolumeVal, CurrVal, RateTypeVal, MinRateVal);


Что я уже пробовал:

Я перепробовал все, но не знаю достаточно C#, чтобы сделать это

2 Ответов

Рейтинг:
2

Richard MacCutchan

Используйте DataAdapter и DataSet, которые связываются с DataGridView. Видеть Заполнение набора данных из DataAdapter | Microsoft Docs[^].

[редактировать]
В качестве альтернативы просто простой цикл while:

while (sqldr.Read())       
{
    // Load the DataGrid Table1 with Values from DataBase Table ......
    // use the reader.GetXXX methods to find the different values
    // or index to each field - see below
    DatadataGridView1.Rows.Add( insert values here ...);
}

Класс sqldatareader.Пункт[Int32 Отсчитываемый] Собственность (Системы.Данных.В Sqlclient) | Майкрософт Документы[^]

[/редактировать]


Maciej Los

5ed!

Рейтинг:
2

Maciej Los

В начале...

Прежде всего...

String SqlSelectRecords = ("select g.[Year] ,g.[EffectiveDate],g.[Volume] ,g.[Currency] ,g.[RateType] ,g.[MinimumRate] ,i.[State], i.[Location], i.[IndexEffective], i.[Page], i.[PageDescription] FROM[MultiYearWageGuide]as g join[MultiYearWageIndex] as i ON g.Volume= i.Volume AND g.Page = i.Page AND g.LocCode = i.Location WHERE store= " + int.Parse(textBox2.Text));

Такой запрос есть SQL-инъекция[^] уязвимый!
Не используйте сцепленные строки! Воспользуйся параметризованный запрос[^] вместо этого!

Во-вторых...
String это не то же самое, что string! За короткий срок:
Цитата:
То string тип представляет собой последовательность из нуля или более символов Юникода. string это псевдоним для System.String в сетях.

Для получения более подробной информации, пожалуйста, смотрите:
Класс String (System) | Microsoft Docs[^]
строка[^]


Что касается вашего вопроса...
Я понятия не имею, почему вы хотите использовать loop! Воспользуйся DataSet, DataAdapter как упоминал Ричард Маккатчан. Вы можете использовать объект DataTable[^] тоже.

Совет: использовать оператор using[^] легко управлять одноразовыми предметами. Например:

//first
dataGridView1.AutoGenerateColumns = true;

//then
DataTable dt = new DataTable();
string sCs = "...";
string sCommand = "SELECT ... WHERE store = @aStore";
using (SqlConnection connection = new SqlConnection(sCs))
    using(SqlCommand command = new SqlCommand(sCommand, connection))
    {
        connection.Open();
        command.Parameters.AddWithValue("@aStore", textBox2.Text)
        using(SqlDataReader reader = command.ExecuteReader())
            dt.Load(reader);
    }

//finally...
dataGridView1.DataSource = dt;


Debashis3850

Я близок к кодированию, которое я указал, единственная проблема, с которой я сталкиваюсь, - это программа, которая не читает вторую запись и не помещает значения в DataGridView. Он показывал только первую запись.

Это те две записи, которые я ожидал увидеть в своем DataGridView:

Год дата вступления в силу объем валюта RateType MinimumRate
2018 2018-07-01 A US H 16.81
2018 2018-07-01 A US H 19.48




Но когда я запускаю свою программу, я получаю следующее В своем DataGridView:

Год дата вступления в силу объем валюта RateType MinimumRate
2018 2018-07-01 A US H 16.81

Debashis3850

Обратите внимание, что он вставляет только первую запись из таблицы базы данных, но не вторую запись ... есть идеи, почему? Я знаю, что я близок ... ЛОЛ

Maciej Los

Итак, проверьте, что возвращает база данных при выполнении запроса...

Richard MacCutchan

Потому что Вы читаете только одну запись из возвращенного набора. Вы должны использовать цикл while, который продолжается до тех пор, пока reader.Read() не вернет false.