Click here to Skip to main content
15,894,249 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Hi Everyone,
I have the Stored Procedure as follows:
I want to perform three condition in my one stored procedure.

First Condition:Insert the New Record in Filelog Table

Second Condition:If Record is already exits in Filelog Table with same FileDate,FileType,CircleId and processed is 1 then return zero.

Third Condition:If CircleId is greater than equal to 14 then don't allowed to save the Record.

From these Three condition, my First condition and second condition is working .Third Condition is not working.Please Guide Me For the Same.
My Stored Procedure is as follows:

ALTER PROCEDURE [dbo].[K2_INSERTFILELOG] 
@FILENAME VARCHAR(150),
@FILEPATH VARCHAR(MAX),
@FILETYPE int,
@FILEDATE datetime,
@CIRCLEID INT,
@TOTALROWS int,
@SUCCESSCOUNT int,
@FAILURECOUNT int,
@PROCESSED bit,
@ERROR varchar(MAX),
@VENDORID int,
@CREATEDBY INT = 1,
@CREATEDON DATETIME,
@DELETED BIT=0,
@FILELOGID bigINT OUT
AS
BEGIN
declare @Count int
select @Count = count(*) from K2FILELOG where FILETYPE = @FILETYPE and
                                              FILEDATE = @FILEDATE and
                                              CIRCLEID = @CIRCLEID and
                                              Processed = 1   
IF (@Count = 1)
BEGIN
set @FILELOGID = -1
return;
END
ELSE
BEGIN
INSERT INTO K2FILELOG
	   (FILEPATH, [FILENAME],FILETYPE,FILEDATE,CIRCLEID,TOTALROWS,SUCCESSCOUNT,FAILURECOUNT,PROCESSED,ERROR,VENDORID,CREATEDBY, CREATEDON, DELETED)
values (@FILEPATH ,@FILENAME,@FILETYPE,@FILEDATE,@CIRCLEID,@TOTALROWS,@SUCCESSCOUNT,@FAILURECOUNT,@PROCESSED,@ERROR ,@VENDORID,@CREATEDBY,@CREATEDON,@DELETED);
set @FILELOGID =@@identity
END

-- Third Condition

IF
@CIRCLEID >= 14 and
@PROCESSED = 1

BEGIN
SET @FILELOGID = (SELECT ID FROM  K2FILELOG WITH (NOLOCK))
RETURN @FILELOGID
END

ELSE
BEGIN
	INSERT INTO K2FILELOG
	   (FILEPATH, [FILENAME],FILETYPE,FILEDATE,CIRCLEID,TOTALROWS,SUCCESSCOUNT,FAILURECOUNT,PROCESSED,ERROR,VENDORID,CREATEDBY, CREATEDON, DELETED)
values (@FILEPATH ,@FILENAME,@FILETYPE,@FILEDATE,@CIRCLEID,@TOTALROWS,@SUCCESSCOUNT,@FAILURECOUNT,@PROCESSED,@ERROR ,@VENDORID,@CREATEDBY,@CREATEDON,@DELETED);
 set @FILELOGID = @@identity;
END

END

In DataManager class I have Written the Code AS follows :
C#
public int AddFileLogRecords(IEntityBase entityBase)
        {
            int rowsAffected = 0;
            try
            {
                Logger.Write("Inside Kaizen2GDataManager.AddFileLogRecords()", LogType.Information);
                IFileLog fileLog = entityBase as IFileLog;
                /*if (fileLog.CircleId >= 14)
                {
                    //// not to save the Record
                }
                else
                {*/
               CommonDataAccess.CreateStoredProcCommandWrapper(KaizenConstants.SPK2INSERTFILELOG);
                //// }
                CommonDataAccess.AddInParameter(KaizenConstants.FILEPATH, DbType.String, fileLog.FilePath);
                CommonDataAccess.AddInParameter(KaizenConstants.FILENAME, DbType.String, fileLog.FileName);
                CommonDataAccess.AddInParameter(KaizenConstants.FILETYPE, DbType.Int32, fileLog.FileType);
                CommonDataAccess.AddInParameter(KaizenConstants.FILEDATE, DbType.DateTime, fileLog.FileDate);
                CommonDataAccess.AddInParameter(KaizenConstants.CIRCLEID, DbType.Int32, fileLog.CircleId);
                CommonDataAccess.AddInParameter(KaizenConstants.TOTALROWS, DbType.Int32, fileLog.TotalRows);
                CommonDataAccess.AddInParameter(KaizenConstants.SUCCESSCOUNT, DbType.Int32, fileLog.SuccessCount);
                CommonDataAccess.AddInParameter(KaizenConstants.FAILURECOUNT, DbType.Int32, fileLog.FailureCount);
                CommonDataAccess.AddInParameter(KaizenConstants.ERROR, DbType.String, fileLog.ErrorMessage);
                CommonDataAccess.AddInParameter(KaizenConstants.PROCESSED, DbType.Boolean, fileLog.Processed);
                CommonDataAccess.AddInParameter(KaizenConstants.VENDORID, DbType.Int32, fileLog.VendorId);
                CommonDataAccess.AddInParameter(KaizenConstants.CREATEDBY, DbType.Int32, 1);
                CommonDataAccess.AddInParameter(KaizenConstants.CREATEDON, DbType.DateTime, DateTime.Now.ObjectToDBDateTime());
                CommonDataAccess.AddInParameter(KaizenConstants.DELETED, DbType.Boolean, 0);
                CommonDataAccess.AddInParameter(KaizenConstants.FILELOGID, DbType.Int32, fileLog.FileLogId);
                rowsAffected = CommonDataAccess.ExceuteNonQuery();
                //// fileLog.FileLogId = CommonDataAccess.GetParameterValue(KaizenConstants.FILELOGID).ObjectToInt32();
                Logger.Write("Exiting Kaizen2GDataManager.AddFileLogRecords()", LogType.Information);
            }
            catch (Exception exception)
            {
                throw exception;
            }

            return rowsAffected;
        }
Posted
Comments
R Harshal 11-Jul-14 6:30am    
Please Guys Guide Me for The Same.
Thanks
Harshal.

1 solution

Your test is
SQL
IF @CIRCLEID >= 14 and @PROCESSED = 1

@PROCESSED is passed in the value of fileLog.Processed which is of type DbType.Boolean
I think the problem here might be that true is defined as a non-zero value, you shouldn't rely on it being equal to the value 1

In your datamanager class try this line instead
C#
CommonDataAccess.AddInParameter(KaizenConstants.PROCESSED, DbType.Boolean, (fileLog.Processed) ? 1 : 0);
which forces the value 1 into the SP if fileLog.Processed is true otherwise 0

OR ...

Turn the IF statement in the sql from "if true" to "if not false"
SQL
IF @CIRCLEID >= 14 and @PROCESSED <> 0
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900