首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查数据表列名称是否为默认列名称C#

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

Stack Overflow用户
提问于 2019-09-27 22:21:43
回答 3查看 426关注 0票数 1

如果列名称是空字符串,我必须将excel数据放入DataTable example copied from this.中,当数据进入DataTable时,空名称会转换为动态名称,如F1,F3,F22。如果列名有一个有效值,这是可以的,但是当我尝试获取列名为空的列名时,动态F22名称正在获取。F22在excel表格中不存在,我必须通知用户他有无效的空列名称。

因此,问题是如何判断列名是否是由OLEDB动态设置的?

代码语言:javascript
复制
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);
        }
    }
}
EN

回答 3

Stack Overflow用户

发布于 2019-09-27 22:39:45

我想我理解这个问题,因为您需要读取数据库模式来判断列名是否在表中?(正确吗?)

如果您可以通过连接字符串访问SQL Server数据库,我有一个工具可以读取数据库架构。

这是我的开源项目DataTier.Net https://github.com/DataJuggler/DataTier.Net (end plug)中的一个示例

这使用Nuget包: DataJuggler.Net

代码语言:javascript
复制
// read database schema
database = sqlConnector.LoadDatabaseSchema(database);

数据库有一个tables集合,每个表都有一个Fields集合。

SQL Database Connector类执行LoadDatabaseSchema:

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

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

上面的Nuget包还用于DB Compare,用于比较两个SQL Server数据库的数据库架构,并报告任何差异:

https://github.com/DataJuggler/DBCompare

希望没有人会认为这是垃圾邮件,因为我确实免费提供了所有内容,我只是试图回答“如何读取数据库架构”的问题,以便在这种情况下,他可以确定列名是否是真正的列名。我想我对这个问题的理解是正确的,如果没有解释清楚你需要什么,请更好地解释。

票数 0
EN

Stack Overflow用户

发布于 2019-09-27 23:13:47

如果您能够使用Excel.Application互操作,那么选择并选中第一行将显示列是否缺少名称,例如:

代码语言:javascript
复制
    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)
        {

        }
    }
票数 0
EN

Stack Overflow用户

发布于 2019-09-28 01:30:24

尝试使用EPPLUS,您可以很容易地使用Epplus解决您的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58136446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档