Dim dsUsers As New DataSet
Dim dtUsers As New DataTable
Try
Dim strVirtualPath As String = Request.ApplicationPath & "/wap/Users.xml"
dsUsers.ReadXml(Request.MapPath(strVirtualPath), XmlReadMode.ReadSchema)
Catch ex As Exception
scToLogicPC.Close()
Response.Redirect("errors.aspx?numerr=506")
End Try
dtUsers = dsUsers.Tables.Add("Users")
Dim i As Integer
For i = 0 To dtUsers.Rows.Count - 1
With dtUsers.Rows(i)
lUsers.Items.Add(.Item("Mobile"))
End With
Next
Задача – считать с xml'a как будто это база данных
Код:
Код:
<?xml version="1.0" standalone="yes"?>
<Users>
<xs:schema id="Users" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="Users" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="User">
<xs:complexType>
<xs:sequence>
<xs:element name="ID" type="xs:string" minOccurs="0" />
<xs:element name="FName" type="xs:string" minOccurs="0" />
<xs:element name="LName" type="xs:string" minOccurs="0" />
<xs:element name="Mobile" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<User>
<ID>7</ID>
<FName>Avi</FName>
<LName>Amar</LName>
<Mobile>0555555800</Mobile>
</User>
</Users>
<Users>
<xs:schema id="Users" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="Users" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="User">
<xs:complexType>
<xs:sequence>
<xs:element name="ID" type="xs:string" minOccurs="0" />
<xs:element name="FName" type="xs:string" minOccurs="0" />
<xs:element name="LName" type="xs:string" minOccurs="0" />
<xs:element name="Mobile" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<User>
<ID>7</ID>
<FName>Avi</FName>
<LName>Amar</LName>
<Mobile>0555555800</Mobile>
</User>
</Users>
Почему-то в DataSet'e ничего не наблюдаются.
------------------------------------------------------
Плиз, подскажите где моя ошибка?
Да вроде всё правильно, во всяком случае на этапе чтения таблицы. А что в отладчике? В таблице есть хоть какие-нибудь данные или структура (то есть, читается ли схема)? В целях отладки может быть стоит разделить чтение схемы и данных на два этапа, может быть, стоит схему вообще читать из отдельного файла, благо средствами Студии она создаётся легко.
Цитата: Sanila_san
Да вроде всё правильно, во всяком случае на этапе чтения таблицы. А что в отладчике? В таблице есть хоть какие-нибудь данные или структура (то есть, читается ли схема)? В целях отладки может быть стоит разделить чтение схемы и данных на два этапа, может быть, стоит схему вообще читать из отдельного файла, благо средствами Студии она создаётся легко.
В дебагере написано, что dtUsers.Rows.Count равно нулю. Также и в датасете тоже равно нулю. То есть в Луп он просто не заходит. При это считается без исключений и ошибок.
Вообще то цель пройти лупом по таблице и в ручную добавить информацию.
Плиз, подскажите как я могу это сделать?
Код:
With dtUsers.Rows(i)
lUsers.Items.Add(.Item("Mobile"))
End With
Next
lUsers.Items.Add(.Item("Mobile"))
End With
Next
Код:
dtUsers = dsUsers.Tables.Add("Users")
Код:
<mobile:List ID="lUsers" Runat="server"></mobile:List>
"Разве это должно работать?"
А как я могу построчно считать с датасета?
Прикрепил снимок отладчика, столбцов не наблюдается.
Именно поэтому не могу понять, что не так я делаю.
Есть возможность написать пару строчек кода, показать мне как это должно быть?
Код:
dsUsers.Tables.Add(dtUsers)
Взято в МСДН отсюда и отсюда.
Построчно считать с датасета нельзя, ибо в нём нет строк. Построчно можно считать с таблицы в датасете через обращение DataSet.Tables.Item(). А в снимке отладчика вы как раз самое интересное и забыли: там нельзя посмотреть на ItemArray или на названия столбцов в таблице.
Цитата: Sanila_san
Студии под руками нет, поэтому отвечаю долго. Итак, ошибка в присваивании. Правильно написать так:
Взято в МСДН отсюда и отсюда.
Построчно считать с датасета нельзя, ибо в нём нет строк. Построчно можно считать с таблицы в датасете через обращение DataSet.Tables.Item(). А в снимке отладчика вы как раз самое интересное и забыли: там нельзя посмотреть на ItemArray или на названия столбцов в таблице.
Код:
dsUsers.Tables.Add(dtUsers)
Взято в МСДН отсюда и отсюда.
Построчно считать с датасета нельзя, ибо в нём нет строк. Построчно можно считать с таблицы в датасете через обращение DataSet.Tables.Item(). А в снимке отладчика вы как раз самое интересное и забыли: там нельзя посмотреть на ItemArray или на названия столбцов в таблице.
Спасибо, разобрался с Вашей помощью.
+1
Так и сделал.