Impossible de créer fichier

cs_eyango Messages postés 45 Date d'inscription jeudi 24 août 2006 Statut Membre Dernière intervention 30 janvier 2014 - 4 mars 2013 à 16:27
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 - 5 mars 2013 à 14:29
Salut Tous,

j'essaye de lire un fichier EXCEL et récupérer certaines informations dessus afin d enrichir ma BD...
Lorsque j'éxécute cette action en local... tout ce passe normalement... une fois que je suis sur un poste Client j ai l'erreur suivante:


Erreur du serveur dans l'application '/murcas'.
--------------------------------------------------------------------------------

Impossible de créer un fichier.
Description : Une exception non gérée s'est produite au moment de l'exécution de la requête Web actuelle. Contrôlez la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.

Détails de l'exception: System.Data.OleDb.OleDbException: Impossible de créer un fichier.

Erreur source:

Une exception non gérée s'est produite lors de l'exécution de la requête Web actuelle. Les informations relatives à l'origine et l'emplacement de l'exception peuvent être identifiées en utilisant la trace de la pile d'exception ci-dessous.

Trace de la pile:


[OleDbException (0x80004005): Impossible de créer un fichier.]
System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection) +337
System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) +86
System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup) +31
System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) +76
System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) +126
System.Data.OleDb.OleDbConnection.Open() +43
System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +123
System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +319
System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable) +92
Presentation.Importer_Cotisation.ImporterButton_Click(Object sender, EventArgs e) in C:\Users\Bayard Joel\Documents\Visual Studio 2010\Fasas_Murcas\Presentation\Importer_Cotisation.aspx.cs:46
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +118
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +112
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5563

-----------------------------------------------------------------------------------------------------

voici le code qui manipule le fichier EXCEL:


