繁体   English   中英

检查数据表列名是否为默认列名 C#

[英]Check if datatable column name is default column name C#

我必须将 excel 数据复制到从中复制的DataTable示例中。 如果列名是空字符串,当数据进入DataTable时,空名将转换为动态名称,如 F1、F3、F22。 如果列名具有有效值没关系,但是当我尝试获取空列名的列名时,动态 F22 名称正在获取。 excel 表中不存在 F22,我必须通知用户他有无效的空列名。

所以问题是如何判断列名是否由 OLEDB 动态设置?

DataColumnCollection excelDataColumns;
....
for (int i = 3; i < excelDataColumns.Count; i++) {
    var columnName = excelDataColumns[i].ColumnName;

    // Check if column name is blank
    if (IsExcelDefaultColumnName(excelDataColumns[i], i))
    {
        invalidEntries.Add("Blank column name");
    }
    else
    {
        var result = IsValidData(GetFullData(columnName));
        if (!result.Item1 && !columnName.Any(char.IsDigit))
        {
             invalidEntries.Add(columnName);
        }
    }
}

我想我理解这个问题,因为您需要阅读数据库架构来判断列名是否在表中? (那是对的吗?)

如果您可以通过连接字符串访问 SQL 服务器数据库,我有一个读取数据库模式的工具。

这是来自我的开源项目 DataTier.Net https://github.com/DataJuggler/DataTier.Net的示例(结束插件)

这使用 Nuget Package:DataJuggler.Net

// read database schema
database = sqlConnector.LoadDatabaseSchema(database);

数据库有一个表集合,每个表都有一个字段集合。

class SQL 数据库连接器执行 LoadDatabaseSchema:

Nuget package 代码在这里: https://github.com/DataJuggler/DataJuggler.Net

或点网核心版本: https://github.com/DataJuggler/DataJuggler.Net.Core

上面的 Nuget package 也用于 DB Compare 比较两个 SQL 服务器数据库的数据库架构并报告任何差异:

https://github.com/DataJuggler/DBCompare

希望没有人会考虑这个垃圾邮件,因为我确实免费提供了它,我只是想回答“你如何阅读数据库模式”的问题,所以在这种情况下,他可以确定列名是否是真正的列姓名。 我想我正确地解释了这个问题,如果没有解释你需要更好的东西。

如果您能够使用 Excel.Application interop,则选择并检查第一行将显示列是否缺少名称,例如:

    public  void CheckExcelColumnName(string sourceFile)
    {
            if (!System.IO.File.Exists(sourceFile))
            {
            throw new System.ArgumentException("source file is missing");
            }

        try
        {
            Type excelType = Type.GetTypeFromProgID("Excel.Application");
            dynamic excel = Activator.CreateInstance(excelType);

            if (excel == null)
            {
                throw new System.Exception("Excel is missing");
            }

            excel.Workbooks.Open(sourceFile);
            try
            {
                dynamic workbook = excel.Workbooks[1];
                dynamic worksheets = workbook.Sheets;
                dynamic worksheet = worksheets[1];
                dynamic cells = worksheet.Cells;

                int xlCellTypeLastCell = 11;
                dynamic lastfilledcell = cells.SpecialCells(xlCellTypeLastCell, Type.Missing);
                int lastcolumn = lastfilledcell.Column;

                dynamic range = worksheet.Range("A1", "A1");//
                var v = range.EntireRow.Value;
                for(int c=1;c<= lastcolumn;c++)
                {
                    if ( v[1,c]==null)
                    {
                        Console.WriteLine("excel sheet is missing column name for column #" + c);
                        break;
                    }
                }

                workbook.Close();

                lastfilledcell = null;
                cells = null;
                range = null;
                worksheet = null;
                worksheets = null;
                workbook = null;

            }
            catch {; }

            excel.Quit();
            //try { System.Runtime.InteropServices.Marshal.ReleaseComObject(excel); } catch {; }
            try { System.Runtime.InteropServices.Marshal.FinalReleaseComObject(excel); } catch {; }
            excel = null;

        }
        catch(Exception ex)
        {

        }
    }

尝试使用 EPPLUS,使用 Epplus 可以非常轻松地解决您的问题。

暂无
暂无

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

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