OVH Cloud OVH Cloud

probleme insert base sql

5 réponses
Avatar
mike
bonjour a tous,
je lis un fichier .log.Je dois ensuite mettre chaque ligne lu dans un base
sql mais j'obtiens un message d'erreur lors de l'execution de la requete:Une
exception non gérée du type 'System.Data.SqlClient.SqlException' s'est
produite dans system.data.dll

Informations supplémentaires : Erreur système.
voivi mon code:

merci d'avance
public void btDonnéRemplirBdd_Click(object sender, System.EventArgs e)
{
chkbDonnéRempliBdd.Checked=true;
chkbDonnéRempliBdd.Enabled=false;

FileStream fichier=new
System.IO.FileStream(filDialDonnéChoiFicLog.FileName,System.IO.FileMode.Open,FileAccess.Read);
string ligne;
StreamReader lect=new StreamReader(fichier);
ligne=lect.ReadLine();
conexsql.Open();
while(ligne!=null)
{
ecrire(ligne);
ligne = lect.ReadLine();
}
conexsql.Close();
}

public void ecrire(string ligne)
{
SqlCommand insert=new SqlCommand("insert into essai(col)
values(@lig)",conexsql);
insert.Parameters.Add("@lig",SqlDbType.VarChar,150,"col");
insert.Parameters["@lig"].Value=ligne;
insert.ExecuteNonQuery();
}

5 réponses

Avatar
Cirfain
Salut,

D'abord pour avoir plus d'info rajoute ce qui suit :

try
{
//ton code de modif de base ici
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}

Cela te permettra d'avoir le message d'erreur exacte.

Ensuite :

Systematiquement quand tu as une ligne plein de texte a
inserer dans du SQL, et que tu ne maitrise pas le contenu
à la place de :
insert.Parameters["@lig"].Value=ligne;

ecrits :
insert.Parameters["@lig"].Value=ligne.Replace("'", "''");

En d'autre termes remplace toutes les apostrophes par des
apostrophes doubles sinon tu auras une erreur SQL,
l'apostrophe etant le délimiteur de texte.

En espérant que cela t'aide.
a++



-----Message d'origine-----
bonjour a tous,
je lis un fichier .log.Je dois ensuite mettre chaque


ligne lu dans un base
sql mais j'obtiens un message d'erreur lors de


l'execution de la requete:Une
exception non gérée du


type 'System.Data.SqlClient.SqlException' s'est
produite dans system.data.dll

Informations supplémentaires : Erreur système.
voivi mon code:

merci d'avance
public void btDonnéRemplirBdd_Click(object


sender, System.EventArgs e)
{
chkbDonnéRempliBdd.Checked=true;
chkbDonnéRempliBdd.Enabledúlse;

FileStream fichier=new
System.IO.FileStream


(filDialDonnéChoiFicLog.FileName,System.IO.FileMode.Open,F
ileAccess.Read);
string ligne;
StreamReader lect=new StreamReader


(fichier);
ligne=lect.ReadLine();
conexsql.Open();
while(ligne!=null)
{
ecrire(ligne);
ligne = lect.ReadLine();
}
conexsql.Close();



}

public void ecrire(string ligne)
{
SqlCommand insert=new SqlCommand


("insert into essai(col)
values(@lig)",conexsql);
insert.Parameters.Add


("@lig",SqlDbType.VarChar,150,"col");
insert.Parameters


["@lig"].Value=ligne;
insert.ExecuteNonQuery();
}
.



Avatar
Alexis KARTMANN
Essai tout simplement :
public void ecrire(string ligne)
{
SqlCommand insert=new SqlCommand(string.Format("insert into essai(col)
values('{0}')", ligne.Replace("'","''")),conexsql);
insert.ExecuteNonQuery();
}
Avatar
cirfain
Voui c'est pas mal non plus ça.

Mais dans un try catch, c'est qd même plus propre :p

A+

-----Message d'origine-----
Essai tout simplement :
public void ecrire(string ligne)
{
SqlCommand insert=new SqlCommand(string.Format("insert


into essai(col)
values('{0}')", ligne.Replace("'","''")),conexsql);
insert.ExecuteNonQuery();
}


.



Avatar
Fred
"Cirfain" a écrit dans le message de
news: 06bc01c50dd5$66ca3450$
Salut,

D'abord pour avoir plus d'info rajoute ce qui suit :

try
{
//ton code de modif de base ici
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}

Cela te permettra d'avoir le message d'erreur exacte.

Ensuite :

Systematiquement quand tu as une ligne plein de texte a
inserer dans du SQL, et que tu ne maitrise pas le contenu
à la place de :
insert.Parameters["@lig"].Value=ligne;

ecrits :
insert.Parameters["@lig"].Value=ligne.Replace("'", "''");

En d'autre termes remplace toutes les apostrophes par des
apostrophes doubles sinon tu auras une erreur SQL,
l'apostrophe etant le délimiteur de texte.

En espérant que cela t'aide.
a++



-----Message d'origine-----
bonjour a tous,
je lis un fichier .log.Je dois ensuite mettre chaque


ligne lu dans un base
sql mais j'obtiens un message d'erreur lors de


l'execution de la requete:Une
exception non gérée du


type 'System.Data.SqlClient.SqlException' s'est
produite dans system.data.dll

Informations supplémentaires : Erreur système.
voivi mon code:

merci d'avance
public void btDonnéRemplirBdd_Click(object


sender, System.EventArgs e)
{
chkbDonnéRempliBdd.Checked=true;
chkbDonnéRempliBdd.Enabledúlse;

FileStream fichier=new
System.IO.FileStream


(filDialDonnéChoiFicLog.FileName,System.IO.FileMode.Open,F
ileAccess.Read);
string ligne;
StreamReader lect=new StreamReader


(fichier);
ligne=lect.ReadLine();
conexsql.Open();
while(ligne!=null)
{
ecrire(ligne);
ligne = lect.ReadLine();
}
conexsql.Close();



}

public void ecrire(string ligne)
{
SqlCommand insert=new SqlCommand


("insert into essai(col)
values(@lig)",conexsql);
insert.Parameters.Add


("@lig",SqlDbType.VarChar,150,"col");
insert.Parameters


["@lig"].Value=ligne;
insert.ExecuteNonQuery();
}
.




Bonsoir,
Tu es sûr pour les apostrophes ? J'étais persuadé que de passer par les
parameters dispensait de ce genre de manip.
Avatar
Cirfain
> Fred à ecrit :



Bonsoir,
Tu es sûr pour les apostrophes ? J'étais persuadé que de


passer par les
parameters dispensait de ce genre de manip.




Je n'en sais rien, je ne passe jamais par ce genre de
procedé, je fais mes requetes moi-même.
Mais dans le cas comme il n'avait pas "trapper" l'erreur
avec un try catch, deviner n'est pas simple, j'ai supposé
que c'était ça le problème...

A+