给定的列映射与源或目标中的任何列都不匹配。 [英] The given columnmapping does not match up with any column in the source or destination.

查看:140
本文介绍了给定的列映射与源或目标中的任何列都不匹配。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Files =Directory.GetFiles(GlobalLibrary.PickupInboundDirectory);
          FileArray = FilesList.GetIBPckpList(Files, dt);
          ic.ImportCSV("Inbound_Pickup", FileArray, ',');
          FileArray.Clear();
          Application.Exit();







public DataTable ImportCSV(string Type, List<string> FilesList, char Separator)
 {
     DataTable dtIO= new DataTable();
     AddDefaultFirstRecord(Type, ref dtIO);

     foreach (string file in FilesList)
     {
         string[] Lines = File.ReadAllLines(file);

         for(int i=0;i<Lines.Length;i++)
         {
             string[] FieldValues=Lines[i].Split(Separator);

             if (FieldValues.Length == 1)
                 FieldValues = Lines[i].Split('|');
             if (FieldValues.Length == 1)
                 FieldValues = Lines[i].Split('\t');
             //if(FieldValues.Length==1)
             //    FieldValues=Lines[i].Split(


             try
             {
                 DataRow dr = Fetch_DR(Type, FieldValues, dtIO);
                 dtIO.Rows.Add(dr);
             }
             catch (Exception ex)
             {
                 LogWriter.LogWrite("Error", ex.Message + " Type: " +Type+" "+ Lines[i]);
             }
         }
     }

     DAL_BulkIO dal = new DAL_BulkIO();
     dal.Insert_BulkIO(Type,dtIO);
     return dtIO;
 }







private void AddDefaultFirstRecord(string Type,ref DataTable dtOutboundPick)
{

    //creating DataTable
    DataTable dt = new DataTable();
    DataRow dr;
    switch (Type)
    {
        case "Inbound_Pickup":
            dtOutboundPick.TableName = "Inbound_Pickup";
            //creating columns for DataTable
            dtOutboundPick.Columns.Add(new DataColumn("sd_awb", typeof(string)));
            dtOutboundPick.Columns.Add(new DataColumn("sd_dtpu", typeof(DateTime)));
            dtOutboundPick.Columns.Add(new DataColumn("sd_acct", typeof(string)));
            dtOutboundPick.Columns.Add(new DataColumn("sd_bill", typeof(string)));
            dtOutboundPick.Columns.Add(new DataColumn("sd_gbl_prod", typeof(string)));
            dtOutboundPick.Columns.Add(new DataColumn("sd_orig", typeof(string)));
            dtOutboundPick.Columns.Add(new DataColumn("sd_dest", typeof(string)));
            dtOutboundPick.Columns.Add(new DataColumn("sd_shpr", typeof(string)));
            dtOutboundPick.Columns.Add(new DataColumn("sd_cnsg", typeof(string)));
            dtOutboundPick.Columns.Add(new DataColumn("sd_pcs", typeof(double)));
            dtOutboundPick.Columns.Add(new DataColumn("sd_wght", typeof(double)));
            dtOutboundPick.Columns.Add(new DataColumn("sd_dwght", typeof(double)));
            dtOutboundPick.Columns.Add(new DataColumn("sd_stel", typeof(string)));
            dtOutboundPick.Columns.Add(new DataColumn("sd_czip", typeof(string)));
            dtOutboundPick.Columns.Add(new DataColumn("PL_CHKPT_DATE", typeof(DateTime)));
            break;
    }
    dr = dt.NewRow();
    dt.Rows.Add(dr);


}







