从xml获取数据并使用存储过程和c#插入现有表

Posted

技术标签:

【中文标题】从xml获取数据并使用存储过程和c#插入现有表【英文标题】:Getting data from xml and inserting into existing table using stored procedure and c# 【发布时间】:2014-03-14 17:04:39 【问题描述】:
public int UpdatePlantContacts(int PlantID, List<string> PlantContacts)

    int i = 0;
    DataTable dt = new DataTable("PlantAreaContact");
    dt.Columns.Add("PlantAreaID",System.Type.GetType("System.Int"));
    dt.Columns.Add("PlantAreaContact", System.Type.GetType("System.String"));
    dt.Columns.Add("IsAreaHead", Type.GetType("System.Boolean"));
    dt.Columns.Add("AreaEmailID", Type.GetType("System.String"));
    dt.Columns.Add("LoginPassword", Type.GetType("System.String"));
    dt.Columns.Add("SystemPermission", Type.GetType("System.String"));
    foreach (DataRow dr in dt.Rows )
    
        DataRow newRow = dt.NewRow();
        dt.Rows.Add("~/XmlData/PlantAreaContacts");
    
    StringWriter XMLWriter = new StringWriter();
    dt.WriteXml(XMLWriter);
    System.Xml.Linq.XElement XMLUncertanity = System.Xml.Linq.XElement.Parse(XMLWriter.ToString());
    try
    
        i = plcon.UpdatePlantContacts(PlantID, dt);
    
    catch
    
        throw new System.NotImplementedException();
    
    if (i <= 0)
    
        return 0;
    
    else
    
        return i;
    

这是我的 BAL 代码,我的文件夹中的 vs2010 中有 xmldata 我想在其中插入数据,之后应该使用存储的 proc 插入 xml 数据,下面是我的 DAL

   public int UpdatePlantContacts(int PlantID, DataTable PlantContacts)
 
    try
    
        int result = -1;
            sqlcmd = fnProcedure("sp_UpdatePlantAreaContacts");
            SqlParameter par1 = sqlcmd.Parameters.Add("@PlantAreaID", SqlDbType.Int);
            par1.Value = PlantID;
            SqlParameter par2 = sqlcmd.Parameters.Add("@EmployeeID", SqlDbType.Int);
            par2.Value = 1015;
            //SqlParameter par3 = sqlcmd.Parameters.Add("@FilePath", SqlDbType.VarChar);
            //par3.Value = "E:/QONE/P218/ENG/PlantAreaContactsXML.xml";
            SqlParameter par4 = sqlcmd.Parameters.Add("@Return", SqlDbType.Int);
            par4.Direction = ParameterDirection.Output;
            try
            
                fnOpen();
                sqlcmd.ExecuteNonQuery();
                result = Convert.ToInt32(sqlcmd.Parameters["@Return"].Value);
                fnClose();
            
            catch (Exception)
            
                fnClose();
                result = -1; ;
            
            return result;
            //Conn.Close();
            //Conn.Dispose();
        
        catch (Exception Ex)
        
            CreateErrorLog Err = new CreateErrorLog();
            Err.ErrorLog(HttpContext.Current.Server.MapPath("Logs/ErrorLog"), Ex.Message);
            throw new System.NotImplementedException();
        
        finally
        
        



我的存储过程在下面 更改程序 [dbo].[SP_PlantcontactUpdate] @PlantAreaID 整数, @Doc XML

      AS
     BEGIN
IF OBJECT_ID('tempdb..##temp') IS NOT NULL
   DROP TABLE ##temp

   select *
   into ##temp from  dbo.PlantAreaContact  where  PlantAreaID= @PlantAreaID
   begin try
   delete from dbo.PlantAreaContact where  PlantAreaID= @PlantAreaID

   DECLARE @idoc int 

   EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
  -- Execute a SELECT statement that uses the OPENXML rowset provider.
  insert into dbo.PlantAreaContact 
   SELECT   @PlantAreaID, *
    FROM       OPENXML (@idoc, '/DocumentElement/PlantAreaContacts',2)
        WITH (PlantAreaContact varchar(50),IsAreaHead int,AreaEmailID varchar(50),
        AreaMobileNumber varchar(25),LoginPassword varbinary(10),SystemPermission  varchar(25))

 end try   

  begin catch

delete from dbo.PlantAreaContact where  PlantAreaID= @PlantAreaID
insert into dbo.PlantAreaContact  select * from ##temp
drop table ##temp

RAISERROR ('Failed PlantAreaContact',16,1);
 end catch



END

【问题讨论】:

【参考方案1】:

您正在尝试为对象 dt 操作 WriteXml(这是一个空对象:DataTable dt = new DataTable())。

你需要写

PlantContacts.WriteXml("filepath");

澄清要求是否与我的理解不同

【讨论】:

以上是关于从xml获取数据并使用存储过程和c#插入现有表的主要内容,如果未能解决你的问题,请参考以下文章

如何在另一个插入存储过程期间调用一个插入存储过程并获取其返回的ID?

使用存储过程(SQL + C#)将数据插入一个表,然后将多行插入另一个表

请问如何从数据库中读取一个存储过程并把查询结果生成一个xml文件(c#)

如何将存储过程的结果返回到用于插入记录的选择语句

C# Web API 使用 Dapper 使用存储过程插入数据 - 无法获取插入的记录 ID

存储过程中的XML节点加密