|
||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||
|
Announcements
Chapters
Services
Feature Zones
|
Note: This is an unedited contribution. If this article is inappropriate,
needs attention or copies someone else's work without reference then please
Report This Article
IntroductionThe article/code will help the people who require inserting multiple object or list of object same time with single database interaction. BackgroundWe always require thing like this, when you need to Insert list of object at the same time with single database operation. Here is the code which includes the same functionality by using feature Extension Method" of C# 3.0. Using the codeThis code contains the logic of creating XML by overriding public override string ToString()
{
return string.Format("<UserImage HashCode=\"{0}\" Id=\"{1}\" UserId=\"{2}\" OriginalName=\"{3}\" StorageName=\"{4}\" />",
this.GetHashCode(), this.Id, this.UserId, this.OriginalName, this.StorageName);
}
This method will generate the XML representation of the So now you have collection of List<UserImage> imageList = new List<UserImage>();
//Add some images
imageList.Add(new UserImage(1, 786, "Test1.jpg", @"C:\Temp\User_786_1.jpg"));
imageList.Add(new UserImage(2, 786, "Test2.jpg", @"C:\Temp\User_786_2.jpg"));
imageList.Add(new UserImage(3, 786, "Test3.jpg", @"C:\Temp\User_786_3.jpg"));
imageList.Add(new UserImage(4, 786, "Test4.jpg", @"C:\Temp\User_786_4.jpg"));
imageList.Add(new UserImage(5, 786, "Test5.jpg", @"C:\Temp\User_786_5.jpg"));
imageList.Add(new UserImage(6, 786, "Test6.jpg", @"C:\Temp\User_786_6.jpg"));
public static string ToXMLString(this List<UserImage> list)
{
StringBuilder sb = new StringBuilder();
sb.Append("<UserImages>");
foreach (UserImage image in list)
{
sb.Append (image.ToString());
}
sb.Append("</UserImages>");
return sb.ToString();
}
In the above extension method, we call so at the end you can have XML just like bellow <UserImages>
<UserImage HashCode="17798814" Id="1" UserId="786" OriginalName="Test1.jpg" StorageName="C:\Temp\User_786_1.jpg" />
<UserImage HashCode="38230786" Id="2" UserId="786" OriginalName="Test2.jpg" StorageName="C:\Temp\User_786_2.jpg" />
<UserImage HashCode="64649019" Id="3" UserId="786" OriginalName="Test3.jpg" StorageName="C:\Temp\User_786_3.jpg" />
<UserImage HashCode="15452120" Id="4" UserId="786" OriginalName="Test4.jpg" StorageName="C:\Temp\User_786_4.jpg" />
<UserImage HashCode="56059077" Id="5" UserId="786" OriginalName="Test5.jpg" StorageName="C:\Temp\User_786_5.jpg" />
<UserImage HashCode="36389945" Id="6" UserId="786" OriginalName="Test6.jpg" StorageName="C:\Temp\User_786_6.jpg" />
</UserImages>
Now Sql part, we need to pass the string to stored procedure and then in procedure we just need to select values form XML node and can directly get inserted to table. Here we go, INSERT INTO @UserImageTable
SELECT
UserImage.value ('@Id[1]', 'VARCHAR(10)') as Id,
UserImage.value ('@UserId[1]', 'VARCHAR(10)') as UserId,
UserImage.value ('@OriginalName[1]', 'VARCHAR(100)') as OriginalName,
UserImage.value ('@StorageName[1]', 'VARCHAR(100)') as StorageName
FROM
@UserImages.nodes('/UserImages/UserImage') v(UserImage)
The DECLARE @UserImageTable AS TABLE
(
Id BIGINT,
UserId BIGINT,
OriginalName VARCHAR(100),
StorageName VARCHAR(100)
)
Points of InterestThe good thing is Extension Methods which give us freedom to write extenstion of any given class, more over the XML a strong part of SQL Server 2005, however there is the limitation of XML datatype which you can find it here.
|
|||||||||||||||||||||||||||||||||||||||||||||||