我们如何使用OLEDB使用表值验证Excel工作表的列名

时间:2019-01-01 12:03:05

标签: c# excel asp.net-mvc oledb

我想用表定义来验证上载的Excel工作表的列名。 在这里,我从数据库中获取表定义,也使用OLEDB从Excel工作表中获取列名。

我想验证表格中所有列在excel列中的可用位置。在这里,我同时获得了两个列名(即来自excel和表(DB)的列)。

这是我尝试的代码

    //for validating column names
        public bool ValidateColumnNames(string filename,DataExchangeDefinition dataExchangeDefinition)
        {          
            string extension = Path.GetExtension(filename);
            string connstring = string.Empty;
            try
            {
                switch (extension)
                {
                    case ".xls":
                        connstring = string.Format(ConfigurationManager.ConnectionStrings["Excel03ConString"].ConnectionString, filename);
                        break;
                    case ".xlsx":
                        connstring = string.Format(ConfigurationManager.ConnectionStrings["Excel07+ConString"].ConnectionString, filename);
                        break;
                }               
                using (OleDbConnection connExcel = new OleDbConnection(connstring))
                {
                    using (OleDbCommand cmd = new OleDbCommand())
                    {
                        cmd.Connection = connExcel;
                        connExcel.Open();                        
                        var dtExcelSchema = connExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                        connExcel.Close();
                        string firstSheet = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString();

                        cmd.CommandText = "SELECT top 1 * FROM [" + firstSheet + "]";
                        using (OleDbDataAdapter da = new OleDbDataAdapter(cmd))
                        {
                            DataTable HeaderColumns = new DataTable();
                            da.SelectCommand = cmd;
                            da.Fill(HeaderColumns);
                            foreach (DataColumn column in HeaderColumns.Columns)
                            {     

//Here i want to validate the column names


                                dataExchangeDefinition.FieldName = column.Caption.ToString();                               
                            }
                        }

                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return true;
        }

1 个答案:

答案 0 :(得分:0)

这是对我来说很好的答案

//for validating column names
    public List<DataExchangeDefinition> ValidateColumnNames(string filename, List<DataExchangeDefinition> dataExchangeDefinitionList)
    {
        DataExchangeDefinition dt = new DataExchangeDefinition();

        //List<DataExchangeDefinition> dataexchangedefinitionList = new List<DataExchangeDefinition>();
        string extension = Path.GetExtension(filename);
        string connstring = string.Empty;
        try
        {
            switch (extension)
            {
                case ".xls":
                    connstring = string.Format(ConfigurationManager.ConnectionStrings["Excel03ConString"].ConnectionString, filename);
                    break;
                case ".xlsx":
                    connstring = string.Format(ConfigurationManager.ConnectionStrings["Excel07+ConString"].ConnectionString, filename);
                    break;
            }
            using (OleDbConnection connExcel = new OleDbConnection(connstring))
            {
                using (OleDbCommand cmd = new OleDbCommand())
                {
                    cmd.Connection = connExcel;
                    connExcel.Open();
                    var dtExcelSchema = connExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); //To get the sheet name
                    connExcel.Close();
                    string firstSheet = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString();

                    cmd.CommandText = "SELECT top 1 * FROM [" + firstSheet + "]";
                    using (OleDbDataAdapter da = new OleDbDataAdapter(cmd))
                    {
                        DataTable HeaderColumns = new DataTable();
                        da.SelectCommand = cmd;
                        da.Fill(HeaderColumns);

                        //List<DataColumn> excelColumn = new List<DataColumn>();
                        //var excelColumn = new List<DataColumn>();
                        //foreach (DataColumn column in HeaderColumns.Columns)
                        //{
                        //    excelColumn.Add(column);                               
                        //}

                            foreach (DataExchangeDefinition data in dataExchangeDefinitionList)
                            //for(int i=0;i<dataExchangeDefinitionList.Count;i++)
                        {
                            dt.IsColumnValid = false;

                            //var result = from excelColumn in HeaderColumns;
                            foreach (DataColumn column in HeaderColumns.Columns)
                            {
                                if (data.FieldCaption == column.Caption)
                                {
                                    data.IsColumnValid = true;
                                    break;
                                }
                            }
                        }
                        return dataExchangeDefinitionList;
                    }

                }
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
        //return isColumnValid;
    }
}

}