Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 不在表中存储数据的存储过程_Sql_Sql Server_Xml_Vb.net_Stored Procedures - Fatal编程技术网

Sql 不在表中存储数据的存储过程

Sql 不在表中存储数据的存储过程,sql,sql-server,xml,vb.net,stored-procedures,Sql,Sql Server,Xml,Vb.net,Stored Procedures,我的问题是,在执行存储过程时,XML数据没有保存在表中。我没有收到任何错误代码:(( 我的xml文件: 如果您在阅读下面的“我的xml文件”时遇到问题,请单击联机查看(更容易理解) 我的vb.net代码隐藏在asp.net中: Imports System.IO Imports System.Data Imports System.Configuration Imports System.Data.SqlClient Partial Class UploadXml Inherits

我的问题是,在执行存储过程时,XML数据没有保存在表中。我没有收到任何错误代码:((

我的xml文件:

如果您在阅读下面的“我的xml文件”时遇到问题,请单击联机查看(更容易理解)

我的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.CommandTimeout = 120
            cmd.ExecuteNonQuery()
            con.Close()
        End Using
    End Using
End Sub

End Class
我的html标记:

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="UploadXml.aspx.vb" Inherits="UploadXml" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>

</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:FileUpload ID = "FileUpload1" runat = "server" />
<asp:Button ID="btn_upload" Text="Upload XML" runat="server"  />

    </div>
    </form>
</body>
</html>

调试
SELECT
语句时,很明显,最后两个
交叉应用
语句不会返回任何数据:

CROSS APPLY 
    TEMPTABLE.quakedetails.nodes('origin/description/text') AS plac(placee)
CROSS APPLY 
    TEMPTABLE.quakedetails.nodes('origin/description/type') AS typ(typo)
因此,检查您的XML—不知何故,路径
origin/description
似乎不存在

如果检查XML,您将看到
节点直接位于
节点下,而不是
节点下,因此请使用以下方法:

CROSS APPLY 
    TEMPTABLE.quakedetails.nodes('description/text') AS plac(placee)
CROSS APPLY 
    TEMPTABLE.quakedetails.nodes('description/type') AS typ(typo)
然后,您的查询就可以工作了

更新:您可以通过对
.nodes()
函数不执行太多的
交叉应用
调用来优化查询-将自己限制为仅使用
节点,然后使用XPath表达式获取该节点内的各个位和片段-尝试此查询:

; WITH XMLNAMESPACES ('http://quakeml.org/xmlns/quakeml/1.2' as q,
                      default 'http://quakeml.org/xmlns/bed/1.2')
 SELECT
     Times = XOrigin.value('(time/value)[1]', 'varchar(100)'),
     Latitude = XOrigin.value('(latitude/value)[1]', 'numeric(18,6)'),
     Longitude = XOrigin.value('(longitude/value)[1]', 'numeric(18,6)'),
     Depth = XOrigin.value('(depth/value)[1]', 'numeric(18,6)'),
     Magnitude = XEvent.value('(magnitude/value)[1]', 'numeric(18,6)'),
     Mag_Type = XEvent.value('(magnitude/type/value)[1]', 'varchar(100)'),
     Place = XEvent.value('(description/text)[1]', 'varchar(100)'),
     [Type] = XEvent.value('(description/type)[1]', 'varchar(100)')
 FROM
        @xml.nodes('/q:quakeml/eventParameters/event') as XT1(XEvent)
 CROSS APPLY
        XEvent.nodes('origin') AS XT2(XOrigin)

这是
选择
唯一-运行速度更快吗?

@marc_s,我需要做什么更改?输入数据需要60秒,是我可以用来减少6秒的代码吗?当运行更新的代码时,大小和mag_类型不存储在数据库中,它不起作用,我想我使用了我之前发布的代码
CROSS APPLY 
    TEMPTABLE.quakedetails.nodes('description/text') AS plac(placee)
CROSS APPLY 
    TEMPTABLE.quakedetails.nodes('description/type') AS typ(typo)
; WITH XMLNAMESPACES ('http://quakeml.org/xmlns/quakeml/1.2' as q,
                      default 'http://quakeml.org/xmlns/bed/1.2')
 SELECT
     Times = XOrigin.value('(time/value)[1]', 'varchar(100)'),
     Latitude = XOrigin.value('(latitude/value)[1]', 'numeric(18,6)'),
     Longitude = XOrigin.value('(longitude/value)[1]', 'numeric(18,6)'),
     Depth = XOrigin.value('(depth/value)[1]', 'numeric(18,6)'),
     Magnitude = XEvent.value('(magnitude/value)[1]', 'numeric(18,6)'),
     Mag_Type = XEvent.value('(magnitude/type/value)[1]', 'varchar(100)'),
     Place = XEvent.value('(description/text)[1]', 'varchar(100)'),
     [Type] = XEvent.value('(description/type)[1]', 'varchar(100)')
 FROM
        @xml.nodes('/q:quakeml/eventParameters/event') as XT1(XEvent)
 CROSS APPLY
        XEvent.nodes('origin') AS XT2(XOrigin)