You can't pass multiple values to a single parameter and then use that parameter with an
IN
clause.
The simplest solution is to pass multiple parameters:
using (var connection = new SqlConnection("..."))
using (var command = new SqlCommand())
{
command.Connection = connection;
command.CommandType = CommandType.Text;
var parameterNames = new List<string>(data.Count);
foreach (string item in data)
{
string name = "@p" + command.Parameters.Count;
command.Parameters.AddWithValue(name, item);
}
command.CommandText = string.Format(
"SELECT * FROM emp_detail WHERE EState In ({0})",
string.Join(", ", parameterNames));
var dt = new DataTable();
var da = new SqlDataAdapter(command);
da.Fill(dt);
... DO SOMETHING WITH THE DATA HERE ...
}
There are other approaches available - for example:
Arrays and Lists in SQL Server (The Full Story)[
^]
Using Table-Valued Parameters in SQL Server and .NET[
^]