Member 14221689 Ответов: 1

Решение для отсутствия сопоставления существует из объекта типа system.collections.generic.list при передаче таблично значимого параметра в процедуре хранения


Это два файла класса
public class Salary
{
    .
    .
    .
    public List<TripAllowanceDT> tripAllowancedt { get; set; }

}


public class TripAllowanceDT
{
    public int id { get; set; }
    public string BookingNumber { get; set; }
    public int NewBookingId { get; set; }
    public string TripAllowance { get; set; }
    public DateTime MultidayFromDate { get; set; }
    public int EmployeeId { get; set; }
}


Это код для вызова хранимой процедуры

  SqlConnection conn = new SqlConnection();
              conn.ConnectionString = ConfigurationManager.ConnectionStrings["DBConnect"].ConnectionString;
              conn.Open();
              SqlCommand sc = new SqlCommand("SP", conn);

sc.Parameters.AddWithValue("AllowanceDT", EmployeeSalary.tripAllowancedt);
             DataTable dt = new DataTable();
              SqlDataAdapter da = new SqlDataAdapter(sc);
              sc.CommandType = CommandType.StoredProcedure;
              da.Fill(dt);


Что я уже пробовал:

Я попробовал другой метод, и он там работает, я отладил код и проверил значения в нем с помощью типа данных. И все это прекрасно.
Я также удалил код для табличного параметра из хранимой процедуры.
Я просто заявил Я.е
@AllowanceDT TableType_UpdateAllowance ReadOnly

1 Ответов

Рейтинг:
8

Gerry Schmitz

Вы пытаетесь передать "коллекцию" в качестве параметра; такой поддержки нет.

sc.Parameters.AddWithValue("AllowanceDT", EmployeeSalary.tripAllowancedt);

Перечисление SqlDbType (System.Data) | Microsoft Docs[^]