Значение типа ‹DataTable› не может быть преобразовано в ‹database.table name›

Мы разрабатываем веб-приложение ASP.Net с базой данных SQL Server и хотели бы заполнить элемент управления меткой ASP.Net общим количеством учащихся, зачисленных в школу, всякий раз, когда отображается домашняя страница.

С помощью конструктора наборов данных мы создали следующие строго типизированные элементы управления:

DataTable: Students
DataSet: DataSetAllStudents
TableAdapter: StudentsTableAdapter

В файле кода программной части VB.Net я использовал следующий код, чтобы запустить процесс получения общего количества зачисленных студентов.

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    Dim studentsAdapter As New DataSetAllStudentsTableAdapters.StudentsTableAdapter
    Dim studentsTableRow As Knowledge_Academy.Students

    studentsTableRow = studentsAdapter.GetData

End Sub

Мы получаем ошибку в этой строке кода:

studentsTableRow = studentsAdapter.GetData

Это ошибка:

Value of type 'Knowledge_Academy.DataSetAllStudents.StudentsDataTable' cannot be 
converted to 'Knowledge_Academy.Students'.

GetData содержит запрос, который вернет общее количество зачисленных студентов. Мы также хотели бы знать, как вернуть значение в этот элемент управления меткой ASP.Net.

<asp:Label ID="LabelTotalNumberOfStudents" runat="server" Text="Label"></asp:Label>

person Emad-ud-deen    schedule 09.11.2012    source источник
comment
Возвращает общее число (целое число) или DataTable со всеми строками?   -  person Tim Schmelter    schedule 09.11.2012
comment
Я хотел бы вернуть его как одно целое число для общей суммы. Я думал о том, чтобы, возможно, подсчитать все строки в DataTable, но не знаю, как это сделать.   -  person Emad-ud-deen    schedule 09.11.2012


Ответы (1)


Во-первых, убедитесь, что вы загружаете данные только при первой загрузке, а не при каждой обратной передаче. Во-вторых, поскольку GetData возвращает DataTable со всеми строками, вы можете использовать его свойство Rows.Count:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Not Page.IsPostBack Then
        Dim daStudents = New DataSetAllStudentsTableAdapters.StudentsTableAdapter()
        Dim tblStudents = studentsAdapter.GetData()
        LblStudentNumber.Text = String.Format("{0}", tblStudents.Rows.Count)
    End If
End Sub

Конечно, было бы лучше добавить в TableAdapter новый запрос, возвращающий скалярное значение с количеством студентов. Это потребует гораздо меньше ресурсов.

person Tim Schmelter    schedule 09.11.2012
comment
Кодировка работает идеально. :-) Спасибо за быстрый ответ и помощь. - person Emad-ud-deen; 09.11.2012