我们如何知道数据表中包含的数据的数据类型是什么?

时间:2019-01-16 08:32:34

标签: c# datatable

我想检查excel数据的每个数据的数据类型。但是当我检查excel数据时,它会将所有数据显示为 string 类型。

C#,oleDb

  //For validating Datatype
        public List<string> ValidateDataType(DataRow row, List<DataExchangeDefinition> dataExchangeDefinitionList, List<string> dataColumnList)
        {
            //var dataColumnString = String.Join(", ", dataColumnList.ToArray());

            Dictionary<string, Type> types = new Dictionary<string, Type>();
            types.Add("int", typeof(System.Int32));
            //types.Add("int", typeof(System.Int64));
            types.Add("DateTime", typeof(System.DateTime));
            types.Add("decimal", typeof(System.Decimal));
            types.Add("float", typeof(System.Double));
            types.Add("String", typeof(System.String));


            List<string> dataTypeErrorList = new List<string>();
            foreach (DataExchangeDefinition dt in dataExchangeDefinitionList)
            {
                if (dataColumnList.Any(str => str == dt.FieldName))
                {
                    if (!row.IsNull(dt.FieldName))
                    {
                        var dat = row[dt.FieldName];
                        var t = row[dt.FieldName].GetType().Name;               
                        var conObj = Convert.ChangeType(dat,types[t]);

                        string error = (from e in row.ItemArray
                                        where conObj.GetType().Name.Contains(dt.DataType) == false
                                        select dt.FieldName).DefaultIfEmpty("").FirstOrDefault();
                        if (error != "")
                        {
                            dataTypeErrorList.Add(error);
                        }
                    }                                        
                }
            }

            return dataTypeErrorList;
        }

结果我将其作为列表传递。列表包含错误列名称。 使用Linq完成检查

这是我导入的excel数据

这是数据表中的数据。在这里,我添加了数字 2 而不是字符串。但实际上它是字符串。但是在这里我想检测为 int ,否则我的验证将失败。 enter image description here

0 个答案:

没有答案