In this Blog, we can create a simple windows application connect with the MySQL server to maintain the cheque details and report using visual studio.
Process Flow:
- Create table & store procedure
- Create Application
- Report Generation
Create table & store procedure:
In this application I have used MDF file. if you need, create database from SQL Server, Following the same script.
CREATE TABLE [dbo].[ChequeDetails] (
[ChequeDetailsId] NUMERIC (20) IDENTITY (1, 1) NOT NULL,
[ChequeNumber] NVARCHAR (50) NULL,
[GivenTo] NVARCHAR (50) NULL,
[GivenDate] NVARCHAR (20) NULL,
[ValidUpto] NVARCHAR (20) NULL,
[Amount] NUMERIC (20, 2) NULL,
[Notes] NVARCHAR (MAX) NULL,
[CreatedBy] INT NULL,
[CreatedDateTime] DATETIME NULL,
[ModifiedBy] INT NULL,
[ModifiedDateTime] DATETIME NULL,
[IsDeleted] BIT NULL,
PRIMARY KEY CLUSTERED ([ChequeDetailsId] ASC)
);
CREATE TABLE [dbo].[UserMaster] (
[UserId] INT IDENTITY (1, 1) NOT NULL,
[UserName] VARCHAR (20) NULL,
[Password] NVARCHAR (MAX) NULL,
[FirstName] VARCHAR (50) NULL,
[LastName] VARCHAR (50) NULL,
[Gender] TINYINT NULL,
[EmailId] VARCHAR (250) NULL,
[PhoneNumber] VARCHAR (10) NULL,
[IsActiveUser] BIT NULL,
[IsUserDeleted] BIT NULL,
PRIMARY KEY CLUSTERED ([UserId] ASC)
);
CREATE PROCEDURE Proc_ChequeDetails
@Mode varchar(10),
@ChequeDetailsId NUMERIC(20)= NULL,
@ChequeNumber nvarchar(50) = NULL,
@GivenTo nvarchar(50) = NULL,
@GivenDate nvarchar(20) = NULL,
@ValidUpto nvarchar(20) = NULL,
@Notes nvarchar(max) = NULL,
@Amount NUMERIC(20,2) = NULL,
@UserId int = NULL,
@IsDeleted bit = NULL
AS
BEGIN
IF(@Mode='INSERT')
BEGIN
INSERT INTO dbo.ChequeDetails(ChequeNumber,GivenTo,GivenDate,ValidUpto,Amount,Notes,CreatedBy,CreatedDateTime,ModifiedBy,ModifiedDateTime,IsDeleted)
VALUES(@ChequeNumber,@GivenTo,@GivenDate,@ValidUpto,@Amount,@Notes,@UserId,GETDATE(),@UserId,GETDATE(),0)
SELECT 1 IsSuccess,'Cheque added Successfully!' as OutputMessage
SELECT ChequeDetailsId,ChequeNumber,GivenTo,GivenDate,ValidUpto,Amount,Notes,CreatedBy,CreatedDateTime,ModifiedBy,ModifiedDateTime FROM dbo.ChequeDetails
END
IF(@Mode='UPDATE')
BEGIN
UPDATE dbo.ChequeDetails SET ChequeNumber=@ChequeNumber,GivenTo=@GivenTo,GivenDate=@GivenDate,ValidUpto=@ValidUpto,Amount=@Amount,Notes=@Notes,
ModifiedBy=@UserId,ModifiedDateTime=GETDATE()
WHERE ChequeDetailsId=@ChequeDetailsId
SELECT 1 IsSuccess,'Cheque added Successfully!' as OutputMessage
SELECT ChequeDetailsId,ChequeNumber,GivenTo,GivenDate,ValidUpto,Amount,Notes,CreatedBy,CreatedDateTime,ModifiedBy,ModifiedDateTime FROM dbo.ChequeDetails
END
IF(@Mode='DELETE')
BEGIN
UPDATE dbo.ChequeDetails SET IsDeleted=@IsDeleted,ModifiedBy=@UserId,ModifiedDateTime=GETDATE()
WHERE ChequeDetailsId=@ChequeDetailsId
SELECT 1 IsSuccess,'Cheque added Successfully!' as OutputMessage
SELECT ChequeDetailsId,ChequeNumber,GivenTo,GivenDate,ValidUpto,Amount,Notes,CreatedBy,CreatedDateTime,ModifiedBy,ModifiedDateTime FROM dbo.ChequeDetails
END
IF(@Mode='GETALL')
BEGIN
SELECT ChequeDetailsId,ChequeNumber,GivenTo,GivenDate,ValidUpto,Amount,Notes,CreatedBy,CreatedDateTime,ModifiedBy,ModifiedDateTime FROM dbo.ChequeDetails
END
IF(@Mode='SEARCH')
BEGIN
SELECT ChequeDetailsId,ChequeNumber,GivenTo,GivenDate,ValidUpto,Amount,Notes,CreatedBy,CreatedDateTime,ModifiedBy,ModifiedDateTime,IsDeleted FROM dbo.ChequeDetails
END
END
CREATE PROCEDURE [dbo].[Proc_Report]
AS
BEGIN
select cd.ChequeNumber,cd.Amount,cd.GivenTo as ChequeGivenTo,
cd.GivenDate as [ChequeGivenDate],cd.ValidUpto as [ChequeValidUpto],DATEDIFF(DAY,CAST(GETDATE() AS DATE),
(CASE WHEN TRY_PARSE(ValidUpto AS smalldatetime) IS NULL THEN TRY_PARSE((SUBSTRING(ValidUpto,4,2)
+ '/' + SUBSTRING(ValidUpto,1,2) + '/' +SUBSTRING(ValidUpto,7,4)) AS smalldatetime) ELSE TRY_PARSE(ValidUpto AS smalldatetime) END)) AS [RemainingDays],
cd.Notes,umc.FirstName+' '+umc.LastName as [ChequeCreatedBy],cd.CreatedDateTime as [ChequeCreatedDateTime],
umm.FirstName+' '+umm.LastName as [ChequeModifiedBy],cd.ModifiedDateTime as [ChequeModifiedDateTime] from dbo.ChequeDetails cd
left join dbo.UserMaster umc on cd.CreatedBy=umc.UserId
left join dbo.UserMaster umm on cd.ModifiedBy=umm.UserId
order by cd.ModifiedDateTime desc
END
CREATE PROCEDURE [dbo].[Proc_ValidateUser]
@Mode varchar(50),
@UserName varchar(20),
@Password varchar(max)
AS
BEGIN
IF @Mode='VALIDATEUSER'
BEGIN
IF EXISTS(SELECT 1 FROM dbo.UserMaster WHERE LOWER(UserName)=LOWER(@UserName) OR PhoneNumber=@UserName)
BEGIN
IF EXISTS(SELECT 1 FROM dbo.UserMaster WHERE (LOWER(UserName)=LOWER(@UserName) OR PhoneNumber=@UserName) AND ISNULL(IsActiveUser,0)=1)
BEGIN
IF EXISTS(SELECT 1 FROM dbo.UserMaster WHERE (LOWER(UserName)=LOWER(@UserName) OR PhoneNumber=@UserName) AND Password=@Password COLLATE SQL_Latin1_General_CP1_CS_AS)
BEGIN
SELECT 'true' AS IsAuthenticated,UserId,'!' AS UserFullName,'Login Successfully!' AS ErrorMessage
FROM dbo.UserMaster WHERE (LOWER(UserName)=LOWER(@UserName) OR PhoneNumber=@Username) AND Password=@Password
END
ELSE
BEGIN
SELECT 'false' AS IsAuthenticated,0 AS UserId,'Wrong Password!' AS ErrorMessage
END
END
ELSE
BEGIN
SELECT 'false' AS IsAuthenticated,0 AS UserId,'User Name is not Active!' AS ErrorMessage
END
END
ELSE
BEGIN
SELECT 'false' AS IsAuthenticated,0 AS UserId,'User Name not Exist!' AS ErrorMessage
END
END
END
Create Application:
Open Visual Studio New > Project > Window Desktop > Select Windows Form Application

