Метод набора данных C # - PullRequest
       1

Метод набора данных C #

2 голосов
/ 10 октября 2011

В моей программе на C # у меня есть несколько областей, где я подключаюсь к электронной таблице Excel. Чтобы уменьшить повторение кодирования, я пытаюсь написать метод, который читает оператор SQL, а затем выводит набор данных.

Как мне написать этот метод?

Во-вторых, что я должен использовать для создания такого модуля? Метод, класс или что-то другое?

Это то, что я имею до сих пор.

        //Connection String to read Excel File into Dataset.  
        if (Path.GetExtension(brtFile) == ".xlsx")  
        {  
            ConnectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\";", brtFile);  
        }  
        else  
        {  
            ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +  
                                  "Data Source=" + brtFile + ";" +  
                                  "Extended Properties=Excel 8.0;";  
        }  

        //Read Excel file into Dataset.  
        OleDbConnection objConn = new OleDbConnection(ConnectionString);  
        try  
        {  
            objConn.Open();  
        }  
        catch (Exception e)  
        {  
            Console.WriteLine("{0} Exception caught.", e);  
            Console.ReadLine();  
        }  

        OleDbCommand objCmdSelect = new OleDbCommand("SELECT * FROM [" + xlWorksheet + "$]", objConn);  
        OleDbDataAdapter objAdapter1 = new OleDbDataAdapter();  
        objAdapter1.SelectCommand = objCmdSelect;  
        DataSet objDataset1 = new DataSet();  
        objAdapter1.Fill(objDataset1);  
        objConn.Close();  

Ответы [ 2 ]

0 голосов
/ 11 октября 2011

Ниже приведен пример класса, который я использую.

Я создаю класс «менеджер данных», который обрабатывает весь доступ к данным. Я включаю статические методы для «основной» функциональности, а также разрешаю пользователю создавать объект с указанной строкой подключения.

Баллы относительно кода образца:

  1. Важно иметь using операторов вокруг каждого класса данных.
  2. Добавление параметров перед вызовом Open для удобочитаемого кода.
  3. Я специально не использую адаптер данных для этого кода, чтобы показать, что возможно создать DataSet и добавить таблицы данных по мере необходимости. (Обратите внимание, что использование адаптера данных с хранимой процедурой, которая возвращает несколько наборов результатов, заполняет набор данных таблицей данных для каждого набора результатов.)
  4. Я специально не занимаюсь исключением. Так как это служебный класс, стандартная практика позволяет исключениям пузыриться до вызывающей стороны.
  5. Это пример кода, который показывает, что вы можете выполнить, и как я обращаюсь с низкоуровневым доступом к данным. Этот код не был проверен, но этот код-шаблон я использую все время.

Образец класса

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;
    }

}
0 голосов
/ 11 октября 2011

вы можете поместить это внутри класса как виртуальный или статический публичный метод, например,

public class ExcelHelper
{
        public static DataSet GetExcelData()
        {
            //your codes here
            return objDataset1;
        }
}

Вы можете назвать это так

var xl = new ExcelHelper();
var ds = xl.GetExcelData();

или

var ds = new ExcelHelper().GetExcelData();

while, если вы создадите это как статический метод, такой как

public class ExcelHelper { 
    public static DataSet GetExcelData()
    {
        return objDataset1;
    }
}

Вы можете назвать это как

var ds = ExcelHelper.GetExcelData();
...