给定的列映射与源或目标中的任何列都不匹配。 [英] The given columnmapping does not match up with any column in the source or destination.
本文介绍了给定的列映射与源或目标中的任何列都不匹配。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
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屋!
查看全文