Compare what you are passing to SQL with what you tell SQL to expect:
ALTER PROCEDURE [dbo].[gvempdetails]
@Action VARCHAR (10),
@EMPLOYEEID Int =0,
@EMPLOYEENAME VARCHAR(100)= NULL ,
@DEPARTMENT VARCHAR(100)= NULL ,
@AGE VARCHAR(30)= NULL,
@SALARY INT = NULL
Tells SQL to expect
@EMPLOYEEID
and
@SALARY
to be integer values.
But you don't pass integers:
cmd.Parameters.Add(new SqlParameter("@Action", SqlDbType.VarChar, 50));
cmd.Parameters.Add(new SqlParameter("@EMPLOYEEID", SqlDbType.VarChar, 50));
cmd.Parameters.Add(new SqlParameter("@EMPLOYEENAME", SqlDbType.VarChar, 50));
cmd.Parameters.Add(new SqlParameter("@DEPARTMENT", SqlDbType.VarChar, 50));
cmd.Parameters.Add(new SqlParameter("@AGE", SqlDbType.VarChar, 50));
cmd.Parameters.Add(new SqlParameter("@SALARY", SqlDbType.VarChar, 50));
You pass strings, so SQL tries to convert them to integers, and is probably failing. Check your data, and if it's supposed to be an integer, Parse it in your C# code and pas an integer value, not a string.
In addition, your string sizes don't match either: you are passing 50 characters for each, but some are supposed to be 10, or 100, or 30. You need to match those, and verify your data lengths before you pass that to SQL or you will get truncation errors with those later as well.