Asp.net 将XML传递到SQL Server中的存储过程
我将xml传递给一个存储过程,它正在编译,但没有插入到数据库中的行 我的代码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 + "
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