public DataRow Fetch_DR(string Type, string[] FieldValues, DataTable dt)
 {

     DataRow dr = dt.NewRow();
     switch (Type)
     {
         case "Inbound_Pickup":
             {
                 dr["sd_awb"] = FieldValues[0].Trim();
                 dr["sd_dtpu"] = ConvertToDt(FieldValues[1].Trim());
                 dr["sd_acct"] = FieldValues[2].Trim();
                 dr["sd_bill"] = FieldValues[3].Trim();
                 dr["sd_gbl_prod"] = FieldValues[4].Trim();
                 if (FieldValues[4].Trim() == "")
                 {
                     throw new Exception("Product should not be emtpy");
                 }
                 dr["sd_orig"] = FieldValues[5].Trim();
                 dr["sd_dest"] = FieldValues[6].Trim();
                 dr["sd_shpr"] = FieldValues[7].Trim();
                 dr["sd_cnsg"] = FieldValues[8].Trim();
                 dr["sd_pcs"] = FieldValues[9].Trim();
                 dr["sd_wght"] = FieldValues[10].Trim();
                 dr["sd_dwght"] = FieldValues[11].Trim();
                 dr["sd_stel"] = FieldValues[12].Trim();
                 dr["sd_czip"] = FieldValues[13].Trim();
                 dr["PL_CHKPT_DATE"] = ConvertToDt(FieldValues[14].Trim());
             }
             break;
     }
     return dr;
 }







public bool Insert_BulkIO(string Type, DataTable dtIO)
  {
      try
      {
          if (dtIO.Rows.Count > 0)
          {

              using (SqlConnection con = new SqlConnection(consString))
              {
                  using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(con))
                  {
                      //Set the database table name
                      sqlBulkCopy.DestinationTableName = "dbo."+Type;

                      //[OPTIONAL]: Map the DataTable columns with that of the database table

                      foreach (DataColumn col in dtIO.Columns)
                      {
                          sqlBulkCopy.ColumnMappings.Add(col.ColumnName, col.ColumnName);
                      }
                      con.Open();
                      sqlBulkCopy.WriteToServer(dtIO);
                      con.Close();
                  }
              }
          }
          return true;
      }
      catch (Exception ex)
      {
          LogWriter.LogWrite("Error","Type :"+Type+" Exception: "+ex.Message);
          return false;
      }
  }













USE [DSR_N]
GO

/****** Object:  Table [dbo].[Inbound_Pickup]    Script Date: 02/21/2018 15:51:01 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[Inbound_Pickup](
	[ sd_awb] [nvarchar](255) NULL,
	[sd_dtpu] [datetime] NULL,
	[sd_acct] [nvarchar](255) NULL,
	[sd_bill] [nvarchar](255) NULL,
	[sd_gbl_prod] [nvarchar](255) NULL,
	[sd_orig] [nvarchar](255) NULL,
	[sd_dest] [nvarchar](255) NULL,
	[sd_shpr] [nvarchar](255) NULL,
	[sd_cnsg] [nvarchar](255) NULL,
	[sd_pcs] [float] NULL,
	[sd_wght] [float] NULL,
	[sd_dwght] [float] NULL,
	[sd_stel] [nvarchar](255) NULL,
	[sd_czip] [nvarchar](255) NULL,
	[PL_CHKPT_DATE] [datetime] NULL
) ON [PRIMARY]

GO





我尝试过的事情:



1.我检查ed每个列的数据类型并与sql匹配

3.我检查了表命名。

4我还检查了列名称的大小写敏感性。

看起来一切都很好,但不明白为什么系统在线上给出错误sqlBulkCopy.WriteToServer(dtIO);



What I have tried:

1. I checked the data type of each column and matched with sql
2. I checked the column naming
3. I checked table naming.
4. I have also checked case sensitity of column names.
Looks everything good but dont understand why the system is giving error on line sqlBulkCopy.WriteToServer(dtIO);

推荐答案

我删除了下面的代码并且事情开始起作用了,当列,数据类型和大小写相同时,仍然不明白它为什么会产生问题。



I removed below code and things started working, still don't understand why it created problem when the columns, datatypes and case sensitveness was same.

foreach (DataColumn col in dtIO.Columns)
                     {
                         sqlBulkCopy.ColumnMappings.Add(col.ColumnName, col.ColumnName);
                     }


这篇关于给定的列映射与源或目标中的任何列都不匹配。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