2015-02-04 3 views
0

У меня есть SqlDataReader из команды SQL Server и хочу я, чтобы показать в DataDridView с этим кодом:SqlDataReader не может быть загружен в таблицу

SqlDataReader dr=product.RetriveDetailsOfOneProduct(); 
DataTable dt = new DataTable(); 
dt.Load(dr); 
DataGrid.DataSource = dr; 

Я проверил его с помощью контрольных точек, что мой SqlDataReader имеет строки, но когда загрузив его в DataTable, он пуст (без строк)

Как это исправить?

И это функция моего класса DATAACCESS где SqlDataReader возвращается:

internal SqlDataReader RetriveDetailsOfOneProduct(product product) 
{ 
    string RetriveQuery = string.Format("SElect person.F_Name as N'Name ',person.L_Name as N'LastName',borrow.Person_Identity as N'Identity',borrow.T_Date as 'Date1', borrow.B_Date as 'Date2' from BorrowTable borrow Inner join PersonTable person on borrow.Product_Name=N'{0}' and person.Person_identity=borrow.Person_Identity ", product.Productname); 

    SqlCommand cmd = new SqlCommand(RetriveQuery, conn); 
    // conn.Close(); //if i close the Connection(conn) it runs into error 
    return(cmd.ExecuteReader()); 
} 
+0

вы должны убедиться, что вы свяжете данные в DataGrid, а только настройки источника не достаточно хорошо – MethodMan

+1

Я хотел бы предложить портирование запрос по хранимой процедуре, Что ж. будет легче поддерживать и пытаться редактировать динамический sql в вашем коде. также оберните ваши объекты SqlCommand вокруг 'using() {}' для автоматического удаления – MethodMan

+0

спасибо за все, что вы работали good.i сделал ошибку, назначив dt DataGrid, теперь он работает хорошо – ako

ответ

3

Ваш вопрос в том, что вы устанавливаете данные источник для считывателя данных вместо таблицы данных.

DataGrid.DataSource = dr; 

должен быть

DataGrid.DataSource = dt; 
DataGrid.DataBind(); 
2

Назначают DataTable, а не DataReader ...

DataGrid.DataSource = dt; 
Смежные вопросы