Вы можете вернуть DataTable
, который сохранит столбцы и строки запроса. Вместо SqlDataReader
рассмотрите возможность использования SqlDataAdapter
. Одним из преимуществ является то, что Fill
метод SqlDataAdapter
откроет и закроет соединение для вас.
var dt = new DataTable();
using (var da = new SqlDataAdapter(query, cnn))
{
da.Fill(dt);
}
Ваш полный метод может выглядеть примерно так:
private DataTable GetData(string query)
{
// New Connection String
string connetionString = ConfigurationManager.ConnectionStrings["ConnectionStringName"].ConnectionString;
// Instantiate the SQL Connection with Connection String
SqlConnection cnn = new SqlConnection(connetionString);
// declare datatable
var dt = new DataTable();
// create SqlDataAdapter
using (var da = new SqlDataAdapter(query, cnn))
{
// fill datatable
da.Fill(dt);
}
return dt;
}
Затем вам нужно будет прочитать данные из таблицы данных. Смотрите мой ответ здесь , чтобы узнать, как читать данные Метод в связанном ответе использует расширение Field<T>
из DataSetExtensions
для извлечения данных. Пожалуйста, смотрите пример ниже:
// get data from your method
DataTable table = GetData("select * from MyTable");
// iterate over the rows of the datatable
foreach (var row in table.AsEnumerable()) // AsEnumerable() returns IEnumerable<DataRow>
{
var id = row.Field<int>("ID"); // int
var name = row.Field<string>("Name"); // string
var orderValue = row.Field<decimal>("OrderValue"); // decimal
var interestRate = row.Field<double>("InterestRate"); // double
var isActive = row.Field<bool>("Active"); // bool
var orderDate = row.Field<DateTime>("OrderDate"); // DateTime
}
Чтобы проверить, является ли DataTable нулевым / пустым, см. ответ . Это может быть так просто, как:
if(table?.Rows?.Count() > 0) { ... }