简体   繁体   English

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

[英]Getting data from xml and inserting into existing table using stored procedure and c#

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;
    }
}

This is my BAL code, I have xmldata in my vs2010 in my folder I want to insert the data in that and after that the xml data should insert using stored proc, below is my DAL 这是我的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
        {
        }


}

And my stored proc is below ALTER PROCEDURE [dbo].[SP_PlantcontactUpdate] @PlantAreaID int, @Doc XML 而且我存储的过程在ALTER PROCEDURE [dbo]下。[SP_PlantcontactUpdate] @PlantAreaID int,@ 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

You are trying to operate WriteXml for object dt (which is an empty object : DataTable dt = new DataTable() ). 您正在尝试为对象dt(这是一个空对象: DataTable dt = new DataTable() )操作WriteXml。

You need to write 你需要写

PlantContacts.WriteXml("filepath");

Clarify if the requirement is different from my understanding 明确要求是否与我的理解不同

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 使用C#将xml数据插入数据库表时出错 - Getting error for inserting xml data into database table using C# 在 C# 中通过存储过程向表插入数据时出错 - Getting Error While Inserting Data to Table through Stored Procedure in C# 仅当xml数据从C#传递到存储过程时,才在存储过程中使用Delete table查询 - Use Delete table query in stored procedure only when xml data is passed from C# to stored procedure 使用C#通过存储过程将数据插入Oracle - Inserting data into Oracle by Stored Procedure with C# 将XML数据传递给存储过程并从中获取返回值c#? - Passing XML data to a stored procedure and getting return value from it c#? 在C#中从存储过程插入XML - Insert XML from Stored Procedure in C# 如何使用c#中的存储过程从网格中的两个表中获取数据 - how to get data from two table in the grid by using stored procedure in c# 使用带有存储过程的 C# 从 sql 数据库中检索数据 - retrieving data from sql database using C# with stored procedure C# - 使用存储过程插入多行 - C# - Inserting multiple rows using a stored procedure 使用存储过程(SQL + C#)中的第一个数据,将数据插入一个表,然后将多行插入另一个表 - Inserting data into one table then multiple rows into another using data from the first using stored procedures (SQL + C#)
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM