【发布时间】:2017-12-17 04:57:36
【问题描述】:
当然,我用谷歌搜索了我的问题:“visual basic xml to sql 如何插入多行 XmlReader”。我什至将“许多”改为“多个”。
到目前为止,我只能将 first 条目添加到我的数据库中。 我很高兴能够使用 XmlReader,因为我听说它非常有效。 我也很高兴能够使用参数,因为无论如何我都无法正确连接(是的,我喜欢优雅地编码 - 我不在这里谈论我的衣服)。
我的 VB.Net 代码:
Imports System.Data.SqlClient
Imports System.Xml
Public Class Form1
Private Sub ButtonOK_Click(sender As Object, e As EventArgs) Handles ButtonOK.Click
Dim xmlFile As String
Dim connectionString As String
Dim connection As SqlConnection
Dim command As SqlCommand
Dim ds As New DataSet
Dim reader As XmlReader
Dim sqlStatement As String
'Tag names inside xml document, will have to be inserted into table
Dim company As Integer
Dim name As String
Dim streetaddress As String
Dim city As String
Dim status As Char
connectionString = "this connection string works"
xmlFile = "MyXMLFile.xml"
connection = New SqlConnection(connectionString)
reader = XmlReader.Create(xmlFile, New XmlReaderSettings())
ds.ReadXml(reader)
Dim doc As New XmlDocument()
doc.Load(xmlFile)
Dim nodelist As XmlNodeList = doc.SelectNodes(".//siteelement/site")
For Each node As XmlElement In nodelist
Dim i As Integer
For i = 0 To ds.Tables(0).Rows.Count - 1
company = Convert.ToInt32(ds.Tables(0).Rows(i).Item(0))
name = ds.Tables(0).Rows(i).Item(1)
streetaddress = ds.Tables(0).Rows(i).Item(2)
city = ds.Tables(0).Rows(i).Item(3)
status = ds.Tables(0).Rows(i).Item(4)
sqlStatement = "INSERT INTO [dbo].[SITE] ([COMPANY], [NAME], [STREETADDRESS], [CITY], [STATUS])" &
"VALUES (@COMPANY, @NAME, @STREETADDRESS, @CITY, @STATUS)"
command = New SqlCommand(sqlStatement, connection)
command.Parameters.AddWithValue("@COMPANY", company)
command.Parameters.AddWithValue("@NAME", name)
command.Parameters.AddWithValue("@STREETADDRESS", streetaddress)
command.Parameters.AddWithValue("@CITY", city)
command.Parameters.AddWithValue("@STATUS", status)
Try
connection.Open()
Dim rowsAffected As Integer = command.ExecuteNonQuery()
MessageBox.Show(rowsAffected & " entries were inserted into Site table")
'Release the resources
command.Dispose()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
'Execute the sql statement against the connection
command.ExecuteNonQuery()
Next
Next
connection.Close()
End Sub
End Class
我的 xml 文件是什么样子的:
<?xml version="1.0" encoding="UTF-8"?>
<siteelement>
<site>
<company>1000</company>
<name>STORE #2336</name>
<streetAddress>123 London Calling</streetAddress>
<city>London</city>
<status>I</status>
</site>
<site>
<company>1001</company>
<name>STORE #2332</name>
<streetAddress>123 City of New Orleans</streetAddress>
<city>New Orleans</city>
<status>A</status>
</site>
<site>
<company>1002</company>
<name>STORE #2333</name>
<streetAddress>123 Bla bla bla</streetAddress>
<city>Somewhere</city>
<status>A</status>
</site>
</siteelement>
问题:如何让我的读者阅读我所有的 xml 文档?我错过了什么?哪里不对?
任何帮助将不胜感激。请注意我是 Visual Basic 的新手(不到一周!),如果您认为我可以改进我的代码...
提前致谢。
【问题讨论】:
-
看起来这会引发异常——在命令被释放后,您再次调用
command.ExecuteNonQuery()(在内循环结束时)。我不知道是否还有其他问题,但请尝试删除该行并查看是否有帮助(您可能不应该在循环内打开连接)。您还应该查看Using语句以帮助清理资源。 -
你是对的,这是抛出异常。固定。