c# et problème de readline - C#/.NET managed - Programmation
MarshPosté le 26-02-2007 à 17:54:15
bonjour a tous,
je me suis fraichement mis au C#, et je bute sur un problème concernant la méthode Readline() de String.
mon cas est simple, j'ai un fichier plat qui contient des requetes sql. mon but est le parcours du fichier et l'execution des requetes que celui-ci contient.
j'ouvre mon fichier correctement, puis j'execute ligne a ligne les requetes. la premiere requete de mon fichier s'execute correctement, la seconde non car le readline me retourne quelque chose qui me fait un retour chariot.
apparemment j'ai le probleme sur une requete trop longue, mais ca me semble tout de meme tres curieux.
2- insert into ta_LogForBatch(CodJob, CodAction, LibMessage, LogDate) values ('test', 1, 'ERROR [08004] [DataDirect][ODBC Sybase Wire Protocol driver][Sybase ASE]Echec de la tentative de localisation de l''entrée dans les bases de données système pour la base de données ''Sales_Infocentr'' d''après le nom. - Aucune entrée trouvée correspondant à ce nom. Vérifiez que ce nom a été entré correctement.ERROR [01S00] [DataDirect][ODBC Sybase Wire Protocol driver]Invalid attribute in connection string: SRVR.', '20070226 05:27:07')
les deux requetes passent tres bien sur le serveur, j'ai joue les requetes en les copiants et collants sous sql. le probleme ne viens donc pas du fichier.
une fois les requetes ecrites dans le fichier, mon programme fait la lecture de celui-ci, et c'est la que ca ne fonctionne plus.
voici mon code:
public void OpenLog(String sFileName) {
Console.WriteLine("****Contenu du fichier " + sFileName + "\n" );
try { StreamReader myStreamReader = new StreamReader(sPath + sFileName); String requete = myStreamReader.ReadLine(); // plantage pour la seconde requete while(requete != null) { Console.WriteLine(requete); ReinsertDataBase(requete); requete = myStreamReader.ReadLine();
la premiere requete passe et s'insere bien dans la base mais pour la seconde ligne j'ai l'erreur suivante:
voici l'erreur retournée:
insert into ta_LogForBatch(CodJob, CodAction, LibMessage, LogDate) values ('test_paul', 1, 'ERROR [08004] [DataDirect][ODBC Sybase Wire Protocol driver][Sybase ASE]Echec de la tentative de localisation de l''entrée dans les bases de données système pour la base de données ''Sales_Infocentr'' d''après le nom. - Aucune entrée trouvée correspondant à ce nom. Vérifiez que ce nom a été entré correctement.ERROR [01S00] [DataDirect][ODBC Sybase Wire Protocol driver]Invalid attribute in connection string: SRVR.', '20070226 05:27:07') The program '[2660] ReloadQuery.exe' has exited with code 0 (0x0).
voila je ne sais pas d'ou ca peut venir, d'apres le debugg, j'ai un probleme au niveau de la recuperation de la requete via la methode readline(), car la methode readline me "coupe" la requete au niveau de "Vérifiez que ce nom a été entré correctement."
Marsh Posté le 26-02-2007 à 17:54:15
bonjour a tous,
je me suis fraichement mis au C#, et je bute sur un problème concernant la méthode Readline() de String.
mon cas est simple, j'ai un fichier plat qui contient des requetes sql.
mon but est le parcours du fichier et l'execution des requetes que celui-ci contient.
j'ouvre mon fichier correctement, puis j'execute ligne a ligne les requetes.
la premiere requete de mon fichier s'execute correctement, la seconde non car le readline me retourne quelque chose qui me fait un retour chariot.
apparemment j'ai le probleme sur une requete trop longue, mais ca me semble tout de meme tres curieux.
voici le contenu de mon fichier texte:
1- insert into ta_LogForBatch(CodJob, CodAction, LibMessage, LogDate) values ('test', 0, 'action', '20070226 05:27:03')
2- insert into ta_LogForBatch(CodJob, CodAction, LibMessage, LogDate) values ('test', 1, 'ERROR [08004] [DataDirect][ODBC Sybase Wire Protocol driver][Sybase ASE]Echec de la tentative de localisation de l''entrée dans les bases de données système pour la base de données ''Sales_Infocentr'' d''après le nom. - Aucune entrée trouvée correspondant à ce nom. Vérifiez que ce nom a été entré correctement.ERROR [01S00] [DataDirect][ODBC Sybase Wire Protocol driver]Invalid attribute in connection string: SRVR.', '20070226 05:27:07')
les deux requetes passent tres bien sur le serveur, j'ai joue les requetes en les copiants et collants sous sql.
le probleme ne viens donc pas du fichier.
une fois les requetes ecrites dans le fichier, mon programme fait la lecture de celui-ci, et c'est la que ca ne fonctionne plus.
voici mon code:
public void OpenLog(String sFileName)
{
Console.WriteLine("****Contenu du fichier " + sFileName + "\n" );
try
{
StreamReader myStreamReader = new StreamReader(sPath + sFileName);
String requete = myStreamReader.ReadLine(); // plantage pour la seconde requete
while(requete != null)
{
Console.WriteLine(requete);
ReinsertDataBase(requete);
requete = myStreamReader.ReadLine();
}
myStreamReader.Close();
}
catch (Exception e)
{
Console.WriteLine("Error occured while reading" );
Console.WriteLine(e.Message);
}
}
public bool ReinsertDataBase(String SqlQuery)
{
OdbcConnection oConnect;
bool result = false;
oConnect = new OdbcConnection(GetConfig("DBConnectString" ));
try
{
oConnect.Open();
ExecuteNonQuery(oConnect, SqlQuery, 5);
result = true;
}
catch (Exception e)
{
Console.WriteLine(e.Message + "\n" );
}
return result;
}
la premiere requete passe et s'insere bien dans la base mais pour la seconde ligne j'ai l'erreur suivante:
voici l'erreur retournée:
insert into ta_LogForBatch(CodJob, CodAction, LibMessage, LogDate) values ('test_paul', 1, 'ERROR [08004] [DataDirect][ODBC Sybase Wire Protocol driver][Sybase ASE]Echec de la tentative de localisation de l''entrée dans les bases de données système pour la base de données ''Sales_Infocentr'' d''après le nom. - Aucune entrée trouvée correspondant à ce nom. Vérifiez que ce nom a été entré correctement.ERROR [01S00] [DataDirect][ODBC Sybase Wire Protocol driver]Invalid attribute in connection string: SRVR.', '20070226 05:27:07')
The program '[2660] ReloadQuery.exe' has exited with code 0 (0x0).
voila je ne sais pas d'ou ca peut venir, d'apres le debugg, j'ai un probleme au niveau de la recuperation de la requete via la methode readline(), car la methode readline me "coupe" la requete au niveau de "Vérifiez que ce nom a été entré correctement."
on dirait qu'il met un retour chariot.
Une idee?