Thursday, June 9, 2011

save multiple record using xml formate in sql server

CREATE PROC dbo.as_sp_InsertContacts
(
@v_XML nvarchar(4000),
@v_UserId int
)
AS
BEGIN

SET NOCOUNT ON
DECLARE @idoc INT

EXEC sp_xml_preparedocument @idoc OUTPUT, @v_XML
INSERT INTO aS_tblMemberContacts(CONTACTEMAIL,CONTACTNAME,MEMBERID)

SELECT * FROM OPENXML (@idoc, '/ROOT/Contact',1)WITH (Email varchar(100), UName nvarchar(100),UID INT)
WHERE Email NOT IN
(
SELECT CONTACTEMAIL FROM aS_tblMemberContacts WHERE MEMBERID=@v_UserId
)
SET NOCOUNT OFF

END
--------------------

CREATE PROCEDURE aS_sp_SaveReferralContactList
(
@v_XML nvarchar(4000),
@v_UserId bigint
)
AS
BEGIN

DECLARE @idoc INT
DECLARE @ContactName VARCHAR(50)
Declare @EmailCount int
Declare @UpdateRowCount int
Declare @UserEarn int
set @UpdateRowCount=0
set @EmailCount=0
set @UserEarn=0

BEGIN TRANSACTION

BEGIN TRY

-- DECLARE @idoc INT

EXEC sp_xml_preparedocument @idoc OUTPUT, @v_XML

INSERT INTO as_tblReferContacts(ReferEmail,ReferContact,MemberID)
SELECT Email,UName, @v_UserId
FROM OPENXML (@idoc, '/ROOT/Contact',1)WITH (Email varchar(100), UName nvarchar(100),UID INT) xmlContacts
LEFT JOIN as_tblReferContacts RC ON RC.MEMBERID=@v_UserId AND RC.ReferEmail= xmlContacts.Email
LEFT OUTER JOIN
aS_tblMembers AS MD ON MD.AccountStatusId = 1 AND MD.EmailID = xmlContacts.Email LEFT OUTER JOIN
aS_tblAlternateEmails AS AE ON AE.EmailAddress = xmlContacts.Email AND AE.Verified = 1 LEFT OUTER JOIN
as_tblEmailSettings AS ES ON ES.MemberID = ISNULL(MD.MemberID, AE.MemberID) LEFT OUTER JOIN
aS_tblMembers AS M2 ON M2.MemberID = ISNULL(MD.MemberID, AE.MemberID)
left outer join aS_tblBlockedEmails as BE on BE.Emailid=xmlContacts.Email and BE.intactivestatus=2
WHERE RC.ReferID IS NULL AND M2.MemberID IS NULL

SET @EmailCount=@@ROWCOUNT

UPDATE RC SET RC.ReferDate = GETDATE()
FROM OPENXML (@idoc, '/ROOT/Contact',1)WITH (Email varchar(100), UName nvarchar(100),UID INT) xmlContacts
INNER JOIN as_tblReferContacts RC
ON RC.MEMBERID=@v_UserId AND RC.ReferEmail= xmlContacts.Email AND RC.ReferDate0)
BEGIN
insert into as_tblEarnasCredit (EarnasCredit,AsCreditTypeID,MemberID,EarnDate)values (@EmailCount,2,@v_UserId,getdate())
if not exists(select memberid from as_tblasCreditBalance where memberid=@v_UserId)
begin
insert into as_tblasCreditBalance(MemberID,EarnAsCredit) values (@v_UserId,@EmailCount)
End
else
begin
select @UserEarn=isnull(EarnAsCredit,0) from as_tblasCreditBalance where memberid=@v_UserId
update as_tblasCreditBalance set EarnAsCredit=@UserEarn+@EmailCount where memberid=@v_UserId
end

END
if(@UpdateRowCount>0)
BEGIN
insert into as_tblEarnasCredit (EarnasCredit,AsCreditTypeID,MemberID,EarnDate)values (@UpdateRowCount,2,@v_UserId,getdate())
select @UserEarn=isnull(EarnAsCredit,0) from as_tblasCreditBalance where memberid=@v_UserId
update as_tblasCreditBalance set EarnAsCredit=@UserEarn+@UpdateRowCount where memberid=@v_UserId

END


EXEC SP_XML_REMOVEDOCUMENT @idoc


COMMIT TRANSACTION

END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
END CATCH
END

