[英]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.