我有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(); }
Tareq.. 40
从访问SQLSERVER 2005复制数据时遇到了同样的问题,我发现无论数据库的敏感性如何,列映射都对两个数据源都区分大小写.
从访问SQLSERVER 2005复制数据时遇到了同样的问题,我发现无论数据库的敏感性如何,列映射都对两个数据源都区分大小写.
好吧,是吗?列名是否存在于双方?
说实话,我从不打扰过映射.我喜欢保持简单 - 我倾向于有一个临时表,看起来像服务器上的输入,然后我SqlBulkCopy
进入临时表,最后运行存储过程将表从临时表移动到实际表中; 好处:
如果导入在任何时候失败,则不会出现实时数据损坏问题
我可以在SPROC附近进行交易
我可以让bcp在没有记录的情况下工作,在知道SPROC将被记录的情况下是安全的
它很简单;-p(没有乱码)
最后的想法 - 如果您正在处理批量数据,您可以使用更好的吞吐量IDataReader
(因为这是一个流API,其中 - 作为DataTable
缓冲API).例如,我倾向于使用CsvReader作为SqlBulkCopy的源来挂起CSV导入.或者,我已经写了一些垫片XmlReader
来将每个第一级元素呈现为一行IDataReader
- 非常快.