Data Relation and bind data in inner,outer repeater Example

 private void GetEmailNotification(Int64 memberID)
        {
            try
            {
                dsMailNotification = objEmailNotifications.GetEmailNotification(memberID);
                String notificationSetting = String.Empty;
                if (dsMailNotification.Tables[2].Rows.Count > 0)
                {
                    notificationSetting = Convert.ToString(dsMailNotification.Tables[2].Rows[0]["NotificationSetting"]);
                }
                if (!notificationSetting.Equals(String.Empty))
                {
                    objNotificationList = objEmail.ReadNotificationSetting(notificationSetting);
                   
                }
// Example of data relation between dataset
                dsMailNotification.Relations.Add("NotificationGroupID", dsMailNotification.Tables[0].Columns["NotificationGroupID"], dsMailNotification.Tables[1].Columns["NotificationGroupID"]);
                rptEmailNotification.DataSource = dsMailNotification.Tables[0];
                rptEmailNotification.DataBind();
                dsMailNotification.Dispose();

            }
            catch (Exception ex)
            {
                _objError.WriteLog("Error on GetEmailNotification", ex.Message,ex.StackTrace);
            }
        }

 protected void rptEmailNotification_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            try
            {
                if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
                {
                    string groupName = Convert.ToString(DataBinder.Eval(e.Item.DataItem, "GroupName"));
                    HtmlContainerControl divhappen = (HtmlContainerControl)e.Item.FindControl("divHappens");
                     int groupId = Convert.ToInt32(DataBinder.Eval(e.Item.DataItem, "NotificationGroupID"));
                    if (groupName.ToLower().Equals("presentation"))
                    {
                        divhappen.Style.Add("display", "none");
                       
                   }
                    if (groupId == 4)
                    {
                        divGroup.Style.Add("display", "none");
                    }
                   // rptNotificationDetails is inner repeater
                    Repeater rptDetails = (Repeater)e.Item.FindControl("rptNotificationDetails");
                    DataView dv = ((DataRowView)e.Item.DataItem).CreateChildView("NotificationGroupID");
                    if (dv != null)
                    {
                        rptDetails.DataSource = dv;
                        rptDetails.DataBind();
                    }
                }
            }
            catch (Exception ex)
            {
                _objError.WriteLog("Error on rptEmailNotification_ItemDataBound",ex.Message,ex.StackTrace);
               
            }

        }

        protected void rptNotificationDetails_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            try
            {
                String[] disableNotificationId = DisableNotification.Split(',');
                if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
                {
                    CheckBox chkInstant = (CheckBox)e.Item.FindControl("ckhInstant");
                    Literal ltrInstant = (Literal)e.Item.FindControl("ltrInstant");
                    CheckBox chkDaily = (CheckBox)e.Item.FindControl("chkDaily");
                    Literal ltrDaily = (Literal)e.Item.FindControl("ltrDaily");
                    CheckBox chkWeekly = (CheckBox)e.Item.FindControl("chkWeekly");
                    Literal ltrWeekly = (Literal)e.Item.FindControl("ltrWeekly");
                    HtmlContainerControl divDescription = (HtmlContainerControl)e.Item.FindControl("pDescription");
                    DropDownList ddlEmailTrigger = (DropDownList)e.Item.FindControl("ddlEmailTrigger");
                    NotificationSetting notificationSetting = new NotificationSetting();
                    int mailNotificationID = Convert.ToInt32(DataBinder.Eval(e.Item.DataItem, "MailNotificationID"));                   
                    Int32 emailTriggerID;
                    foreach(string str in disableNotificationId)
                    {
                        if (str == Convert.ToString(mailNotificationID))
                        {
                            divDescription.Visible = false;
                        }
                    }
                    if (objNotificationList != null)
                    {
                        if (!objNotificationList.TryGetValue(mailNotificationID, out notificationSetting))
                        {
                            emailTriggerID = 0;
                            if (Convert.ToInt32(DataBinder.Eval(e.Item.DataItem, "IsInstant")) != 2)
                            {
                                SetNotificationOption(chkInstant, ltrInstant, 0);
                            }
                            else
                            {
                                SetNotificationOption(chkInstant, ltrInstant, 2);
                            }

                            if (Convert.ToInt32(DataBinder.Eval(e.Item.DataItem, "IsDailyDigest")) != 2)
                            {
                                SetNotificationOption(chkDaily, ltrDaily, 0);
                            }
                      
                            if (Convert.ToInt32(DataBinder.Eval(e.Item.DataItem, "IsWeeklyDigest")) != 2)
                            {
                                SetNotificationOption(chkWeekly, ltrWeekly, 0);
                            }
                          }
                         }
                    else
                    {
                        emailTriggerID = Convert.ToInt32(DataBinder.Eval(e.Item.DataItem, "EmailTriggerID"));
                        SetNotificationOption(chkInstant, ltrInstant, Convert.ToInt32(DataBinder.Eval(e.Item.DataItem, "IsInstant")));
                        SetNotificationOption(chkDaily, ltrDaily, Convert.ToInt32(DataBinder.Eval(e.Item.DataItem, "IsDailyDigest")));
                        SetNotificationOption(chkWeekly, ltrWeekly, Convert.ToInt32(DataBinder.Eval(e.Item.DataItem, "IsWeeklyDigest")));
                    }
                    BindEmailTriggerList(ddlEmailTrigger, mailNotificationID,  emailTriggerID, dsMailNotification.Tables[3]);

                   
                }
            }
            catch (Exception ex)
            {
                _objError.WriteLog("Error on rptNotificationDetails_ItemDataBound", ex.Message, ex.StackTrace);
            }
        }