Asp.net 将XML传递到SQL Server中的存储过程

Asp.net 将XML传递到SQL Server中的存储过程,asp.net,xml,sql-server-2008,c#-4.0,stored-procedures,Asp.net,Xml,Sql Server 2008,C# 4.0,Stored Procedures,我将xml传递给一个存储过程,它正在编译,但没有插入到数据库中的行 我的代码 foreach (int item in objDirectory.PhotoId) { //roots = roots + "<row DirectoryId='"+objDirectory.DirectoryId+"'PhotoId='" +item+"'CreatedBy='"+"Admin"+"'ModifiedBy='"+"Admin"+"'/>"; roots = roots + "

我将xml传递给一个存储过程,它正在编译,但没有插入到数据库中的行

我的代码

foreach (int item in objDirectory.PhotoId)
{
   //roots = roots + "<row DirectoryId='"+objDirectory.DirectoryId+"'PhotoId='" +item+"'CreatedBy='"+"Admin"+"'ModifiedBy='"+"Admin"+"'/>";
   roots = roots + "<row DirectoryId= '" + objDirectory.DirectoryId + "' PhotoId='" + item + "' CreatedBy ='" + "Admin" + "' ModifiedBy ='" + "Admin" + "'/>";
}
PhotoIds = string.Format(PhotoIds, roots);
objDirectory.SavePhotoId(PhotoIds);
存储过程:

CREATE Procedure [dbo].[InsertUpdatePhotIdInAlbum]
   @PhotoID xml=null
As
Begin
   set nocount on;

   if @PhotoID IS NULL
   Begin
       Return;
   End

   Declare @PhotoAlbumDetail TABLE (AlbumID int, PhotoId int, CreatedBy varchar(50), 
                                    ModifiedBy varchar(50))

   insert into @PhotoAlbumDetail(AlbumID, PhotoID, CreatedBy, ModifiedBy)
     select
         t.c.value('./@DirectoryId', 'int') as AlbumID,
         t.c.value('./@PhotoId', 'int') as PhotoID,
         t.c.value('./@CreatedBy', 'varchar(50)') as CreatedBy,
         t.c.value('./@ModifiedBy', 'varchar(50)') as ModifiedBy
     from 
         @PhotoID.nodes('/root/row') t(c);

   INSERT INTO [dbo].[tbl_PhotoAlbumDetail](AlbumID, PhotoId, CreatedBy, ModifiedBy)
      SELECT  
         p.AlbumID, p.PhotoId, p.CreatedBy, p.ModifiedBy 
      FROM 
         @PhotoAlbumDetail p  
End

我们需要看到您传入的示例XML!请不要将代码示例或示例数据放入注释中-因为您无法对其进行格式化,所以读取它非常困难。。。。取而代之的是:通过编辑你的问题来更新它,以提供额外的信息!谢谢。对我来说很好。。。。我发现XML结构的名称
@PhotoID
非常糟糕(
ID
总是意味着一个标识符,通常是一个数字-使用其他东西),我不明白为什么要首先将从XML提取的行插入到表变量中,然后才在第二步插入到实际的表中。。。。。。。但是代码对我来说似乎很好。
CREATE Procedure [dbo].[InsertUpdatePhotIdInAlbum]
   @PhotoID xml=null
As
Begin
   set nocount on;

   if @PhotoID IS NULL
   Begin
       Return;
   End

   Declare @PhotoAlbumDetail TABLE (AlbumID int, PhotoId int, CreatedBy varchar(50), 
                                    ModifiedBy varchar(50))

   insert into @PhotoAlbumDetail(AlbumID, PhotoID, CreatedBy, ModifiedBy)
     select
         t.c.value('./@DirectoryId', 'int') as AlbumID,
         t.c.value('./@PhotoId', 'int') as PhotoID,
         t.c.value('./@CreatedBy', 'varchar(50)') as CreatedBy,
         t.c.value('./@ModifiedBy', 'varchar(50)') as ModifiedBy
     from 
         @PhotoID.nodes('/root/row') t(c);

   INSERT INTO [dbo].[tbl_PhotoAlbumDetail](AlbumID, PhotoId, CreatedBy, ModifiedBy)
      SELECT  
         p.AlbumID, p.PhotoId, p.CreatedBy, p.ModifiedBy 
      FROM 
         @PhotoAlbumDetail p  
End