After following the project name enter OK button, it will go to solution explorer window. Right Click the project and select New> New Item

I have added the all files like below the structure

If you going to use MDF, after creating this file run the above query on new query in visual studio.I have authenticated simple username & password

Only after login validation, it allows to the Parent form (MDI Form)
if (TxtUserName.Text == "" || string.IsNullOrEmpty(TxtUserName.Text)) {
LblMessage.Text = "Please Enter User Name";
TxtUserName.Focus();
return;
}
if (TxtPassword.Text == "" || string.IsNullOrEmpty(TxtPassword.Text))
{
LblMessage.Text = "Please Enter Password";
TxtPassword.Focus();
return;
}
try
{
var dsResult = new DataSet();
var vmResult = new VmUserDetails();
SqlParameter[] sqlParam = new SqlParameter[3];
sqlParam[0] = new SqlParameter("@Mode", "VALIDATEUSER");
sqlParam[1] = new SqlParameter("@UserName", TxtUserName.Text);
sqlParam[2] = new SqlParameter("@Password", TxtPassword.Text);
dsResult = objHelper.GetDatasetFromProcedure("dbo.Proc_ValidateUser", sqlParam);
if (dsResult != null && dsResult.Tables.Count > 0)
{
if (dsResult.Tables[0].Rows.Count > 0)
{
vmResult = dsResult.Tables[0].ToList<VmUserDetails>().ToList().FirstOrDefault();
}
}
if (vmResult.IsAuthenticated)
{
FrmChequeMaintanance frmMain = new FrmChequeMaintanance();
GlobalAccess.GlobalUserId = vmResult.UserId;
GlobalAccess.GlobalUserFullName = vmResult.UserFullName;
frmMain.Text = "Welcome " + vmResult.UserFullName;
this.Hide();
}
else
{
LblMessage.Text = vmResult.ErrorMessage;
return;
}
Cheque Details Getting From:

Data save into the database and pending to data grid control
var objAddCheque = new VmAddCheque();
if (TxtChequeNumber.Text == "" || string.IsNullOrEmpty(TxtChequeNumber.Text))
{
LblMessageFaliure.Text = "Please Enter Cheque Number";
TxtChequeNumber.Focus();
return;
}
if (TxtGivenTo.Text == "" || string.IsNullOrEmpty(TxtGivenTo.Text))
{
LblMessageFaliure.Text = "Please Enter the Name of the Person whom you gave this Cheque";
TxtGivenTo.Focus();
return;
}
if (TxtGivenDate.Text == "" || string.IsNullOrEmpty(TxtGivenDate.Text))
{
LblMessageFaliure.Text = "Please Select Cheque Issued date";
TxtGivenDate.Focus();
return;
}
if (TxtValidUpto.Text == "" || string.IsNullOrEmpty(TxtValidUpto.Text))
{
LblMessageFaliure.Text = "Please Select Cheque Expiry date";
TxtValidUpto.Focus();
return;
}
if (TxtAmount.Text == "" || string.IsNullOrEmpty(TxtAmount.Text))
{
LblMessageFaliure.Text = "Please Fill the Cheque Amount";
TxtAmount.Focus();
return;
}
objAddCheque.Mode = "INSERT";
objAddCheque.ChequeNumber = TxtChequeNumber.Text;
objAddCheque.GivenTo = TxtGivenTo.Text;
objAddCheque.GivenDate = TxtGivenDate.Text;
objAddCheque.ValidUpto = TxtValidUpto.Text;
objAddCheque.Amount = Convert.ToDecimal(TxtAmount.Text);
objAddCheque.Notes = RtfNotes.Text;
SaveDatas(objAddCheque);
Report Generation:
For the report concept I have used default visual studio report of rdlc. If you need, you can add any external reporting tool like crystal report, Telerik report…etc

this.procReportBindingSource.DataMember = "Proc_Report";
this.procReportBindingSource.DataSource = this.chequeMaintananceDBdsReportBindingSource;
//
// chequeMaintananceDBdsReportBindingSource
//
this.chequeMaintananceDBdsReportBindingSource.DataSource = this.chequeMaintananceDBdsReport;
this.chequeMaintananceDBdsReportBindingSource.Position = 0;
//
// chequeMaintananceDBdsReport
//
this.chequeMaintananceDBdsReport.DataSetName = "ChequeMaintananceDBdsReport";
this.chequeMaintananceDBdsReport.SchemaSerializationMode = System.Data.SchemaSerializationMode.IncludeSchema;
//
// PnlReport
//
this.PnlReport.BackColor = System.Drawing.Color.SeaShell;
this.PnlReport.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.PnlReport.Controls.Add(this.RptChequeDetails);
this.PnlReport.Location = new System.Drawing.Point(13, 12);
this.PnlReport.Name = "PnlReport";
this.PnlReport.Size = new System.Drawing.Size(1457, 711);
this.PnlReport.TabIndex = 1;

Leave a Reply