Je ne sais pas pourquoi je reçois l'exception ci-dessus, s'il vous plaît, regardez-la ....
DataTable DataTable_Time = new DataTable("Star_Schema__Dimension_Time");
DataColumn Sowing_Day = new DataColumn();
Sowing_Day.ColumnName = "Sowing_Day";
DataColumn Sowing_Month= new DataColumn();
Sowing_Month.ColumnName = "Sowing_Month";
DataColumn Sowing_Year = new DataColumn();
Sowing_Year.ColumnName = "Sowing_Year";
DataColumn Visit_Day= new DataColumn();
Visit_Day.ColumnName = "Visit_Day";
DataColumn Visit_Month = new DataColumn();
Visit_Month.ColumnName = "Visit_Month";
DataColumn Visit_Year = new DataColumn();
Visit_Year.ColumnName = "Visit_Year";
DataColumn Pesticide_spray_day = new DataColumn();
Pesticide_spray_day.ColumnName = "Pesticide_spray_day";
DataColumn Pesticide_spray_Month = new DataColumn();
Pesticide_spray_Month.ColumnName = "Pesticide_spray_Month";
DataColumn Pesticide_spray_Year = new DataColumn();
Pesticide_spray_Year.ColumnName = "Pesticide_spray_Year";
DataTable_Time.Columns.Add(Pesticide_spray_Year);
DataTable_Time.Columns.Add(Sowing_Day);
DataTable_Time.Columns.Add(Sowing_Month);
DataTable_Time.Columns.Add(Sowing_Year);
DataTable_Time.Columns.Add(Visit_Day);
DataTable_Time.Columns.Add(Visit_Month);
DataTable_Time.Columns.Add(Visit_Year);
DataTable_Time.Columns.Add(Pesticide_spray_day);
DataTable_Time.Columns.Add(Pesticide_spray_Month);
adapter.SelectCommand = new SqlCommand(
"SELECT SowingDate,VisitDate,PesticideSprayDate " +
"FROM Transformed_Table " +
"group by SowingDate,VisitDate,PesticideSprayDate", con);
adapter.SelectCommand.CommandTimeout = 1000;
adapter.Fill(DataSet_DistinctRows, "Star_Schema__Dimension_Time");
DataTable_DistinctRows = DataSet_DistinctRows.Tables["Star_Schema__Dimension_Time"];
int row_number = 0;
int i = 3;
foreach(DataRow row in DataTable_DistinctRows.Rows)
{
DataRow flatTableRow = DataTable_Time.NewRow();
string[] Sarray= Regex.Split(row[0].ToString()," ",RegexOptions.IgnoreCase);
string[] finalsplit = Regex.Split(Sarray[0], "/", RegexOptions.IgnoreCase);
string[] Sarray1 = Regex.Split(row[1].ToString(), " ", RegexOptions.IgnoreCase);
string[] finalsplit2 = Regex.Split(Sarray1[0], "/", RegexOptions.IgnoreCase);
string[] Sarray2= Regex.Split(row[2].ToString(), " ", RegexOptions.IgnoreCase);
string[] finalsplit3 = Regex.Split(Sarray2[0], "/", RegexOptions.IgnoreCase);
flatTableRow["Sowing_Day"] = int.Parse(finalsplit[0]);
flatTableRow["Sowing_Month"] = int.Parse(finalsplit[0]);
flatTableRow["Sowing_Year"] = int.Parse(finalsplit[0]);
flatTableRow["Visit_Day"] = int.Parse(finalsplit2[0]);
flatTableRow["Visit_Month"] = int.Parse(finalsplit2[0]);
flatTableRow["Visit_Year"] = int.Parse(finalsplit2[0]);
flatTableRow["Pesticide_spray_day"] = int.Parse(finalsplit3[0]);
flatTableRow["Pesticide_spray_Month"] = int.Parse(finalsplit3[0]);
flatTableRow["Pesticide_spray_Year"] = int.Parse(finalsplit3[0]);
DataTable_Time.Rows.Add(flatTableRow);
i++;
}
con.Open();
using (SqlBulkCopy s = new SqlBulkCopy(con))
{
s.DestinationTableName = DataTable_Time.TableName;
foreach (var column in DataTable_Time.Columns)
s.ColumnMappings.Add(column.ToString(), column.ToString());
s.BulkCopyTimeout = 500;
s.WriteToServer(DataTable_Time);
}
Il est important de garder à l'esprit que les colonnes sqlBulkCopy sont sensibles à la casse pour certaines versions de SQL. Je pense que MSSQL 2005 . J'espère que ça aide
Une des raisons est que SqlBulkCopy
est sensible à la casse . Suivez les étapes suivantes:
Contains
en C #.SqlBulkCopy
.Par exemple:
//Get Column from Source table
string sourceTableQuery = "Select top 1 * from sourceTable";
// i use sql helper for executing query you can use corde sw
DataTable dtSource
= SQLHelper.SqlHelper
.ExecuteDataset(transaction, CommandType.Text, sourceTableQuery)
.Tables[0];
for (int i = 0; i < destinationTable.Columns.Count; i++)
{
string destinationColumnName = destinationTable.Columns[i].ToString();
// check if destination column exists in source table
// Contains method is not case sensitive
if (dtSource.Columns.Contains(destinationColumnName))
{
//Once column matched get its index
int sourceColumnIndex = dtSource.Columns.IndexOf(destinationColumnName);
string sourceColumnName = dtSource.Columns[sourceColumnIndex].ToString();
// give column name of source table rather then destination table
// so that it would avoid case sensitivity
bulkCopy.ColumnMappings.Add(sourceColumnName, sourceColumnName);
}
}
bulkCopy.WriteToServer(destinationTable);
bulkCopy.Close();
ASSUREpour fournir un ColumnMappings
ASSUREtoutes les valeurs du nom de la colonne source sont valides et respectent la casse.
ASSUREtoutes les valeurs du nom de la colonne de destination sont valides et respectent la casse.
RENDla source insensible à la casse
Le problème concerne la s.ColumnMappings.Add(column.ToString(), column.ToString());
et le mappage de vos tables source et de destination. Au moins une des colonnes de votre DataTable ne correspond pas à la table de destination.
Il y a plusieurs raisons, mais l'une d'entre elles peut être la non correspondance des types de données. Donc, si vous essayez d’insérer du texte dans une colonne entière.
J'ai eu cette même erreur et il s'est avéré que je mappais à une colonne qui n'existait pas dans ma base de données de destination. Assurez-vous que vos colonnes existent si vous voulez les mapper.
Dans mon cas, j'ai ajouté deux fois une colonne à la variable ColumnMappings
. J'ai enlevé le duplicata et tout a bien fonctionné.