Export csv file con DTS c#

mercoledì 26 aprile 2006 - 12.12

grillo75 Profilo | Newbie

Ciao,
bentornati dalle ferie

Sto provando da due giorni a realizzare un DTS per l'export dei dati in un file csv direttamente da c#.

Ho realizzato già diversi DTS da codice... ma questo non riesco a realizzarlo... mi fa sempre l'errore: "Operazione cancellata dall'utente" che, per esperienza, vuole dire semplicemente che c'è qualcosa che non gli piace

Qualcuno sa indicarmi qualche risorsa in c# per realizzare questa che parrebbe una cosa elementare?

Vi posto anche il mio codice in modo che se qualcuno ha idea del problema...

Grazie!

sing System;
using System.Runtime.InteropServices;
using DTS;
using System.Data.SqlClient;
using System.Data.OracleClient;
using System.IO;
using System.Threading;



namespace DataAccess
{
/// <summary>
/// Summary description for dtt_copy.
/// </summary>
public class dtt_copy_exportCsv
{
public string messaggio;
public int nRighe;

public dtt_copy_exportCsv(string[] sourcecolumns)
{
nRighe = 0;
try
{
DTS.Package objPackage = new DTS.Package();
UCOMIConnectionPointContainer cpContainer;
cpContainer = ((UCOMIConnectionPointContainer)(objPackage));
UCOMIConnectionPoint cpPoint;
PackageEventsSink PES = new PackageEventsSink();
Guid guid = new Guid("10020605-EB1C-11CF-AE6E-00AA004A34D5");
cpContainer.FindConnectionPoint(ref guid, out cpPoint);
int intCookie;
cpPoint.Advise(PES, out intCookie);

DTS.Connection objConnect1;
DTS.Connection objConnect2;
DTS.Step2 objStep;
DTS.Task objTask;
DTS.DataPumpTask2 objDataPump;
DTS.Transformation objTransformation;

objConnect1 = objPackage.Connections.New("SQLOLEDB");
objConnect1.ID = 1;
objConnect1.DataSource = "org215";
objConnect1.Catalog = "xxxx";
objConnect1.UserID = "xxxx";
objConnect1.Password = "";
objConnect1.UseTrustedConnection = false;
objPackage.Connections.Add(objConnect1);

objConnect2 = objPackage.Connections.New("DTSFlatFile");
objConnect2.ConnectionProperties.Item("Data Source").Value = @"E:\provaCsv\provaCsv.csv";
objConnect2.ConnectionProperties.Item("File Format").Value = 1;
objConnect2.ConnectionProperties.Item("Number of Column").Value = 3;
objConnect2.ConnectionProperties.Item("Mode").Value = 3;

objConnect2.ID = 2;
objConnect2.DataSource = @"E:\provaCsv\provaCsv.csv";
objConnect2.UseTrustedConnection = false;
objConnect2.UseDSL = false;
objConnect2.Reusable = true;

objPackage.Connections.Add(objConnect2);

objTask = objPackage.Tasks.New("DTSDataPumpTask");
objTask.Name = "LowerCaseTask";

objDataPump = (DTS.DataPumpTask2) objTask.CustomTask;
objDataPump.Name = "LowerCaseTask";

objStep = (DTS.Step2) objPackage.Steps.New();
objStep.Name = "LowerCaseTask";
objStep.TaskName = objDataPump.Name;
objStep.FailPackageOnError = false;
objStep.RollbackFailure = false;
objStep.AddGlobalVariables = true;
objStep.DisableStep = false;
objPackage.Steps.Add(objStep);

objDataPump.SourceConnectionID = 1;
objDataPump.SourceObjectName = "[DBnome].[dbo].[prova_2006_3]";
//objDataPump.SourceSQLStatement = "SELECT * FROM prova_2006_3";
objDataPump.DestinationConnectionID = 2;
//objDataPump.DestinationObjectName = @"E:\provaCsv\provaCsv.csv";

objDataPump.UseFastLoad = true;
objDataPump.FastLoadOptions = DTS.DTSFastLoadOptions.DTSFastLoad_Default;

objDataPump.ExceptionFileColumnDelimiter = "|";
objDataPump.ExceptionFileRowDelimiter = "\n\r";
objDataPump.AllowIdentityInserts = false;


objDataPump.FirstRow = 0;
objDataPump.LastRow = 0;

objDataPump.ExceptionFileOptions = DTS.DTSExceptionFileOptions.DTSExcepFile_AbortOnRowLogFailure;
objDataPump.DataPumpOptions = 0;

objTransformation = objDataPump.Transformations.New("DTSPump.DataPumpTransformCopy");
objTransformation.Name = "LowerCaseTransform";
int nsource = sourcecolumns.Length;
for(int ins = 0; ins < nsource; ins++)
{
if(sourcecolumns[ins] != null)
{
objTransformation.SourceColumns.AddColumn(sourcecolumns[ins], (ins+1));
objTransformation.DestinationColumns.AddColumn(sourcecolumns[ins], (ins+1));
}
}
objPackage.AutoCommitTransaction = true;
objPackage.FailOnError = true;
objTransformation.TransformFlags = 63;
objDataPump.Transformations.Add(objTransformation);
objPackage.Tasks.Add(objTask);

objPackage.WriteCompletionStatusToNTEventLog = true;
try
{
objPackage.Execute();
}
catch(Exception erroreDTS)
{
messaggio = messaggio + "Errore nella Execute: " + erroreDTS.Message;
}
this.nRighe = PES.read_nRighe();
objPackage.UnInitialize();
objPackage = null;
objConnect2.ReleaseConnection();
objConnect1.ReleaseConnection();
messaggio = messaggio + "Dati importati correttamente. Source: " + sourcecolumns[0].ToString();
}
catch (Exception e)
{
messaggio = messaggio + "Errore nella esecuzione della operazione. Errore: " + e.Message + " - Errore source: " + e.Source + " - Errore HlpLink: " + e.HelpLink + " - Errore Description: " + e.InnerException;
}
finally
{
GC.Collect();
}

}
}
}
-

Brainkiller Profilo | Guru

>Sto provando da due giorni a realizzare un DTS per l'export dei
>dati in un file csv direttamente da c#.

Ciao,
anche se non rispondo al tuo questiom ti dico come la penso io. Tempo fa ho cercato di fare la stessa cosa, richiamare e configurare dei DTS da C#. Ho persona una giornata per niente. Io credo che avendo a disposizione un SQL Server è giusto far fare i compiti che gli spettano direttamente a lui quindi piuttosto lavoro direttamente su SQL e al massimo lancio i DTS da C#, cosa un po' + semplice anche se macchinosa. Preferisco schedulare tutto su SQL direttamente.
Ciao



David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/

grillo75 Profilo | Newbie

Eh lo so... il problema sta, come sempre , su cosa si deve fare... purtroppo a me è servito crearli direttamente da codice. Ci ho perso un po' piu' di una giornata !

Per l'export cmq. mi sono accontentato di esportare un DataSet... tanto dovrebbero essere export quasi-piccoli e non dovrebbero esserci problemi...

Cmq. effettivamente i DTS da codice non sono la cosa piu' funzionale del mondo pero' una volta implementati possono risolvere un po' di problemi. La questione sta ancora nella complessità/macchinosità...

Probabilmente con SQL Server 2005 la cosa si è risolta... sperem...

Ciao e grazie cmq.
-
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5