繁体   English   中英

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

[英]How can we Validate Column names of Excel sheet with Table values using 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;
        }

这是对我来说很好的答案

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

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM