Meilleur auteur de réponses
problem de la base de donnée sql server (insertion des données)

Question
-
j'ai crée une méthode qui fait insérer des profiles des user dans la table "C2RP.dbo.profile" mais j'ai rien trouvé dans la base de donnée je vou montre le code et svp aidez moi à la rectifier :
private void inserer(object sender,routedEventArgs e)
{
string chemin="textBox2";
string nom;
string prenom;
string actif;
DataTable m_Datatable=new DataTable();
sqlConnection pConnection = new sqlConnection();
sqlDataAdapter adapter = new sqlDataAdapter();
pConnection.open();
using (FileStream fs = File.OpenRead("c:\\chemin.csv")){
using (StreamReader sr = new StreamReader(fs))
{
while (!sr.EndOfStream)
{
string[] values = sr.ReadLine().Split(';');
nom = values[2];
prenom = values[7];
actif= values[11];
// construction de la requête
string QueryString = "Insert into C2RP.dbo.profile (pr_actif,pr_nom,pr_prenom) VALUES (actif,nom,prenom)";
//Exécution de la requête
SqlCommand command = new SqlCommand(QueryString, pConnection);
command.CommandTimeout = 0;
adapter.SelectCommand = command;
adapter.Fill(m_DataTable);//Fermeture de la connection
pConnection.Close();
}
}
}
}
Réponses
Toutes les réponses
-
-
Bonjour a tous,
Biche ça ne serait il pas "SqlCommand. ExecuteNonQuery" ?
( Exécute une instruction Transact-SQL sur la connexion et retourne le nombre de lignes affectées)
Je connais pas encore tres bien SQL et tout ses mystère :)
A bientot
Cordialement, Troxsa -
Bonjour,Il y a 2 problèmes dans votre approche :
- Vous ne remplissez pas votre DataTable m_DataTable avec vos données.
- Vous avez affecté votre commande INSERT à la propriété SelectCommand et non InsertCommand de votre DataAdapter.
Voila une correction de votre code :private void inserer(object sender,routedEventArgs e) { // création de la DataTable et de sa structure DataTable m_DataTable=new DataTable(); m_DataTable.Columns.Add("nom", typeof(string)); m_DataTable.Columns.Add("prenom", typeof(string)); m_DataTable.Columns.Add("actif", typeof(bool)); // lecture du fichier et insertion dans la DataTable using (FileStream fs = File.OpenRead("c:\\chemin.csv")) { using (StreamReader sr = new StreamReader(fs)) { while (!sr.EndOfStream) { string[] values = sr.ReadLine().Split(';'); m_DataTable.Add(new object[] {values[2], values[7], values[11]}); } } } // écriture en base using (sqlConnection pConnection = new sqlConnection()) { string QueryString = "Insert into C2RP.dbo.profile (pr_actif,pr_nom,pr_prenom) VALUES (actif,nom,prenom)"; using (SqlCommand command = new SqlCommand(QueryString, pConnection)) { using (SqlDataAdapter adapter = new SqlDataAdapter()) { pConnection.Open(); adapter.InsertCommand = command; adapter.Update(m_DataTable); } } } }
Si vous ne voulez pas passer par une DataTable et un DataAdapter vous pouvez exécuter vos requète directement à chaque lecture de ligne :private void inserer(object sender,routedEventArgs e) { // lecture du fichier et insertion using (sqlConnection pConnection = new sqlConnection()) { pConnection.Open(); string QueryString = "Insert into C2RP.dbo.profile (pr_actif,pr_nom,pr_prenom) VALUES (@actif,@nom,@prenom)"; using (SqlCommand command = new SqlCommand(QueryString, pConnection)) { cmd.Parameters.Add("nom", SqlDbType.NVarChar); cmd.Parameters.Add("prenom", SqlDbType.NVarChar); cmd.Parameters.Add("actif", SqlDbType.Bit); using (FileStream fs = File.OpenRead("c:\\chemin.csv")) { using (StreamReader sr = new StreamReader(fs)) { while (!sr.EndOfStream) { string[] values = sr.ReadLine().Split(';'); cmd.Parameters["nom"].Value = values[2]; cmd.Parameters["prenom"].Value = values[7]; cmd.Parameters["actif"].Value = values[11]; cmd.ExecuteNonQuery(); } } } }
En espérant avoir pu vous adier.
Guillaume -
merci mais il affiche des erreurs comme :
m_DataTable.Add(new object[] {values[2], values[7], values[11]}); : System.Data.DataTable ne ccontient pas une défiition de Add.
using (sqlConnection pConnection = new sqlConnection()) : jeton'using' non valide dans la déclaration
avec les autres lignes jeton'(' non valide etc -
-
-