Ниже приведен пример класса, который я использую.
Я создаю класс «менеджер данных», который обрабатывает весь доступ к данным. Я включаю статические методы для «основной» функциональности, а также разрешаю пользователю создавать объект с указанной строкой подключения.
Баллы относительно кода образца:
- Важно иметь
using
операторов вокруг каждого класса данных.
- Добавление параметров перед вызовом
Open
для удобочитаемого кода.
- Я специально не использую адаптер данных для этого кода, чтобы показать, что возможно создать
DataSet
и добавить таблицы данных по мере необходимости. (Обратите внимание, что использование адаптера данных с хранимой процедурой, которая возвращает несколько наборов результатов, заполняет набор данных таблицей данных для каждого набора результатов.)
- Я специально не занимаюсь исключением. Так как это служебный класс, стандартная практика позволяет исключениям пузыриться до вызывающей стороны.
- Это пример кода, который показывает, что вы можете выполнить, и как я обращаюсь с низкоуровневым доступом к данным. Этот код не был проверен, но этот код-шаблон я использую все время.
Образец класса
public class ExcelDataManager
{
public string ConnectionString { get; set; }
public ExcelDataManager(string connectionString)
{
this.ConnectionString = connectionString;
}
public DataSet LoadDataSet(string commandText, string dataSetName, string tableName)
{
return LoadDataSet(this.ConnectionString, commandText, dataSetName, tableName);
}
public static DataSet LoadDataSet(string connectionString, string commandText, string dataSetName, string tableName)
{
DataSet oResult = null;
DataTable oDataTable = LoadDataTable(connectionString, commandText, tableName);
if (oDataTable != null)
{
string sDataSetName = dataSetName;
if (string.IsNullOrWhiteSpace(dataSetName))
{
sDataSetName = "DataSet1";
}
oResult = new DataSet(sDataSetName);
oResult.Tables.Add(oDataTable);
oResult.AcceptChanges();
}
return oResult;
}
public DataTable LoadDataTable(string commandText, string tableName)
{
return LoadDataTable(this.ConnectionString, commandText, tableName);
}
public static DataTable LoadDataTable(string connectionString, string commandText, string tableName)
{
DataTable oResult = null;
using (OleDbConnection oConnection = new OleDbConnection(connectionString))
{
using (OleDbCommand oCommand = oConnection.CreateCommand())
{
oCommand.CommandType = CommandType.Text;
oCommand.CommandText = commandText;
oCommand.Connection.Open();
using (OleDbDataReader oReader = oCommand.ExecuteReader(CommandBehavior.CloseConnection))
{
if (oReader.HasRows)
{
// You need a table name if you call WriteXml.
string sTableName = tableName;
if (string.IsNullOrWhiteSpace(tableName))
{
sTableName = "Table1";
}
oResult = new DataTable(sTableName);
oResult.Load(oReader);
oResult.AcceptChanges();
}
}
}
}
return oResult;
}
}