2012-04-25 2 views
1

У меня есть функция (на vb.net), чтобы получить данные из XMLWebService:Невозможно привести объект типа «System.Data.DataView» к типу «System.Data.IDataReader»

Private Function GetDataSchedule() As DataTable 
    Dim xTable As Data.DataTable 
    xTable = xMaster.GetSchedule() 

    'Bind to DataTable 
    Dim DT As New System.Data.DataTable 
    DT.Load(xTable.DefaultView) '--> When I set a breakpoint, the error start from here 

    Return DT 
End Function 

И тогда функция для вызова GetDataSchedule() функции:

Public Sub ShowDataSchedule() 
    Dim DSSchedule As New System.Data.DataSet 
    DSSchedule.Tables.Add(GetDataSchedule) 

End Sub 

Но тогда, когда я выполнил код, это приводит на получить сообщение об ошибке: Unable to cast object of type 'System.Data.DataView' to type 'System.Data.IDataReader'.

когда я только выполните функцию GetDataSchedule(), оно возвращает значение, но когда я делаю это отдельно, чтобы вызвать функцию, тогда она получила ошибку. Я что-то упускаю? Нужна ваша помощь. Спасибо ...

ответ

0

Попробуйте

DSSchedule.Tables.Add(GetDataSchedule().Copy()) 

Несмотря на то, так как вы можете получить обратно пустую ссылку из GetDataSchedule(), было бы лучше, чтобы повторно множитель ваш код немного:

Dim schedule as Data.DataTable = GetDataSechedule() 
If Not IsNothing(schedule) Then 
    DSSchedule.Tables.Add(schedule.Copy()) 
End If 

В противном случае ваш код пойдет стрела, если вы попытаетесь выполнить .Copy() по нулевой ссылке.

+0

Привет, спасибо .. Это не работает. Я до сих пор получил сообщение, и я думаю, что проблема не возвращает ненужную ссылку, но я не уверен. –

+0

Извините, если я не был прав. Я думаю, что решение вашей проблемы - это метод Copy() выше. Нулевая контрольная проверка была добавлена ​​мной. –

0

Функция Load принимает только данные DataReaders в качестве аргументов (например, SqlDataReader), но у вас уже есть datatable. Достаточно иметь DT = xTable.