Конвертируйте SQL datetime в C # datetime, пока он абстрагируется от объекта - PullRequest
0 голосов
/ 24 декабря 2018

Я работаю над приложением, в котором можно управлять данными пациентов, включая дату их рождения.Я могу очень просто вставить эти данные в SQL, используя dapper, но вытащить дату рождения - это отдельная задача.

У меня есть запрос SQL, который возвращает список соответствующих пациентов на основе поиска и в c # Iбросьте их в класс пациента, который я определил в заявке.Однако, когда я делаю это, я не могу указать, как строка, содержащая дату рождения, будет приведена к дате.

Это означает, что вместо того, чтобы использовать мой пользовательский формат для приведения, она использует все, что угодно.формат по умолчанию это сделано, чтобы сделать.Это приводит к тому, что дата просто возвращается 1/1/0001 в 12:00.Вот мой код для извлечения из базы данных:

public List<PatientModel> SearchPatientsByName(string name)
{
    List<PatientModel> output;
    using (IDbConnection connection = new System.Data.SqlClient.SqlConnection(GlobalConfig.CnnString(db)))
    {
        var p = new DynamicParameters();
        p.Add("@Name", name);

        output = connection.Query<PatientModel>("spPatients_SearchByName", p, commandType: CommandType.StoredProcedure).AsList();
    }
    return output;
}

Вот мой код для вставки в Sql:

       public PatientModel CreatePatientModel(PatientModel model)
    {

        using (IDbConnection connection = new System.Data.SqlClient.SqlConnection(GlobalConfig.CnnString(db)))
        {
            model.Address = AesCryp.Encrypt(model.Address);
            model.CIN = AesCryp.Encrypt(model.CIN);


            var p = new DynamicParameters();
            p.Add("@Name", model.Name);
            p.Add("@DOB", model.DateOfBirth);
            p.Add("@Address", model.Address);
            p.Add("@id", 0, dbType: DbType.Int32, direction: ParameterDirection.Output);
            p.Add("@LastName", model.LastName);
            p.Add("@Gender", model.Gender);
            p.Add("@City", model.City);
            p.Add("@PostalCode", model.PostalCode);
            p.Add("@Agency", model.AgencyId);
            p.Add("@CIN", model.CIN);
            p.Add("@CardCode", 0);
            p.Add("@MobileNumber", model.MobileNumber);
            p.Add("@HomeNumber", model.HomeNumber);
            p.Add("@InsuranceCompany", model.InsuranceCoId);
            connection.Execute("spPatient_Insert", p, commandType: CommandType.StoredProcedure);

            model.Id = p.Get<int>("@id");

            return model;

        }
    }

1 Ответ

0 голосов
/ 24 декабря 2018

Как указывает welcomeoverflow, вы должны убедиться, что ваши настройки:

  • PatientModel имеет свойство BirthDateTime, которое имеет тип ac # DateTime
  • В вашей таблице базы данных есть столбец для рожденияdatetime, который имеет некоторый тип даты / времени, например DateTime или DateTime2 (0)

Dapper сможет отобразить эти два типа вместе, чтобы они были эквивалентны.Храните даты в правильно набранной переменной.Никогда не конвертируйте их в строку для хранения.Преобразуйте их в строку только с определенным форматом отображения, когда вы помещаете их в отчет

Если вы хотите обновить свой вопрос с более подробной информацией о структуре таблицы и модели пациента, я соответствующим образом пересмотрю этот ответ(пожалуйста, прокомментируйте после того, как вы это сделали) с дополнительной информацией

...