Преобразование списка в Datatable для передачи типа таблицы в хранимой процедуре - PullRequest
0 голосов
/ 05 октября 2019

У меня есть вызов Web API, когда я отправляю список объектов в сохраненный процесс. Я создаю таблицу данных для отправки в свой сохраненный процесс, однако, когда я пытаюсь добавить его в таблицу данных, он сразу возвращает статус 500.

    private static DataTable CreateTable()
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("Project_Name", typeof(int));
        dt.Columns.Add("Project_Staffing_Period", typeof(DateTime));
        dt.Columns.Add("Employment_Start_Date", typeof(DateTime));
        dt.Columns.Add("Employment_Rate_Type_Code", typeof(string));
        dt.Columns.Add("Employment_Rate_Effective_Date", typeof(DateTime));
        dt.Columns.Add("Company_ID", typeof(int));
        dt.Columns.Add("Person_ID", typeof(int));
        dt.Columns.Add("Project_Role_Type_Code", typeof(string));
        dt.Columns.Add("Staffed_Hours", typeof(decimal));
        dt.Columns.Add("CreateID", typeof(string));
        dt.Columns.Add("CreateTS", typeof(DateTime));
        dt.Columns.Add("UpdateID", typeof(string));
        dt.Columns.Add("UpdateTS", typeof(DateTime));
        return dt;
    }

Это мой формат DataTable.

    public class ProjectStaffing
    {
        public string ProjectName { get; set; }
        public DateTime ProjectStaffingPeriod { get; set; }
        public DateTime EmploymentStartDate { get; set; }
        public string EmploymentRateTypeCode { get; set; }
        public DateTime EmploymentRateEffectiveDate { get; set; }
        public int CompanyID { get; set; }
        public int PersonID { get; set; }
        public string ProjectRoleTypeCode { get; set; }
        public decimal StaffedHours { get;set; }
        public string CreateID { get; set; }
        public string UpdateID { get; set; }
        public DateTime CreateTS { get; set; }
        public DateTime UpdateTS { get; set; }

Вот мой формат класса


        public async Task<string> CreateProjectStaffingByDateRange(List<ProjectStaffing> projectstaffings)
        {
            string statusMessage;
            DataTable dt = CreateTable();

            for(int i = 0; i < projectstaffings.Count; i++)
            {
                dt.Rows.Add(projectstaffings[i].ProjectName, projectstaffings[i].ProjectStaffingPeriod, 
                    projectstaffings[i].EmploymentStartDate, projectstaffings[i].EmploymentRateTypeCode, 
                    projectstaffings[i].EmploymentRateEffectiveDate, projectstaffings[i].CompanyID, 
                    projectstaffings[i].PersonID, projectstaffings[i].ProjectRoleTypeCode, projectstaffings[i].StaffedHours, 
                    projectstaffings[i].CreateID, projectstaffings[i].CreateTS, projectstaffings[i].UpdateID, projectstaffings[i].UpdateTS);
            }

            using (SqlConnection conn = new SqlConnection(Connection))
            {
                conn.Open();
                SqlParameter returnValue; //Holds the bit that determines if insert was successful or not
                SqlCommand command;
                returnValue = new SqlParameter();
                command = new SqlCommand();
                command.Connection = conn;
                command.CommandType = CommandType.StoredProcedure;
                command.CommandText = "USP_Add_Project_Staffing_By_Date_Range";
                command.Parameters.AddWithValue("@TempTable", dt);

                command.Parameters.Add(new SqlParameter("@statusMessage", SqlDbType.NVarChar, -1)).Direction = ParameterDirection.Output;
                returnValue.Direction = ParameterDirection.ReturnValue;
                command.Parameters.Add(returnValue);

                await command.ExecuteNonQueryAsync().ConfigureAwait(false);
                statusMessage = command.Parameters["@statusMessage"].Value.ToString().Trim();
            }
            return statusMessage;
        }


Это мой звонок на сервер. и где я добавляю строки в таблицу данных, где происходит сбой и возвращается статус 500.

Неправильно ли я вставляю данные в таблицу данных? Я соответствовал типам данных. Я проверяю порядок, который я вставляю. Все значения не являются нулевыми.

Некоторые примеры значений могут быть

ProjectName: "Project 1"
ProjectStaffingPeriod: "Oct 4, 2019"
EmploymentStartDate: "Oct 4, 2019"
EmploymentRateTypeCode: "NA Rate"
EmploymentRateEffectiveDate: "Oct 4, 2019"
CompanyID: 1
PersonID: 1
ProjectRoleTypeCode: "BA"
StaffedHours: 8.0
CreateID: "person1"
UpdateID: "person1"
CreateTS: "Oct 4, 2019 11:00 AM"
UpdateTS: "Oct 4, 2019 11:00 AM"

1 Ответ

1 голос
/ 05 октября 2019

Я не знаю об остальной части вашей установки, но вы, кажется, добавляете имя проекта столбца как int в таблицу данных

    dt.Columns.Add("Project_Name", typeof(int));

, но это строка в вашем классе

    public string ProjectName { get; set; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...