Стойност от тип ‹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