我正在开发一个应用程序来读取xlsx文件,进行一些验证并插入到数据库中.不幸的是,当我尝试读取标记为数字的列(带有EAN-13代码的fe)时,我得到了一个int的miniumum值.用户没有看到这个,因为Excel正确显示它.
如何让它以纯文本形式读取文件?我知道我可以使用OLEBD,但我还需要动态编辑文件,因此epplus ExcelPackage是最佳选择.
这是我使用的代码:
FileInfo file = new FileInfo(path);
MainExcel = new OfficeOpenXml.ExcelPackage(file);
{
var ws = MainExcel.Workbook.Worksheets.First();
DataTable tbl = new DataTable();
for (var rowNum = 1; rowNum <= ws.Dimension.End.Row; rowNum++) //currently loading all file
{
var wsRow = ws.Cells[rowNum, 1, rowNum, ws.Dimension.End.Column];
var row = tbl.NewRow();
foreach (var cell in wsRow)
{
row[cell.Start.Column - 1] = cell.Text;
}
tbl.Rows.Add(row);
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我枚举列的方式
foreach (var firstRowCell in ws.Cells[3, 1, 3, ws.Dimension.End.Column])
{
System.Type typeString = System.Type.GetType("System.String") ;
tbl.Columns.Add( firstRowCell.Text …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种方法来为某些表启用日志记录更改.
我已经尝试并测试过以编程方式将表添加到数据库日志中,但到目前为止取得了各种成功 - 有时它有时它不起作用(大多数情况下它没有) - 似乎只是将行插入DatabaseLog表中并不是很有效.
我尝试过:
使用正确的tableId,fieldId,logType和添加行.
域名已被指定为"管理员",主要公司,空白场和子公司,结果相同.
我创建了处理插入的类,主要的两个函数是:
public static void InsertBase(STR tableName, domainId _domain='Admin')
{
//base logging for insert, delete, uptade on fieldid=0
DatabaseLog DBDict;
TableId _tableId;
DatabaseLogType _logType;
fieldId _fieldId =0;
List logTypes;
int i;
ListEnumerator enumerator;
;
_tableId= tableName2id(tableName);
logTypes = new List(Types::Enum);
logTypes.addEnd(DatabaseLogType::Insert);
logTypes.addEnd(DatabaseLogType::Update);
logTypes.addEnd(DatabaseLogType::Delete);
logTypes.addEnd(DatabaseLogType::EventInsert);
logTypes.addEnd(DatabaseLogType::EventUpdate);
logTypes.addEnd(DatabaseLogType::EventDelete);
enumerator = logTypes.getEnumerator();
while(enumerator.moveNext())
{
_logType = enumerator.current();
select * from dbdict where
dbdict.logTable==_tableId && dbdict.logField==_fieldId
&& dbdict.logType==_logType;
if(!dbDict) //that means it doesnt exist …Run Code Online (Sandbox Code Playgroud) 我偶然发现我们的数据库中的一些旧代码表现得并不像预期的那样.我设法将其缩小到条款的NULL价值效果IN.
我派生出一个测试来证明它:
declare @test nvarchar(50) = '8620M/9010';
declare @testLT nvarchar(50) = '8004/9010';
declare @testLV nvarchar(50) = null; --'asd'
select case when @test not in (@testLT, @testLV) then 1 else 0 end
Run Code Online (Sandbox Code Playgroud)
如果testLV为null,则NOT IN返回与IN子句相同的结果.
我想了解这种行为背后的机制.有人可以解释一下吗?
PS.我可能会用EXCEPT子句替换它