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));
        }
    }

Validate Value存在于DataTable的多个列中

如果"缺失"列的值为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,如果你捕获异常,你就知道你的列有问题。

如果值是空字符串,这当然不起作用。但如果你需要的话,我可以挖掘更多…