2015-04-17 4 views
1

asp.net, vb.net. Цель состоит в том, чтобы скопировать данные XML в таблицу (customerDetail), но когда я выполняю хранимую процедуру, данные XML не копируются в таблицу, и я не получаю никаких ошибок.ошибка пространства имен в процедуре хранения sql

мой файл XML:

<?xml version="1.0" standalone="yes"?> 
<q:Customers xmlns="http://quakeml.org/xmlns/bed/1.2" xmlns:catalog="http://anss.org/xmlns/catalog/0.1" xmlns:q="http://quakeml.org/xmlns/quakeml/1.2"> 
    <Customer Id ="1"> 
    <Name>John Hammond</Name> 
    <Country>United States</Country> 
    </Customer> 
    <Customer Id = "2"> 
    <Name>Mudassar Khan</Name> 
    <Country>India</Country> 
    </Customer> 
    <Customer Id ="3"> 
    <Name>Suzanne Mathews</Name> 
    <Country>France</Country> 
    </Customer> 
    <Customer Id ="4"> 
    <Name>Robert Schidner</Name> 
    <Country>Russia</Country> 
    </Customer> 
</q:Customers> 

моя хранимая процедура:

ALTER PROCEDURE [dbo].[InsertXML] 
@xml XML 
AS 
BEGIN 

;WITH XMLNAMESPACES ('http://quakeml.org/xmlns/quakeml/1.2' as q) 
    INSERT INTO CustomerDetails 
    SELECT 
    Customer.value('@Id','INT') AS CustomerId, --ATTRIBUTE 
    Customer.value('(Name/text())[1]','VARCHAR(100)') AS Names, --TAG 
    Customer.value('(Country/text())[1]','VARCHAR(100)') AS Country --TAG 
    FROM 
    @xml.nodes('//q:Customers/Customer') as TEMPTABLE(Customer) 
    END 

мой vb.net код позади в asp.net

Imports System.IO 
Imports System.Data 
Imports System.Configuration 
Imports System.Data.SqlClient 

Partial Class UploadXml 
Inherits System.Web.UI.Page 

Protected Sub UploadXML(ByVal sender As Object, ByVal e As System.EventArgs)  Handles btn_upload.Click 
    Dim fileName As String =  Path.GetFileName(FileUpload1.PostedFile.FileName) 
    Dim filePath As String = Server.MapPath("~/Uploads/") & fileName 
    FileUpload1.SaveAs(filePath) 
    Dim xml As String = File.ReadAllText(filePath) 
    Dim constr As String = ConfigurationManager.ConnectionStrings("constr").ConnectionString 
    Using con As New SqlConnection(constr) 
     Using cmd As New SqlCommand("InsertXML") 
      cmd.Connection = con 
      cmd.CommandType = CommandType.StoredProcedure 
      cmd.Parameters.AddWithValue("@xml", xml) 
      con.Open() 
      cmd.ExecuteNonQuery() 
      con.Close() 
     End Using 
    End Using 
    End Sub 
    End Class 

ответ

0

Клиент принадлежит к пространству имен по умолчанию http://quakeml.org/xmlns/bed/1.2.

Попробуйте это:

WITH XMLNAMESPACES ('http://quakeml.org/xmlns/quakeml/1.2' as q, 
        default 'http://quakeml.org/xmlns/bed/1.2') 
SELECT 
    Customer.value('@Id','INT') AS CustomerId, --ATTRIBUTE 
    Customer.value('(Name/text())[1]','VARCHAR(100)') AS Names, --TAG 
    Customer.value('(Country/text())[1]','VARCHAR(100)') AS Country --TAG 
    FROM 
    @xml.nodes('/q:Customers/Customer') as TEMPTABLE(Customer); 
+0

прохладный человек :), это работает огромная, но как вы думаете, я могу использовать этот метод для хранения следующих XML в таблице базы данных. xml: http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_hour.quakeml –

+0

@nadia Конечно. Я не понимаю, почему это не должно работать. –

+0

Можете ли вы проверить мое новое сообщение: http: //stackoverflow.com/questions/29731422/asp-net-repeater-eval-not-reading-value-from-table-containong-200-records –

Смежные вопросы