c#数据集方法

本文关键字:方法 数据集 | 更新日期: 2023-09-27 18:10:57

在我的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();  

c#数据集方法

你可以把它作为虚拟或静态公共方法放在类中,例如

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();

而如果您将其创建为静态方法,如

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

你可以把它命名为

var ds = ExcelHelper.GetExcelData();

下面的示例类是我使用的一般模式。

创建一个"data-manager"类,它处理所有数据访问。我为core"功能,我还允许用户创建具有指定连接字符串的对象。

关于示例代码的要点:

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