У меня есть проблема, я выполнить динамичную T-SQL запроса, который возвращает сводную таблицу, как:добавить свойства к классу во время выполнения в C#
code description Price col1 col2 col3 col4 col5 ............. column n
acx cable1 123 2 0 0 0 1
bbb vitro 35 0 1 0 58 0
и я думаю, чтобы создать класс, как это :
public class excelInventory
{
public string code { get; set; }
public string description { get; set; }
public decimal col1 { get; set; }
public decimal col2 { get; set; }
public decimal col3 { get; set; }
public decimal col4 { get; set; }
public decimal col5 { get; set; }
}
тогда я прочитал из результата запроса с DataReader и INSER в Список excelInventory:
SqlDataReader oDataReader = oCommand.ExecuteReader();
List<excelInventory> excelin = new List<excelInventory>();
while (oDataReader.Read())
{
excelInventory inv = new excelInventory();
inv.code = oDataReader.GetValue(0).ToString();
inv.description = oDataReader.GetValue(1).ToString();
if (string.IsNullOrEmpty(oDataReader.GetValue(2).ToString())) { inv.stock = 0; }
else { inv.stock = decimal.Parse(oDataReader.GetValue(2).ToString()); }
if (string.IsNullOrEmpty(oDataReader.GetValue(3).ToString())) { inv.precio = 0; }
else { inv.precio = decimal.Parse(oDataReader.GetValue(3).ToString()); }
if (string.IsNullOrEmpty(oDataReader.GetValue(4).ToString())) { inv.col1 = 0; }
else { inv.col1 = decimal.Parse(oDataReader.GetValue(4).ToString()); }
if (string.IsNullOrEmpty(oDataReader.GetValue(5).ToString())) { inv.col2 = 0; }
else { inv.col2 = decimal.Parse(oDataReader.GetValue(5).ToString()); }
if (string.IsNullOrEmpty(oDataReader.GetValue(6).ToString())) { inv.col3 = 0; }
else { inv.col3 = decimal.Parse(oDataReader.GetValue(6).ToString()); }
if (string.IsNullOrEmpty(oDataReader.GetValue(7).ToString())) { inv.col4 = 0; }
else { inv.col4 = decimal.Parse(oDataReader.GetValue(7).ToString()); }
if (string.IsNullOrEmpty(oDataReader.GetValue(8).ToString())) { inv.col5 = 0; }
else { inv.col5 = decimal.Parse(oDataReader.GetValue(8).ToString());
excelin.Add(inv);//Add the object to a list
}
, но проблема заключается в том, что количество столбцов, возвращаемых не всегда одинаково, поэтому мне нужно изменить программный код, чтобы изменить количество свойств класса, возможно, в следующий раз, когда я запустим sql-запрос, возвратит 10 столбцов, так что это не действительный.
Я не знаю, могу ли я добавить свойства excelInventory во время выполнения, поэтому я думаю использовать двумерный массив, я могу объявить массив после datareader и использовать dataReader.FieldCount, чтобы узнать количество столбцов ,
Но как я объявляю массив и как я перенаправляю массив при чтении данных в соответствии с количеством строк?
Что такое "mofiy"? – DavidG
Можете ли вы предоставить код 'dataReader'? – Grundy
изменил название, я хочу знать, можно ли добавлять свойства к классу во время выполнения, и если это не так, как я могу использовать двумерный массив. – Ion