У меня есть приложение С#, которое считывает данные из хранимой процедуры, а затем создает сообщение. Я использую SqlDataReader для чтения информации из базы данных. Раньше мне приходилось создавать новый класс каждый раз, когда у меня был другой тип сообщения, и он выходил из-под контроля. Под разными я подразумеваю разное количество столбцов и/или разные типы данных, которые содержит каждый из столбцов. Я пытаюсь упростить добавление различных типов сообщений и не знаю, как динамически форматировать данные по мере их чтения. Я пытался отформатировать данные после того, как они были прочитаны в мои переменные Data #, но это просто мусор, потому что он форматируется как неправильный тип. Итак, единственный способ, которым я в настоящее время вижу обработку данных, когда я читаю свои переменные, и я не могу понять, как это сделать.
Формат моего сообщения следующий:
Message
Subject
(Text)
MessageHeader1
MessageHeader2
Title
Header1
Header2
Header3
(Data)
Data1
Data2
Data3
Проблема в том, что переменные Data# могут содержать информацию другого типа. В настоящее время он может содержать строки, целые числа, даты, проценты и т. д. Есть ли способ отформатировать данные на основе другого значения или какого-либо другого метода, чтобы можно было правильно отформатировать данные другого типа?
if (dr.Read())
{
message.Subject = dr["Subject"].ToString();
message.MessageText = new AlertMessageText()
{
MessageHeader1 = dr["MessageHeader1"].ToString(),
MessageHeader2 = dr["MessageHeader2"].ToString(),
Title = dr["Title"].ToString(),
Header1 = dr["Header1"].ToString(),
Header2 = dr["Header2"].ToString(),
Header3 = dr["Header3"].ToString(),
MessageData = new List<AlertMessageData>(),
};
}
...
while (dr.Read())
{
message.MessageText.MessageData.Add(new AlertMessageData()
{
Data1 = string.Format("{0:n0}", dr["Data1"]),
Data2 = string.Format("{0:n0}", dr["Data2"]),
Data3 = string.Format("{0:MM/dd/yyyy}", dr["Data3"]), // Formats Data as a Date
});
}