XML - wczytywanie, zapisywanie i wyszukiwanie

VB.NET
Copy to clipboard
specta
  1. ' ZAPISYWANIE DO XML
  2.  
  3. Imports System.Xml
  4. Public Class Form1
  5.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  6.         Dim writer As New XmlTextWriter("table.xml", System.Text.Encoding.UTF8)
  7.         writer.WriteStartDocument(True)
  8.         writer.Formatting = Formatting.Indented
  9.         writer.Indentation = 2
  10.         writer.WriteStartElement("Table")
  11.         createNode(1, "Product 1", "1000", writer)
  12.         createNode(2, "Product 2", "2000", writer)
  13.         createNode(3, "Product 3", "3000", writer)
  14.         createNode(4, "Product 4", "4000", writer)
  15.         writer.WriteEndElement()
  16.         writer.WriteEndDocument()
  17.         writer.Close()
  18.     End Sub
  19.     Private Sub createNode(ByVal pID As String, ByVal pName As String, ByVal pPrice As String, ByVal writer As XmlTextWriter)
  20.         writer.WriteStartElement("Product")
  21.         writer.WriteStartElement("Product_id")
  22.         writer.WriteString(pID)
  23.         writer.WriteEndElement()
  24.         writer.WriteStartElement("Product_name")
  25.         writer.WriteString(pName)
  26.         writer.WriteEndElement()
  27.         writer.WriteStartElement("Product_price")
  28.         writer.WriteString(pPrice)
  29.         writer.WriteEndElement()
  30.         writer.WriteEndElement()
  31.     End Sub
  32. End Class
  33.  
  34. '''-------------------------------------------------------------------------------------
  35.  
  36. Imports System.Xml
  37. Public Class Form1
  38.   Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  39.      
  40.    
  41.   End Sub
  42.   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  43.      Dim xws As XmlWriterSettings = New XmlWriterSettings()
  44.      xws.Indent = True
  45.      xws.NewLineOnAttributes = True
  46.      Dim xw As XmlWriter = XmlWriter.Create("authors.xml", xws)
  47.      xw.WriteStartDocument()
  48.      xw.WriteStartElement("Authors")
  49.      xw.WriteStartElement("author")
  50.      xw.WriteAttributeString("code", "1")
  51.      xw.WriteElementString("fname", "Zara")
  52.      xw.WriteElementString("lname", "Ali")
  53.      xw.WriteEndElement()
  54.      xw.WriteStartElement("author")
  55.      xw.WriteAttributeString("code", "2")
  56.      xw.WriteElementString("fname", "Priya")
  57.      xw.WriteElementString("lname", "Sharma")
  58.      xw.WriteEndElement()
  59.      xw.WriteStartElement("author")
  60.      xw.WriteAttributeString("code", "3")
  61.      xw.WriteElementString("fname", "Anshuman")
  62.      xw.WriteElementString("lname", "Mohan")
  63.      xw.WriteEndElement()
  64.      xw.WriteStartElement("author")
  65.      xw.WriteAttributeString("code", "4")
  66.      xw.WriteElementString("fname", "Bibhuti")
  67.      xw.WriteElementString("lname", "Banerjee")
  68.      xw.WriteEndElement()
  69.      xw.WriteStartElement("author")
  70.      xw.WriteAttributeString("code", "5")
  71.      xw.WriteElementString("fname", "Riyan")
  72.      xw.WriteElementString("lname", "Sengupta")
  73.      xw.WriteEndElement()
  74.      xw.WriteEndElement()
  75.      xw.WriteEndDocument()
  76.      xw.Flush()
  77.      xw.Close()
  78.      WebBrowser1.Url = New Uri(AppDomain.CurrentDomain.BaseDirectory + "authors.xml")
  79.   End Sub
  80. End Class
  81.  
  82. '------------------------------------------------------------------------------
  83. 'WCZYTANIE USTAWIEŃ APLIKACJI Z PLIKU XML
  84.  
  85. Public Class ConfigFile
  86.  
  87.     Dim m_strConfigFile As String
  88.     Dim oDoc As New XmlDocument()
  89.  
  90.     Public Sub New(ByVal ConfigFile As String)
  91.         m_strConfigFile = ConfigFile
  92.         oDoc.Load(m_strConfigFile)
  93.     End Sub
  94.  
  95.     ' Adds a configuration section
  96.     Public Sub AddConfigSection(ByVal SectionName As String, ByVal HandlerClass As String)
  97.  
  98.         Dim rootNode As XmlNode = oDoc.GetElementsByTagName("configuration").Item(0)
  99.  
  100.         ' create the configSections node if it doesn't exist as config sections
  101.         ' need an entry in this node
  102.         Dim oNode As XmlNode
  103.         oNode = oDoc.DocumentElement("configSections")
  104.         If oNode Is Nothing Then
  105.             oNode = oDoc.CreateElement("configSections")
  106.             If rootNode.ChildNodes.Count > 0 Then
  107.                 Dim oFirstChild As XmlNode = rootNode.FirstChild
  108.                 rootNode.InsertBefore(oNode, oFirstChild)
  109.             Else
  110.                 rootNode.AppendChild(oNode)
  111.             End If
  112.         End If
  113.  
  114.         ' add the section to the configSectionsNode
  115.         Dim oSubNode As XmlNode
  116.         oSubNode = oDoc.CreateElement("section")
  117.         With oSubNode.Attributes.Append(oDoc.CreateAttribute("name"))
  118.             .Value = SectionName
  119.         End With
  120.         With oSubNode.Attributes.Append(oDoc.CreateAttribute("type"))
  121.             .Value = HandlerClass
  122.         End With
  123.         oNode.AppendChild(oSubNode)
  124.  
  125.         ' now create the actual section, if it's not there
  126.         oNode = oDoc.DocumentElement(SectionName)
  127.         If oNode Is Nothing Then
  128.             oNode = oDoc.CreateElement(SectionName)
  129.             rootNode.AppendChild(oNode)
  130.         End If
  131.  
  132.         oDoc.Save(m_strConfigFile)
  133.  
  134.     End Sub
  135.  
  136.     ' Checks whether a configuration section exists
  137.     Public Function ConfigSectionExists(ByVal SectionName As String) As Boolean
  138.         If Not oDoc.DocumentElement(SectionName) Is Nothing Then
  139.             Return True
  140.         End If
  141.     End Function
  142.  
  143.     Public Sub SetConfigAttribute(ByVal SectionName As String, ByVal AttributeName As String, ByVal Value As String, Optional ByVal Create As Boolean = True)
  144.         ' get the section node
  145.         Dim oNode As XmlNode = oDoc.DocumentElement(SectionName)
  146.         Dim oAttr As XmlAttribute
  147.         oAttr = oNode.Attributes.ItemOf(AttributeName)
  148.         If oAttr Is Nothing Then
  149.             oAttr = oDoc.CreateAttribute(AttributeName)
  150.             oNode.Attributes.Append(oAttr)
  151.         End If
  152.         oAttr.Value = Value
  153.         oDoc.Save(m_strConfigFile)
  154.     End Sub
  155.  
  156.     Public Sub SetAppSetting(ByVal SettingName As String, ByVal Value As String)
  157.  
  158.         ' get the node that corresponds to the setting
  159.         Dim oSettingNode As XmlNode = GetAppSettingNode(SettingName)
  160.  
  161.         ' encrypt the value if requested and then set it
  162.  
  163.         oSettingNode.Attributes.ItemOf("value").Value = Value
  164.  
  165.         ' save changes
  166.         oDoc.Save(m_strConfigFile)
  167.  
  168.     End Sub
  169.  
  170.     Private Function AddAppSetting(ByVal SettingName As String) As XmlNode
  171.  
  172.         ' get the appSettings node
  173.         Dim oNode As XmlNode = oDoc.DocumentElement("appSettings")
  174.  
  175.         ' create the key attribute
  176.         Dim oKey As XmlAttribute = oDoc.CreateAttribute("key")
  177.         oKey.Value = SettingName
  178.  
  179.         ' create the value attribute
  180.         Dim oValue As XmlAttribute = oDoc.CreateAttribute("value")
  181.         oValue.Value = ""
  182.  
  183.         ' create the node for the setting
  184.         Dim oChild As XmlNode = oDoc.CreateElement("add")
  185.         oChild.Attributes.Append(oKey)
  186.         oChild.Attributes.Append(oValue)
  187.  
  188.         ' add the node to the appSettings section
  189.         oNode.AppendChild(oChild)
  190.         Return oChild
  191.  
  192.     End Function
  193.  
  194.     Private Function GetAppSettingNode(ByVal SettingName As String, Optional ByVal CreateIfNotFound As Boolean = True) As XmlNode
  195.  
  196.         ' get the appSettings node
  197.         Dim oNode As XmlNode = oDoc.Docum...
  198.  
  199.  
  200. '-------------------------------------------------------------------------------------
  201. 'ZAPIS XML po DATASET'ach
  202.  
  203. Imports System.Xml
  204. Imports System.Data
  205.  
  206. Public Class Form1
  207.     Dim dt As DataTable
  208.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  209.         Dim ds As New DataSet
  210.         dt = New DataTable()
  211.         dt.Columns.Add(New DataColumn("Product_ID", Type.GetType("System.Int32")))
  212.         dt.Columns.Add(New DataColumn("Product_Name", Type.GetType("System.String")))
  213.         dt.Columns.Add(New DataColumn("product_Price", Type.GetType("System.Int32")))
  214.         fillRows(1, "product1", 1111)
  215.         fillRows(2, "product2", 2222)
  216.         fillRows(3, "product3", 3333)
  217.         fillRows(4, "product4", 4444)
  218.         ds.Tables.Add(dt)
  219.         ds.Tables(0).TableName = "product"
  220.         ds.WriteXml("Product.xml")
  221.         MsgBox("Done")
  222.     End Sub
  223.  
  224.  
  225.  
  226.     Private Sub fillRows(ByVal pID As Integer, ByVal pName As String, ByVal pPrice As Integer)
  227.         Dim dr As DataRow
  228.         dr = dt.NewRow()
  229.         dr("Product_ID") = pID
  230.         dr("Product_Name") = pName
  231.         dr("product_Price") = pPrice
  232.         dt.Rows.Add(dr)
  233.     End Sub
  234. End Class
  235.  
  236. '---------------------------------------------------------------------------------------
  237. 'ODCZYTYWANIE XML po GAŁĘZIACH
  238.  
  239. Imports System.Xml
  240.  
  241. Public Partial Class MainForm
  242.     Public Sub New()
  243.         ' The Me.InitializeComponent call is required for Windows Forms designer support.
  244.         Me.InitializeComponent()
  245.        
  246.         '
  247.         ' TODO : Add constructor code after InitializeComponents
  248.         '
  249.     End Sub
  250.    
  251.     Sub Button1Click(sender As Object, e As EventArgs)
  252.         ListBox1.Items.Clear()
  253.       Dim xr As XmlReader = XmlReader.Create("file.xml")
  254.       Do While xr.Read()
  255.           If xr.NodeType = XmlNodeType.Element AndAlso xr.Name = "movie" Then
  256.               ListBox1.Items.Add(xr.GetAttribute(0))
  257.           End If
  258.       Loop
  259.     End Sub
  260.    
  261.     Sub Button2Click(sender As Object, e As EventArgs)
  262.         ListBox2.Items.Clear()
  263.       Dim xr As XmlReader = XmlReader.Create("file.xml")
  264.       Do While xr.Read()
  265.           If xr.NodeType = XmlNodeType.Element AndAlso xr.Name = "type" Then
  266.               ListBox2.Items.Add(xr.ReadElementString)
  267.           Else
  268.               xr.Read()
  269.           End If
  270.       Loop
  271.     End Sub
  272.    
  273.    
  274.     Sub Button3Click(sender As Object, e As EventArgs)
  275.         ListBox3.Items.Clear()
  276.       Dim xr As XmlReader = XmlReader.Create("file.xml")
  277.       Do While xr.Read()
  278.           If xr.NodeType = XmlNodeType.Element AndAlso xr.Name = "description" Then
  279.               ListBox3.Items.Add(xr.ReadElementString)
  280.           Else
  281.               xr.Read()
  282.           End If
  283.       Loop
  284.     End Sub
  285. End Class
  286.  
  287. '-----------------------------------------------------------------------------
  288.  
  289. 'CZYTANIE XML'a po DATASET'ach
  290.  
  291. Imports System.Xml
  292. Imports System.Data
  293. Public Class Form1
  294.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  295.         Dim xmlFile As XmlReader
  296.         xmlFile = XmlReader.Create("file.xml", New XmlReaderSettings())
  297.         Dim ds As New DataSet
  298.         ds.ReadXml(xmlFile)
  299.         Dim i As Integer
  300.         For i = 0 To ds.Tables(0).Rows.Count - 1
  301.             MsgBox(ds.Tables(0).Rows(i).Item(1))
  302.         Next
  303.     End Sub
  304. End Class
  305.  
  306. '-------------------------------------------------------------------------------------
  307. 'WYSZUKIWANIE
  308.  
  309.         Dim xmlFile As XmlReader
  310.         xmlFile = XmlReader.Create("Product.xml", New XmlReaderSettings())
  311.         Dim ds As New DataSet
  312.         Dim dv As DataView
  313.         ds.ReadXml(xmlFile)
  314.  
  315.         dv = New DataView(ds.Tables(0))
  316.         dv.Sort = "Product_Name"
  317.         Dim index As Integer = dv.Find(TextBox1.Text)
  318.  
  319.         If index = -1 Then
  320.             MsgBox("Item Not Found")
  321.         Else
  322.             MsgBox(dv(index)("Product_Name").ToString() & "  " & dv(index)("Product_Price").ToString())
  323.         End If
  324.  
  325.  
  326. Imports System.Xml
  327. Public Class Form1
  328.    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  329.        Dim xmlFile As XmlReader
  330.        xmlFile = XmlReader.Create("Product.xml", New XmlReaderSettings())
  331.        Dim ds As New DataSet
  332.        Dim dv As DataView
  333.        ds.ReadXml(xmlFile)
  334.        dv = New DataView(ds.Tables(0), "Product_price > = 3000", "Product_Name", DataViewRowState.CurrentRows)
  335.        dv.ToTable().WriteXml("Result.xml")
  336.        MsgBox("Done")
  337.    End Sub
  338. End Class
  339.  
  340.  
  341. '--------------------------------------------------------------------------------
  342. 'TWORZENIE PROGRAMU TV Z XML
  343. 'Create the XML Document;
  344. Dim xmld As XmlDocument
  345. xmld = New XmlDocument()
  346.  
  347. 'Load the XMLTV File;
  348. xmld.Load(Application.StartupPath & "\guide.xml")
  349.  
  350. 'Loop through the Programme Nodes;
  351. nodelist = xmld.SelectNodes("/tv/programme")
  352. For Each node In nodelist
  353.  
  354.     'Get the Programme Title;
  355.     Dim channel = node.Attributes.GetNamedItem("channel").Value
  356.     Dim starttime = node.Attributes.GetNamedItem("start").Value
  357.     Dim endtime = node.Attributes.GetNamedItem("stop").Value
  358.     Dim title = node.ChildNodes.Item(0).InnerText
  359.     Dim description = node.ChildNodes.Item(1).InnerText
  360.  
  361.     'Add the Channel Information to the Multi-Dimensional List;
  362.     Dim c As New Guide()
  363.     c.Channel = channel.ToString()
  364.     c.StartTime = starttime.ToString()
  365.     c.EndTime = endtime.ToString()
  366.     c.Programme = title.ToString()
  367.     c.Description = description.ToString()
  368.     GuideInfo.Add(c)
  369.  
  370. Next
  371.  
  372. '------------------------------------
  373.  
  374. 'Guide Information;
  375. Public Class Guide
  376.     Public Property Channel As String
  377.     Public Property StartTime As String
  378.     Public Property EndTime As String
  379.     Public Property Programme As String
  380.     Public Property Description As String
  381. End Class
  382. Public GuideInfo As New List(Of Guide)
  383.  
  384. '---------------------------------------
  385.  
  386.  
  387. 'For each Channel Node in the Guide, Keep Looping until we find the Channel the user selected;
  388. For Each c In GuideInfo
  389.  
  390.     'If we are on the Channel Node the user selected...;
  391.     If c.Channel.ToString = ChannelsBox.Text.ToString Then
  392.  
  393.         Try
  394.  
  395.             'Set the Current Time and Programme Start and End Times in Epoch;
  396.             Dim CurrentTime As String = (Date.Now.ToUniversalTime - New DateTime(1970, 1, 1)).TotalMilliseconds
  397.             Dim StartTimeEpoch As String = DateTimeOffset.ParseExact(c.StartTime.ToString, "yyyyMMddHHmmss zzz", New CultureInfo("en-UK")).ToUniversalTime.ToUnixTimeMilliseconds
  398.             Dim EndTimeEpoch As String = DateTimeOffset.ParseExact(c.EndTime.ToString, "yyyyMMddHHmmss zzz", New CultureInfo("en-UK")).ToUniversalTime.ToUnixTimeMilliseconds
  399.  
  400.             'If its the show thats playing right now;
  401.             If CurrentTime >= StartTimeEpoch And CurrentTime <= EndTimeEpoch Then
  402.  
  403.                 'Re-size the app to show the Current Programme Info Panel;
  404.                 MainButtonPanel.Size = New Size(640, 173)
  405.                 MinimumSize = New Size(656, 572)
  406.                 MaximumSize = New Size(656, 572)
  407.  
  408.                 'Create a Epoch Date to be able to Convert Epoch to DateTime;
  409.                 Dim EpochDate = New DateTime(1970, 1, 1)
  410.  
  411.                 'Get the Start Time formatted from Epoch to DateTime;
  412.                 Dim StartTime As String = EpochDate.AddMilliseconds(StartTimeEpoch.ToString).ToLocalTime.ToShortTimeString
  413.  
  414.                 'Get the End Time formatted from Epoch to DateTime;
  415.                 Dim EndTime As String = EpochDate.AddMilliseconds(EndTimeEpoch.ToString).ToLocalTime.ToShortTimeString
  416.  
  417.                 Console.WriteLine("Epoch: " + StartTimeEpoch)
  418.                 Console.WriteLine("Norm: " + StartTime)
  419.  
  420.                 'Get the Programme's Duration;
  421.                 Dim Duration As TimeSpan = EpochDate.AddMilliseconds(EndTimeEpoch.ToString).ToLocalTime - EpochDate.AddMilliseconds(StartTimeEpoch.ToString).ToLocalTime
  422.  
  423.                 'Get the Finishes In Time;
  424.                 Dim FinishesIn As TimeSpan = EpochDate.AddMilliseconds(EndTimeEpoch.ToString).ToLocalTime - EpochDate.AddMilliseconds(CurrentTime.ToString).ToLocalTime
  425.  
  426.                 'Set the Label to show what Program is on;
  427.                 OnNow.Text = c.Programme.ToString
  428.  
  429.                 'Set the Start - End Label to the Programmes Start and End Time;
  430.                 StartToEndTime.Text = StartTime + " - " + EndTime
  431.  
  432.                 'Set the Programme Finishing In label to the right time;
  433.                 FinishesInTime.Text = FinishesIn.ToString.Remove(FinishesIn.ToString.Length - 8).Remove(0, 3)
  434.  
  435.                 'Set the Programme Duration Label to the Programmes Duration but remove the Seconds section of the Time;
  436.                 DurationTime.Text = Duration.ToString.Remove(Duration.ToString.Length - 3)
  437.  
  438.             End If
  439.  
  440.         Catch ex As Exception
  441.  
  442.             MessageBox.Show(ex.ToString)
  443.  
  444.         End Try
  445.  
  446.     Else
  447.  
  448.         'Console.WriteLine(c.Channel.ToString)
  449.  
  450.     End If
  451.  
  452. Next
  453.  
  454. '-------------------------------------------------------------------------------
  455. For Each c In GuideInfo(ChannelsBox.Text.ToString)
  456.  
  457.     'Do The Code Previously Shown;
  458.  
  459. Next
  460.  
  461. '---------------------------
  462. 'Przenoszenie danych z XML do Bazy
  463. Imports System.Xml
  464. Imports System.Data.SqlClient
  465. Public Class Form1
  466.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  467.         Dim connetionString As String
  468.         Dim connection As SqlConnection
  469.         Dim command As SqlCommand
  470.         Dim adpter As New SqlDataAdapter
  471.         Dim ds As New DataSet
  472.         Dim xmlFile As XmlReader
  473.         Dim sql As String
  474.  
  475.         Dim product_ID As Integer
  476.         Dim Product_Name As String
  477.         Dim product_Price As Double
  478.  
  479.         connetionString = "Data Source=servername;Initial Catalog=databsename;User ID=username;Password=password"
  480.         connection = New SqlConnection(connetionString)
  481.  
  482.         xmlFile = XmlReader.Create("Product.xml", New XmlReaderSettings())
  483.         ds.ReadXml(xmlFile)
  484.         Dim i As Integer
  485.         connection.Open()
  486.         For i = 0 To ds.Tables(0).Rows.Count - 1
  487.             product_ID = Convert.ToInt32(ds.Tables(0).Rows(i).Item(0))
  488.             Product_Name = ds.Tables(0).Rows(i).Item(1)
  489.             product_Price = Convert.ToDouble(ds.Tables(0).Rows(i).Item(2))
  490.             sql = "insert into Product values(" & product_ID & ",'" & Product_Name & "'," & product_Price & ")"
  491.             command = New SqlCommand(sql, connection)
  492.             adpter.InsertCommand = command
  493.             adpter.InsertCommand.ExecuteNonQuery()
  494.         Next
  495.         connection.Close()
  496.     End Sub
  497. End Class
  498.  
  499.  
  500. '---------------------------------------------------------------------------------
  501. 'Pobranie danych z XML'a i dopisanie danych do innego pliku
  502.  
  503. Imports System.Xml
  504. Public Class Form1
  505.    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  506.       ' Set the caption bar text of the form.  
  507.       Me.Text = "tutorialspoint.com"
  508.    End Sub
  509.    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  510.       ListBox1.Items.Clear()
  511.       Dim xd As XmlDocument = New XmlDocument()
  512.       xd.Load("authors.xml")
  513.       Dim newAuthor As XmlElement = xd.CreateElement("author")
  514.         newAuthor.SetAttribute("code", "6")
  515.       Dim fn As XmlElement = xd.CreateElement("fname")
  516.       fn.InnerText = "Bikram"
  517.       newAuthor.AppendChild(fn)
  518.       Dim ln As XmlElement = xd.CreateElement("lname")
  519.       ln.InnerText = "Seth"
  520.       newAuthor.AppendChild(ln)
  521.       xd.DocumentElement.AppendChild(newAuthor)
  522.       Dim tr As XmlTextWriter = New XmlTextWriter("movies.xml", Nothing)
  523.       tr.Formatting = Formatting.Indented
  524.       xd.WriteContentTo(tr)
  525.       tr.Close()
  526.       Dim nl As XmlNodeList = xd.GetElementsByTagName("fname")
  527.       For Each node As XmlNode In nl
  528.           ListBox1.Items.Add(node.InnerText)
  529.       Next node
  530.    End Sub
  531. End Class
  532.  

    Leave a comment

     
    Visual verification
     

    Related books

    More InfoLearning Visual Basic .Net
    Learning Visual Basic .Net
    More InfoBeginning Visual Basic 2015
    Beginning Visual Basic 2015
    More InfoProgramming .NET Components, 2nd Edition
    Programming .NET Components, 2nd Edition
    More InfoPractical Database Programming with Visual Basic.NET
    Practical Database Programming with Visual Basic.NET
    More InfoVisual Basic .NET All-In-One Desk Reference For Dummies
    Visual Basic .NET All-In-One Desk Reference For Dummies
    More InfoMurach's ASP.NET 4.5 Web Programming with VB 2012 (Training & Reference)
    Murach's ASP.NET 4.5 Web Programming with VB 2012 (Training & Reference)
    More InfoVisual Basic .NET Programming
    Visual Basic .NET Programming
    More InfoDatabase Programming with Visual Basic .NET
    Database Programming with Visual Basic .NET