Member 13985914 Ответов: 2

Как добавить прогамматически данные из базы данных в datagridview в C#


привет, ребята!

я хочу загрузить данные в datagridview из базы данных в c#

например у меня есть такой запрос:
Select sale.SaleID,item.ItemID, invoice.InvoiceID, Item.ItemName as item,  
            invoice.Qty ,invoice.SalePrice
	    as [Sale Price] FROM invoice
            JOIN item ON invoice.ItemID = item.ItemID
            JOIN sale ON invoice.SaleID = sale.SaleID
            where sale.SaleID = '" + textBox1.Text + "'";

теперь я хочу загрузить через sqldataReader а не через sqldataAdapter

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

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

я много пробовал но не нашел ничего красивого

2 Ответов

Рейтинг:
2

Richard MacCutchan

Во-первых, вы не должны использовать конкатенацию строк для построения SQL-запросов; см. http://bobby-tables.com/about.html[^] по причинам, почему бы и нет. Использовать правильно отформатировать параметризацию запросов, с использованием проверенных данных, вводимых пользователем.

Во-вторых, вы можете копировать элементы в свой datagridview, просто прокручивая возвращенные строки datareader и добавляя каждое поле в соответствующий столбец в новой строке datagridview. Все, что вам нужно в datagridview в начале, - это правильное количество и тип столбцов. Итак, процесс таков:

Create the DataGridView
Add the Columns
For Each record returned by the SQLDataReader
    Create a new DataGridRow
    For each item in the SQL record
        Copy the item into the appropriate column in the row
    End For
    Add the new row to the DataGridView
End For


Рейтинг:
2

Maciej Los

Цитата:
теперь я хочу загрузить через sqldataReader а не через sqldataAdapter

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


Зачем заставлять двери широко распахиваться? Вы должны использовать функциональность DataGridView вместо того, чтобы создавать столбцы вручную!
//before you use below code change AutoGenerateColumns property of DataGridView to true!

DataTable dt = new DataTable();
string sSqlConn = "enter connection details here";
using (SqlConnection connection = new SqlConnection(sSqlConn))
{
    string sql = @"SELECT * FROM YourTable";
    connection.Open();
    
    using (SqlCommand command = new SqlCommand(sql, connection))
    using (SqlDataReader reader = command.ExecuteReader())
    {
        dt.Load(reader); //load data into datatable!	
    }
}

this.dataGridView1.DataSource = dt;


Вот и все!


Richard Deeming

В вашем коде было несколько ошибок:

* SqlCommand.ExecuteReader не вернуть OleDbDataReader;
* Вы не можете позвонить command.Dispose извне using блок где command определяемый;
* Вам не нужно звонить command.Dispose когда он завернут в using блок;
* Вы можете обернуть SqlDataReader в using блокируйте, чтобы вам не нужно было звонить Close или Dispose на нем;

Я взял на себя смелость починить их для вас. :)

Maciej Los

- Спасибо, Ричард.
:пиво:

Member 13985914

на самом деле я хочу, чтобы у меня были данные в моей базе данных, и я хочу загрузить данные в мой столбец datagridview, но я покажу столбец в datagridview... я делаю следующие столбцы в datagridview в представлении дизайна.
Распродажа.SaleID, поз.ItemID, счет-фактура.InvoiceID, Item.Имя товара ,счет-фактура.Кол-во ,счет-фактура.SalePrice и одна пустая колонка..

Maciej Los

Пожалуйста, внимательно прочтите мой ответ и пройдите через инструкцию.