我最近开发了一个C#应用程序,它通过目录和子目录,并在13种类型的.csv文件上应用我的if / else指令,并将信息推送到我的SQL Server数据库。
我创建了一个包含目录和文件计数的表,以及处理的日期时间,我想用这些信息填充它,所以我可以做一些比较,看看是否有任何遗漏/错误,并且有一个关于我每天在数据库中输入了多少数据的日志。有没有办法用GetFiles / GetDirectories属性做到这一点?或者使用SQLBulkCopy?还是其他任何一种C#代码?我搜索了很多,无法找到任何合适的解决方案。
感谢您的聆听。
这是我的代码:
bool _CompareFileName(string fileName, string id)
{
if (fileName.Substring(fileName.Length - id.Length, id.Length) == id) // On compare les fichiers par rapport à leur " id "
return true;
else
return false;
}
public void LogFile(string sExceptionName, string sEventName, string sControlName, int nErrorLineNo, string sFormName)
{
StreamWriter log;
if (!File.Exists("logfile.txt"))
{
log = new StreamWriter("logfile.txt");
}
else
{
log = File.AppendText("logfile.txt");
}
// Write to the file:
log.WriteLine("Data Time:" + DateTime.Now);
log.WriteLine("Exception Name:" + sExceptionName);
log.WriteLine("Event Name:" + sEventName);
log.WriteLine("Control Name:" + sControlName);
log.WriteLine("Error Line No.:" + nErrorLineNo);
log.WriteLine("Form Name:" + sFormName);
// Close the stream:
log.Close();
}
public void CsvToSql(string strCmdText) // La méthode permettant d'entrer les données du CSV à la table SQL
{
try
{
DirectoryInfo dir = new DirectoryInfo("U:/FichiersINPI/IMR_Donnees_Saisies/tc/flux/2017/06/01/");
Console.WriteLine("Recherche de fichier .csv convertis :"); //Fonction de recherche des csv convertis précédemment
//On utilise un StreamWriter pour écrire les sorties de boucle dans un .bat
using (StreamWriter writer = new StreamWriter("U:/FichiersINPI/IMR_Donnees_Saisies/tc/flux/2017/06/01/CsvSql.bat"))
foreach (var Fi in Directory.GetFiles("U:/FichiersINPI/IMR_Donnees_Saisies/tc/flux/2017/06/01/", "*.csv", SearchOption.AllDirectories)) //On précise qu'on veut tout les répértoires
{
if (_CompareFileName(Fi, "1_PM.csv")) // Boucle If pour les 13 types de fichiers
{
writer.WriteLine("Csv2Sql_new " + Fi + " IMR_INPI..PM /force"); //Personne Morale
}
else if (_CompareFileName(Fi, "2_PM_EVT.csv"))
{
writer.WriteLine("Csv2Sql_new " + Fi + " IMR_INPI..PM_EVT /force"); //Evenement Personne Morale
}
else if (_CompareFileName(Fi, "3_PP.csv"))
{
writer.WriteLine("Csv2Sql_new " + Fi + " IMR_INPI..PP /force"); // Personne Physique
}
else if (_CompareFileName(Fi, "4_PP_EVT.csv"))
{
writer.WriteLine("Csv2Sql_new " + Fi + " IMR_INPI..PP_EVT /force"); //Evenement Personne Physique
}
else if (_CompareFileName(Fi, "5_rep.csv"))
{
writer.WriteLine("Csv2Sql_new " + Fi + " IMR_INPI..Rep /force"); // Représentants
}
else if (_CompareFileName(Fi, "6_rep_nouveau_modifie_EVT.csv"))
{
writer.WriteLine("Csv2Sql_new " + Fi + " IMR_INPI..Rep_new /force"); // Modification relative aux représentants
}
else if (_CompareFileName(Fi, "7_rep_partant_EVT.csv"))
{
writer.WriteLine("Csv2Sql_new " + Fi + " IMR_INPI..Rep_supression /force"); // Supression d'un représentant
}
else if (_CompareFileName(Fi, "8_ets.csv"))
{
writer.WriteLine("Csv2Sql_new " + Fi + " IMR_INPI..Ets /force"); // Etablissements
}
else if (_CompareFileName(Fi, "9_ets_nouveau_modifie_EVT.csv"))
{
writer.WriteLine("Csv2Sql_new " + Fi + " IMR_INPI..Ets_modification /force"); // Modification relative aux établissements
}
else if (_CompareFileName(Fi, "10_ets_supprime_EVT.csv"))
{
writer.WriteLine("Csv2Sql_new " + Fi + " IMR_INPI..Ets_supression /force"); // Supression d'un établissement
}
else if (_CompareFileName(Fi, "11_obs.csv"))
{
writer.WriteLine("Csv2Sql_new " + Fi + " IMR_INPI..Obs /force"); // Observation
}
else if (_CompareFileName(Fi, "12_actes.csv"))
{
writer.WriteLine("Csv2Sql_new " + Fi + " IMR_INPI..Acte /force"); // Actes
}
else if (_CompareFileName(Fi, "13_comptes_annuels.csv"))
{
writer.WriteLine("Csv2Sql_new " + Fi + " IMR_INPI..Compte_annuel /force"); //Comptes annuels
}
else // On conclue la boucle par un catch qui arrête le traitement automatique en cas d'erreur ( Table pas assez large , fichier corrompu .. )
{
}
}
//On execute le .bat
Process.Start("CMD.exe", "/C start U:/FichiersINPI/IMR_Donnees_Saisies/tc/flux/2017/06/01/CsvSql.bat");
Console.WriteLine("Fichier bat executé avec succés , données intégrées");
}
catch (Exception ex)
{
Console.WriteLine("Il y a un eu une erreur : " + ex.ToString());
}
}