protected void ImporterButton_Click(object sender, EventArgs e)
{
if ((DateCotisation.SelectedDate != null) && (FileUpload1.FileName != ""))
{

OleDbConnection conExcel = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:" + FileUpload1.FileName + @";Extended Properties=""Excel 12.0 Xml;HDR=YES"";");
SqlConnection conSQL = new SqlConnection(@"Data Source=BAYARDJOEL\BAYARDJOEL;Initial Catalog=MURCASFASAS;Integrated Security=True;MultipleActiveResultSets=True");

OleDbDataAdapter Da = new OleDbDataAdapter();

DataSet Ds = new DataSet();

OleDbCommand comm = new OleDbCommand("SELECT * FROM [RH$]", conExcel);


Da.SelectCommand = comm;
Da.Fill(Ds, "RH" );
conSQL.Open();
int nCount = 0;
foreach (DataRow row in Ds.Tables["RH"].Rows)
{

string date = DateCotisation.SelectedDate.ToString();
BLL.ServiceCotisation SC = new BLL.ServiceCotisation();
DataAccesEF.cotisation DaC = new DataAccesEF.cotisation();
BLL.ServiceSuivi_Pret SSP = new BLL.ServiceSuivi_Pret();
BLL.ServiceAdherernt SA = new BLL.ServiceAdherernt();
DataAccesEF.suivi_pret DaSP = new DataAccesEF.suivi_pret();
BLL.ServicePret SP = new BLL.ServicePret();
string Mois = SC.ConvertirDateMois(Convert.ToDateTime(DateCotisation.SelectedDate));
string Annee = SC.ConvertirDateAnnee(Convert.ToDateTime(DateCotisation.SelectedDate));
DataAccesEF.pret DaP = new DataAccesEF.pret();
DataAccesEF.archive_pret DaArch = new DataAccesEF.archive_pret();
BLL.ServiceArchivePret SAP = new BLL.ServiceArchivePret();
/*si le statutReel de la table Prêt est = "En cours" il écrit dans la table de suivi de prêt*/
DaC.Matricule = (row[0]).ToString();
DaC.CotisationMurcas = Convert.ToInt32(row[10]);
DaC.ReversementMurcas = Convert.ToInt32(row[13]);
DaC.RappelMurcas = Convert.ToInt32(row[14]);
DaC.CotisationFasas = Convert.ToInt32(row[15]);
DaC.ReversementFasas = Convert.ToInt32(row[16]);
DaC.RappelFasas = Convert.ToInt32(row[17]);
DaC.TotalMurcas = Convert.ToInt32(row[18]);
DaC.TotalFasas = Convert.ToInt32(row[19]);
DaC.DateCotisation = Convert.ToDateTime(DateCotisation.SelectedDate);
DaC.Mois = SC.RetourneMois(Mois);
DaC.Annee = SC.ConvertirDateAnnee(Convert.ToDateTime(DateCotisation.SelectedDate));

DateTime Dt = new DateTime(2012, 08, 01);
DaC.NbreMoisApres1erAout = SC.DiffDate(Dt, (DateTime)DateCotisation.SelectedDate);

if (SC.getCotisByMatr(DaC.Matricule) == true)
{
DaC.CotisationTotalMurcas = DaC.CotisationMurcas + SC.DernierCotisationMurcas(DaC.Matricule);
DaC.CotisationTotalFasas = DaC.CotisationFasas + SC.DernierCotisationFasas(DaC.Matricule);
}
else
{
DaC.CotisationTotalMurcas = DaC.CotisationMurcas;
DaC.CotisationTotalFasas = DaC.CotisationFasas;
}

/*méthode bool qui vérifie la présence du matricule*/ if ((SP.CheckPretByMatriculeStatut(DaC.Matricule, 2)) == true)
{

/*retourne le code pret correspondant au matricule en cours*/
string code = SP.GetCodPretByMatrStat(DaC.Matricule);

if (SSP.RetrouveSuiviPretByCodePretMatricule(code))
{

/*Calcul du Montant TOtal remboursé*/

/*tu insères dans la table de suivi de prets en faisant tous les calculs*/
DaSP.PretMurcas = Convert.ToInt32(row[11]);
DaSP.RappelMurcas = Convert.ToInt32(row[12]);
DaSP.PretReel = DaSP.PretMurcas + DaSP.RappelMurcas - DaC.ReversementMurcas;
if (DaSP.PretReel != 0)
{
DaSP.NbreEcheanceRest = SSP.DernierNbreEcheance(code) - 1;
DaSP.MontantPlusTauRest = SSP.DernierMontantPlusTauxRest(code) - DaSP.PretReel;
DaSP.CodePret = code;
DaSP.DateSuivi = DateTime.Now;
DaSP.Mois = SC.RetourneMois(Mois);
DaSP.Annee = Annee;
DaSP.Amortissement = SSP.DernierAmortissement(code);
DaSP.CapitalRestantDu = SSP.CalculCapitalRestant(code) - SSP.DernierAmortissement(code);
DaSP.MontantTotalRembourse = SSP.CalculCapitalRestant(code) - DaSP.CapitalRestantDu + SSP.DernierMontantTotalRembourse(code);
Double interet12 = (Double)(Math.Round((Double)(DaSP.CapitalRestantDu) * 0.01189207115));
DaSP.Interets = (int)interet12;
DaSP.Variable = (int)(DaSP.Amortissement + interet12);
DaSP.Constante = SSP.DernierConstante(code);
DaSP.Matricule = DaC.Matricule;
DaSP.ReversementPretMurcas = 0;
}
else
{
DaSP.NbreEcheanceRest = SSP.DernierNbreEcheance(code);
DaSP.MontantPlusTauRest = SSP.DernierMontantPlusTauxRest(code) - DaSP.PretReel;
DaSP.CodePret = code;
DaSP.DateSuivi = DateTime.Now;
DaSP.Mois = SC.RetourneMois(Mois);
DaSP.Annee = Annee;
DaSP.Amortissement = SSP.DernierAmortissement(code);
DaSP.CapitalRestantDu = SSP.CalculCapitalRestant(code) - SSP.DernierAmortissement(code);
DaSP.MontantTotalRembourse = SSP.CalculCapitalRestant(code) - DaSP.CapitalRestantDu + SSP.DernierMontantTotalRembourse(code);
Double interet12 = (Double)(Math.Round((Double)(DaSP.CapitalRestantDu) * 0.01189207115));
DaSP.Interets = (int)interet12;
DaSP.Variable = (int)(DaSP.Amortissement + interet12);
DaSP.Constante = SSP.DernierConstante(code);
DaSP.Matricule = DaC.Matricule;
DaSP.ReversementPretMurcas = 0;
}

if (DaSP.MontantPlusTauRest <= 100)
{
SP.UpdatePretTerminé(DaP, code);
DaP.DateFinReelle = DateCotisation.SelectedDate;
MessageBox.Show("le Prêt de code " + code + " demandé par le matricule: " + DaC.Matricule + " est arrivé à échéances.", "FIN DU PRET");


DaArch.Codepret = code;
DaArch.CodeStatP = 3;
DaArch.DateDebut = SP.returnDate_debutPret(code);
DaArch.DateFinReelle = DateCotisation.SelectedDate;
DaArch.Matricule = SP.returnMatriculePret(code);
DaArch.ModePaiement = SP.returnModePaiementPret(code);
DaArch.Montant = SP.returnMontantPret(code);
DaArch.MontanTaux = SP.returnMontant_TauxPret(code);
DaArch.NbreEcheance = SP.returnNbreEcheancePret(code);
DaArch.NomBanque = SP.returnNomBanquePret(code);
DaArch.NumCheque = SP.returnNumchequePret(code);
SAP.AjouterArchivePret(DaArch);
/*Envoyer un Mail automatique au gestionnaires RH et à l'age§nt qui a demandé le prêt*/

}

SSP.AjouterSuiviPret(DaSP);
//}
}
else
{
DaSP.PretMurcas = Convert.ToInt32(row[11]);
DaSP.RappelMurcas = Convert.ToInt32(row[12]);
DaSP.PretReel = DaSP.PretMurcas + DaSP.RappelMurcas - DaC.ReversementMurcas;
DaSP.NbreEcheanceRest = SP.returnNbreEcheancePret(code);
DaSP.MontantPlusTauRest = SP.returnMontant_TauxPret(code) - DaSP.PretReel;
DaSP.CodePret = code;
DaSP.DateSuivi = DateTime.Now;
DaSP.Mois = SC.RetourneMois(Mois); //SC.ConvertirDateMois(Convert.ToDateTime(DaSP.DateSuivi));
DaSP.Annee = Annee;
Double Amort = (Double)(Math.Round((Double)SP.returnMontantPret(code) / (Double)SP.returnNbreEcheancePret(code)));
DaSP.Amortissement = (int)Amort;
Double interet12 = (Double)(Math.Round((Double)SP.returnMontantPret(code) * 0.01189207115));
DaSP.Interets = (int)interet12;
DaSP.Variable = (int)(DaSP.Amortissement + DaSP.Interets);
Double Const = (Double)(SP.returnMontantPret(code) / SP.returnNbreEcheancePret(code));
DaSP.Constante = (int)(Math.Round(Const));
DaSP.NbreEcheanceRest = SP.returnNbreEcheancePret(code) - 1;
DaSP.Matricule = DaC.Matricule;
DaSP.CapitalRestantDu = SP.returnMontantPret(code) - DaSP.Amortissement;
DaSP.MontantTotalRembourse = DaSP.Amortissement;
SSP.AjouterSuiviPret(DaSP);
}
}

/*Insérer dans la table suivi des prêts*/
SC.AjouterCotisation(DaC);
conSQL.Close();
nCount++;



}
MessageBox.Show(nCount + " Enregistrements Insérés...", "Import Fichier Cotisations");
Response.Redirect("~/Cotisations_V.aspx");

}
else
{
Label5.Visible = true;
Label6.Visible = true;
}
}


Merci d'avance

3 réponses

cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
5 mars 2013 à 14:01
Salut,

l'upload réel du fichier se passe bien en amont de cette event ?
Le contrôle FileUpload envoie le flux au serveur, mais c'est à ta charge d'en faire la copie sur le serveur.
0
cs_eyango Messages postés 45 Date d'inscription jeudi 24 août 2006 Statut Membre Dernière intervention 30 janvier 2014
5 mars 2013 à 14:18
Salut JOPOP,
merci d avoir répondu...
effectivement l'upload réel du fichier se passe bien(le controle fonctionne sans retourner d'erreurs)
STP dis moi
1- comment faire la copie sur le serveur?
2- Que devriendra le chemin (valeur) de "Data Source" de l'objet SQLConnection?
3- Pourquoi a t on besoin d'effectuer une copie de ce fichier?


Merci
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
5 mars 2013 à 14:29
1- FileUpload.SaveAs
2- Je connais pas SQL Server, toutefois si la BDD est accessible depuis ton serveur alors la chaîne de connexion ne devrait pas changer.
3 - Comment t'écrirais ta chaîne de connexion Excel sans avoir de fichier physique ? Tu ne peux pas ouvrir de connexion sur un flux.
0
Rejoignez-nous