Validate Value存在于DataTable的多个列中
本文关键字:DataTable Value 存在 Validate | 更新日期: 2023-09-27 18:10:48
我正在通过asp.net c# web应用程序导入电子表格。在将excel -> datatable结果传递给存储过程之前,我需要验证其结果。简而言之,如果枚举每个所需列的所有行来验证是否存在值,有人有更快的解决方案吗?
执行james的建议;我最后做的是克隆原始表,它只克隆模式。然后将我想要的列设置为AllowDBNull = false。最后一步是在TryCatch语句中进行合并。如果合并失败,则会向用户抛出一个必需的字段验证错误。
public DataTable UploadSpreadsheetData(string tempFile)
{
try
{
__filepath = tempFile;
this.onConnectionStringChanged();
string _sheetname = GetSheetName();
DataTable _importedData = ReadTable(_sheetname);
DataTable _newTableStructure = GetClone(_importedData);
MergeDataTables(_importedData, _newTableStructure);
return _newTableStructure;
}
catch (Exception ex)
{
throw ex;
}
finally
{
this.Connection.Close();
this.Connection.Dispose();
DeleteTempFile(tempFile);
}
}
private DataTable GetClone(DataTable table)
{
DataTable _cloneTable = table.Clone();
_cloneTable.Columns["System Code"].AllowDBNull = false;
return _cloneTable;
}
private static void MergeDataTables(DataTable _importedData,
DataTable _newTableStructure)
{
try
{
_newTableStructure.Merge(_importedData, true, MissingSchemaAction.Add);
}
catch (Exception ex)
{
// Add a reference to required value structure for the
// end user to verify validity of the spreadsheet
throw new ApplicationException(String.Format("The following
error was encountered while importing the spreadsheet data. {0}.
Please check the spreadsheet to ensure all required values are
present.", ex.Message));
}
}
如果"缺失"列的值为null
(DBNull.Value
),则可以执行:
// or whatever means you use to get your table...
DataTable dt = new DataTable();
// define your columns (whether imported or manual)
// set the columns that must have a value to deny DBNull, for example if col 3 & 4:
dt.Columns[3].AllowDBNull = false;
dt.Columns[4].AllowDBNull = false;
一旦这些列被设置为AllowDBNull = false
,那么当你设置为false
时,如果之前加载了数据,你会得到一个异常,或者如果数据是在设置为false
后添加的,你会得到一个异常行Add
。
所以,如果可能的话,先设置你的列,但是如果这些是在导入中定义的,只要在try/catch中设置你的列为AllowDBNull = false
,如果你捕获异常,你就知道你的列有问题。
如果值是空字符串,这当然不起作用。但如果你需要的话,我可以挖掘更多…