20 c# asp.net sqlbulkcopy
我有DataSet
Excel表格填充.我想使用SQLBulk Copy在Lead_Hdr
表中插入记录LeadId
PK.
我在执行以下代码时遇到以下错误:
给定的ColumnMapping与源或目标中的任何列都不匹配
string ConStr=ConfigurationManager.ConnectionStrings["ConStr"].ToString();
using (SqlBulkCopy s = new SqlBulkCopy(ConStr,SqlBulkCopyOptions.KeepIdentity))
{
if (MySql.State==ConnectionState.Closed)
{
MySql.Open();
}
s.DestinationTableName = "PCRM_Lead_Hdr";
s.NotifyAfter = 10000;
#region Comment
s.ColumnMappings.Clear();
#region ColumnMapping
s.ColumnMappings.Add("ClientID", "ClientID");
s.ColumnMappings.Add("LeadID", "LeadID");
s.ColumnMappings.Add("Company_Name", "Company_Name");
s.ColumnMappings.Add("Website", "Website");
s.ColumnMappings.Add("EmployeeCount", "EmployeeCount");
s.ColumnMappings.Add("Revenue", "Revenue");
s.ColumnMappings.Add("Address", "Address");
s.ColumnMappings.Add("City", "City");
s.ColumnMappings.Add("State", "State");
s.ColumnMappings.Add("ZipCode", "ZipCode");
s.ColumnMappings.Add("CountryId", "CountryId");
s.ColumnMappings.Add("Phone", "Phone");
s.ColumnMappings.Add("Fax", "Fax");
s.ColumnMappings.Add("TimeZone", "TimeZone");
s.ColumnMappings.Add("SicNo", "SicNo");
s.ColumnMappings.Add("SicDesc", "SicDesc");
s.ColumnMappings.Add("SourceID", "SourceID");
s.ColumnMappings.Add("ResearchAnalysis", "ResearchAnalysis");
s.ColumnMappings.Add("BasketID", "BasketID");
s.ColumnMappings.Add("PipeLineStatusId", "PipeLineStatusId");
s.ColumnMappings.Add("SurveyId", "SurveyId");
s.ColumnMappings.Add("NextCallDate", "NextCallDate");
s.ColumnMappings.Add("CurrentRecStatus", "CurrentRecStatus");
s.ColumnMappings.Add("AssignedUserId", "AssignedUserId");
s.ColumnMappings.Add("AssignedDate", "AssignedDate");
s.ColumnMappings.Add("ToValueAmt", "ToValueAmt");
s.ColumnMappings.Add("Remove", "Remove");
s.ColumnMappings.Add("Release", "Release");
s.ColumnMappings.Add("Insert_Date", "Insert_Date");
s.ColumnMappings.Add("Insert_By", "Insert_By");
s.ColumnMappings.Add("Updated_Date", "Updated_Date");
s.ColumnMappings.Add("Updated_By", "Updated_By");
#endregion
#endregion
s.WriteToServer(sourceTable);
s.Close();
MySql.Close();
}
Run Code Online (Sandbox Code Playgroud)
Tar*_*req 40
从访问SQLSERVER 2005复制数据时遇到了同样的问题,我发现无论数据库的敏感性如何,列映射都对两个数据源都区分大小写.
Mar*_*ell 22
好吧,是吗?列名是否存在于双方?
说实话,我从不打扰过映射.我喜欢保持简单 - 我倾向于有一个临时表,看起来像服务器上的输入,然后我SqlBulkCopy
进入临时表,最后运行存储过程将表从临时表移动到实际表中; 好处:
最后的想法 - 如果您正在处理批量数据,您可以使用更好的吞吐量IDataReader
(因为这是一个流API,其中 - 作为DataTable
缓冲API).例如,我倾向于使用CsvReader作为SqlBulkCopy的源来挂起CSV导入.或者,我已经写了一些垫片XmlReader
来将每个第一级元素呈现为一行IDataReader
- 非常快.