这句错误是 ADO.NET(DataTable、DataAdapter、SqlBulkCopy 等)抛出来的,意思是:
“在内存里的 DataTable 'projectInfo' 中找不到名为 'createtime' 的列,但外部数据源(或映射)却要求提供这个列。”
“在内存里的 DataTable 'projectInfo' 中找不到名为 'createtime' 的列,但外部数据源(或映射)却要求提供这个列。”
常见触发场景
-
SqlBulkCopy.ColumnMappings.Add("createtime", "createtime");
而 DataTable 里根本没有这叫 createtime 的列。 -
DataAdapter.Update 时,数据库表比 DataTable 多了一列,且源列映射没去掉。
-
手动构造 DataTable 时漏了 createtime,但随后用 DataRow 或 XML 填充时外部结构要求它存在。
解决思路(三选一即可)
-
给 DataTable 补上缺失的列
csharp
if (!projectInfo.Columns.Contains("createtime"))projectInfo.Columns.Add("createtime", typeof(DateTime));
-
如果数据库端已经把 createtime 删了,就把映射也删掉
csharp
// 找到对应映射并 Remove
var map = bulkCopy.ColumnMappings.Cast<SqlBulkCopyColumnMapping>().FirstOrDefault(m => m.SourceColumn == "createtime");
if (map != null) bulkCopy.ColumnMappings.Remove(map);
-
用 ColumnMappings 时只映射实际存在的列,或者干脆让 SqlBulkCopy 自动匹配(不手动 AddMappings)。