首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >给定的ColumnName 'ACTUAL DATE‘与数据源中的任何列都不匹配

给定的ColumnName 'ACTUAL DATE‘与数据源中的任何列都不匹配
EN

Stack Overflow用户
提问于 2019-05-11 01:22:24
回答 2查看 219关注 0票数 0

我正在使用sqlBulkCopy将我的excel文件导入到sql数据库中,但只要我开始导入,就会弹出这个错误。我正在使用MVC5和EntityFramework6。我已经检查了excel文件和sql表中相同的列,一切看起来都很好。我已将StgtId设置为身份字段,而不是通过excel表导入。如果我没弄错的话,我想这是由桌子来处理的。

代码语言:javascript
复制
   public ActionResult Structure(HttpPostedFileBase postedFile)
    {
        string filePath = string.Empty;
        if (postedFile != null)
        {
            string path = Server.MapPath("~/Uploads/");
            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }

            filePath = path + Path.GetFileName(postedFile.FileName);
            string extension = Path.GetExtension(postedFile.FileName);
            postedFile.SaveAs(filePath);

            string conString = string.Empty;
            switch (extension)
            {
                case ".xls": //Excel 97-03.
                    conString = ConfigurationManager.ConnectionStrings["Excel03ConString"].ConnectionString;
                    break;
                case ".xlsx": //Excel 07 and above.
                    conString = ConfigurationManager.ConnectionStrings["Excel07ConString"].ConnectionString;
                    break;
            }

            DataTable dt = new DataTable();
            conString = string.Format(conString, filePath);

            using (OleDbConnection connExcel = new OleDbConnection(conString))
            {
                using (OleDbCommand cmdExcel = new OleDbCommand())
                {
                    using (OleDbDataAdapter odaExcel = new OleDbDataAdapter())
                    {
                        cmdExcel.Connection = connExcel;

                        //Get the name of First Sheet.
                        connExcel.Open();
                        DataTable dtExcelSchema;
                        dtExcelSchema = connExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                        string sheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString();
                        connExcel.Close();

                        //Read Data from First Sheet.
                        connExcel.Open();
                        cmdExcel.CommandText = "SELECT * From [" + sheetName + "]";
                        odaExcel.SelectCommand = cmdExcel;
                        odaExcel.Fill(dt);
                        connExcel.Close();
                    }
                }
            }

            conString = ConfigurationManager.ConnectionStrings["Constring"].ConnectionString;
            using (SqlConnection con = new SqlConnection(conString))
            {
                using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(con))
                {
                    //Set the database table name.
                    sqlBulkCopy.DestinationTableName = "dbo.bomStructuredImportTgt";

                    //[OPTIONAL]: Map the Excel columns with that of the database table
                    sqlBulkCopy.ColumnMappings.Add("ACTUAL DATE", "ActualDate");
                    sqlBulkCopy.ColumnMappings.Add("Description", "Description");
                    sqlBulkCopy.ColumnMappings.Add("Level", "Level");
                    sqlBulkCopy.ColumnMappings.Add("PARENT_PARTNO", "ParentPartNumber");
                    sqlBulkCopy.ColumnMappings.Add("PART_NO", "PartNumber");
                    sqlBulkCopy.ColumnMappings.Add("PART_NAME", "PartName");
                    sqlBulkCopy.ColumnMappings.Add("HNS", "HNS");
                    sqlBulkCopy.ColumnMappings.Add("DWGSZ", "DWGSZ");
                    sqlBulkCopy.ColumnMappings.Add("PART", "Part");
                    sqlBulkCopy.ColumnMappings.Add("L1QTY", "L1Quantity");
                    sqlBulkCopy.ColumnMappings.Add("COLORM", "ColorM");
                    sqlBulkCopy.ColumnMappings.Add("ATTCD", "ATTCD");
                    sqlBulkCopy.ColumnMappings.Add("KD", "KD");
                    sqlBulkCopy.ColumnMappings.Add("SELL", "Sell");
                    sqlBulkCopy.ColumnMappings.Add("PL_GROUP", "PlGroup");
                    sqlBulkCopy.ColumnMappings.Add("PL1", "PL1");
                    sqlBulkCopy.ColumnMappings.Add("AT1", "AT1");
                    sqlBulkCopy.ColumnMappings.Add("PL2", "PL2");
                    sqlBulkCopy.ColumnMappings.Add("AT2", "AT2");
                    sqlBulkCopy.ColumnMappings.Add("PL3", "PL3");
                    sqlBulkCopy.ColumnMappings.Add("PLANT", "Plant");
                    sqlBulkCopy.ColumnMappings.Add("SHRPCMINMAX", "SHRPCMINMAX");

                    con.Open();
                    sqlBulkCopy.WriteToServer(dt);
                    con.Close();
                }
            }
        }

        return View();
    }[I have entered a screenshot of all the fields in my table.][1]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-11 04:10:57

尝试使用源列的序号而不是名称。例如。

代码语言:javascript
复制
sqlBulkCopy.ColumnMappings.Add(0, "ActualDate");

由其中一个overloads to the SqlBulkCopyColumnMappingCollection.Add() method支持。

票数 0
EN

Stack Overflow用户

发布于 2019-05-11 01:37:48

尝试在名称"ACTUAL DATE“前后添加方括号。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56082216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档