GrpSMK Ответов: 3

Как вставить XML-данные в SQL server


У меня есть xml-файл,он имеет так много атрибутов, что мой вопрос заключается в том, как вставить массовые данные из xml-файла любого 5 атрибута в SQL server 2008.

Что я уже пробовал:

с фоновым кодом
protected void UploadXML(object sender, EventArgs e)
     {
         string fileName = Path.GetFileName(FileUpload1.PostedFile.FileName);
         string filePath = Server.MapPath("~/Uploads/") + fileName;
         FileUpload1.SaveAs(filePath);
         string xml = File.ReadAllText(filePath);
         string constr = ConfigurationManager.ConnectionStrings["dbConnection"].ConnectionString;
         using (SqlConnection con = new SqlConnection(constr))
         {
             using (SqlCommand cmd = new SqlCommand("InsertXML"))
             {
                 cmd.Connection = con;
                 cmd.CommandType = CommandType.StoredProcedure;
                 cmd.Parameters.AddWithValue("@xml", xml);
                 con.Open();
                 cmd.ExecuteNonQuery();
                 con.Close();
             }
         }


страница ASPX

  <div>
    <asp:FileUpload ID = "FileUpload1" runat = "server" /><br /><br />
<asp:Button ID="Button1" Text="Upload XML File" runat="server" OnClick="UploadXML" />
  
    </div>

Сохраненный процесс
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[InsertXML]
@xml XML
AS
BEGIN
      SET NOCOUNT ON;
 
      INSERT INTO xml
      SELECT
      FSFORMULADOC.value('@DOC_ID','INT') AS Id, --ATTRIBUTE
      FSFORMULADOC.value('(FUNCTION_CODE/text())[1]','VARCHAR(100)') AS Function1, --TAG
      FSDATAMATRIX.value('(TABLE_CODE/text())[1]','VARCHAR(100)') AS Table1 --TAG
      FROM
      @xml.nodes('/fsxml/report/object/FSFORMULADOC')AS TEMPTABLE(Customer)
END








Это мой пример xml-файла

<fsxml>
  <report>
    <SchemaList>
      <Schema>PDU_FORMULA_DEV_001.xsd</Schema>
      <Schema>PDU_ITEM_DEV_001.xsd</Schema>
    </SchemaList>
    <object>
<FSFORMULADOC>
        <DOC_ID>101015</DOC_ID>
        <FUNCTION_CODE>PRODUCT_SUMMARY</FUNCTION_CODE>
        <TEXT_DATA />
        <ATTCH_CNT>0</ATTCH_CNT>
        <ATTCH_TYPE>0</ATTCH_TYPE>
        <DOC_ORDER>1</DOC_ORDER>
        <DOC_DESCRIPTION>Product Summary</DOC_DESCRIPTION>
        <FORMULA_CODE>701399-ML81</FORMULA_CODE>
        <VERSION>01</VERSION>
        <SRVROW_ID>1</SRVROW_ID>
        <FUNCTION_CODE_LABEL>PRODUCT_SUMMARY</FUNCTION_CODE_LABEL>
      </FSFORMULADOC>
      <FSFORMULADOC>
  <FSDATAMATRIX>
        <TABLE_CODE>GRADING_REQUIREMENTS</TABLE_CODE>
        <SYMBOL>FORMULA</SYMBOL>
        <VIEW_ID>0</VIEW_ID>
        <DESCRIPTION>Grading Requirements</DESCRIPTION>
        <ROW_ADD_IND>1</ROW_ADD_IND>
        <OWNER_CODE>FSI</OWNER_CODE>
        <GROUP_CODE>ADMIN</GROUP_CODE>
        <OWNER_SECURITY>15</OWNER_SECURITY>
        <GROUP_SECURITY>15</GROUP_SECURITY>
        <ROLE_SECURITY>15</ROLE_SECURITY>
        <DB_TABLE_NAME>FORMULA0</DB_TABLE_NAME>
        <SORT_ORDER>LINE_ID ASC</SORT_ORDER>
      </FSDATAMATRIX>
 <FSFORMULAINGR>
          <FORMULA_ID>19337</FORMULA_ID>
          <LINE_TYPE>0</LINE_TYPE>
          <LINE_ID>5</LINE_ID>
          <ITEM_CODE>925318</ITEM_CODE>
          <QUANTITY>2</QUANTITY>
          <UOM_CODE>EA</UOM_CODE>
          <ITEM_FORMULA_ID>0</ITEM_FORMULA_ID>
          <LINE_BREAK_CODE />
          <MATERIAL_PCT>0</MATERIAL_PCT>
          <SCALE_IND>0</SCALE_IND>
          <SUBFORMULA_IND>0</SUBFORMULA_IND>
          <RATIO_LOCK_IND>0</RATIO_LOCK_IND>
          <RELQTY_IND>0</RELQTY_IND>
          <RELQTY_PCT>0</RELQTY_PCT>
          <DOC_ID>0</DOC_ID>
          <SECTION_TYPE>0</SECTION_TYPE>
          <ADJUST_IND>0</ADJUST_IND>
          <DESCRIPTION>BOX BLISS END 8-9/16 IN X 25-1/4 IN</DESCRIPTION>
          <COMPONENT_IND>2</COMPONENT_IND>
          <CAS />
          <COMM_CODE />
          <CLASS>PACKAGING_COMPONENT</CLASS>
          <ALIAS_CODE1 />
          <ALIAS_CODE2 />
          <ALIAS_CODE3 />
          <ALIAS_CODE4 />
          <ALIAS_CODE5 />
          <ALIAS_CODE6 />
          <ALIAS_CODE7 />
          <ALIAS_CODE8 />
          <STATUS>300</STATUS>
          <SRVROW_ID>5</SRVROW_ID>
          <SCALE_IND_LABEL>Linear</SCALE_IND_LABEL>
          <RELQTY_IND_LABEL>No</RELQTY_IND_LABEL>
          <SECTION_TYPE_LABEL>None</SECTION_TYPE_LABEL>
          <ADJUST_IND_LABEL>No</ADJUST_IND_LABEL>
          <STATUS_LABEL>Approved</STATUS_LABEL>
        </FSFORMULAINGR>

Graeme_Grant

Что вы пробовали до сих пор?

GrpSMK

да, создана загрузка файла и хранимая процедура для вставки данных, но отображается ошибка

Graeme_Grant

В чем же ошибка?

GrpSMK

Что такое корневой узел моего xml-файла?

Graeme_Grant

<fsxml>
Это был вопрос с подвохом???

ZurdoDev

Вы хотите, чтобы все xml-файлы были помещены в одно поле таблицы? Я не знаю, в чем именно вам нужна помощь.

Graeme_Grant

глядя на его историю, Программирование по Q& A...

GrpSMK

нет, из xml-файла нам нужно сохранить данные в sql server(bulk insert)

ZurdoDev

Ладно, все просто.
Вставить в таблица1 (поле1)
Значения (@xml)

Где ты застрял?

GrpSMK

да, создана загрузка файла и хранимая процедура для вставки данных, но отображается ошибка

Graeme_Grant

Пожалуйста, разместите свой код, нажав на кнопку Улучшить вопрос и объясните, что вы пробовали и где застряли.

ZurdoDev

Теперь это нечто совершенно иное, чем то, что вы опубликовали. Вы очень затрудняете себе помощь.

GrpSMK

проверьте сейчас я обновил свой код

ZurdoDev

Но вы не объяснили, что вам нужно. Вы говорите: "любые 5 атрибутов." Хорошо, напишите код, чтобы выбрать нужные вам 5, а затем вставьте их.

GrpSMK

на приведенном ниже примере кода см. В разделе XML-узлов,проверить мой XML в ответ сказать мне, как установить XML-узла

Вставить в CustomerDetails
ВЫБИРАТЬ
Поддержки.значение('@ИД','ИНТ') как id, атрибут --
Поддержки.значение('(название/текст())[1]','типа varchar(100)'), как название, теги
Поддержки.значение('(страна/текст())[1]','типа varchar(100)') как страны-теге
ОТ
@xml. nodes ('/Customers/Customer') как TEMPTABLE(Customer)

3 Ответов

Рейтинг:
2

GrpSMK

можете ли вы сказать, что является корневым узлом моего xml-файла?

Рейтинг:
2

@rpit Trivedi

Попробуйте преобразовать строковую переменную xml в XmlDocument, а затем передать этот xml-объект в Sql-запрос в качестве параметра.

protected void UploadXML(object sender, EventArgs e)
        {
            string fileName = Path.GetFileName(FileUpload1.PostedFile.FileName);
            string filePath = Server.MapPath("~/Uploads/") + fileName;
            FileUpload1.SaveAs(filePath);
            string xml = File.ReadAllText(filePath);

            XmlDocument xd = new XmlDocument();
            xd.LoadXml(xml);

            string constr = ConfigurationManager.ConnectionStrings["dbConnection"].ConnectionString;
            using (SqlConnection con = new SqlConnection(constr))
            {
                using (SqlCommand cmd = new SqlCommand("InsertXML"))
                {
                    cmd.Connection = con;
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Parameters.AddWithValue("@xml", xd);
                    con.Open();
                    cmd.ExecuteNonQuery();
                    con.Close();
                }
            }


Это может помочь!


CHill60

Вы действительно пробовали это?

Рейтинг:
1