Позвольте мне сначала рассказать вам, что я делаю прямо сейчас и с какой проблемой я сталкиваюсь.
Прямо сейчас я использую SqlDataReader
для извлечения данных из базы данных, моя функция выглядит так
public List<TOPIC_REPORT> gettopicreports()
{
query = "SELECT * FROM [Topic Reports]";
List<TOPIC_REPORT> rpl = new List<TOPIC_REPORT>();
try
{
con.Open();
com = new SqlCommand(query, con);
sdr = com.ExecuteReader();
while (sdr.Read())
{
rt = new TOPIC_REPORT();
rt.ContentId = sdr.GetString(0);
rt.TimesReported = sdr.GetInt64(1);
rt.IsBanned = sdr.GetInt32(2);
rpl.Add(rt);
}
con.Close();
return rpl;
}
catch (Exception e)
{
con.Close();
throw e;
}
}
Проблемы с приведенным выше кодом
- Необходимо присваивать значения переменным класса по одному и проблематично с запросом множественного выбора.
- Нужно позаботиться о ResultSet , цикле while и т.д.
Приведенное выше решение проблемы использует SqlDataAdapter.
public DataSet getdata()
{
com.CommandText = "GetMasterPageData";
com.Connection = con;
com.CommandType = CommandType.StoredProcedure;
con.Open();
SqlDataAdapter adapter = new SqlDataAdapter(com);
DataSet ds = new DataSet();
adapter.Fill(ds);
con.Close();
return ds;
}
Это решает вышеуказанные проблемы, но
- Уменьшить читаемость моей программы, потому что мой клиент не знает, в каком порядке я отправляю таблицы данных в DataSet.
- Неизвестен порядок выбранных значений в DataTable.
- Пользователь внешнего интерфейса должен работать с индексом столбца, который в конце будет проблематичным.
Предложите мне, что я должен сделать, чтобы решить вышеуказанные проблемы.