Executer une commande SQL sous c# (débutant)

Signaler
Messages postés
16
Date d'inscription
jeudi 22 septembre 2005
Statut
Membre
Dernière intervention
19 janvier 2006
-
Messages postés
16
Date d'inscription
jeudi 22 septembre 2005
Statut
Membre
Dernière intervention
19 janvier 2006
-
Bonjour,
Je souhaiterai savoir comment executer une commande SQL Server (Express 2005) sous visual C# ?

D'avance merci

11 réponses

Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Membre
Dernière intervention
30 octobre 2008
55
Une commande SqlServer ?
Tu veux dire une Requete ? Ou tu parles d'un autre type de commande




Mx
MVP C#
Messages postés
16
Date d'inscription
jeudi 22 septembre 2005
Statut
Membre
Dernière intervention
19 janvier 2006

Merci MorpoinMx, il s'agit de requettes type INSERT ...
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Membre
Dernière intervention
30 octobre 2008
55
Pour faire un insert, c'est tres simple :
Il faut prélablement avoir déclaré l'espace de nom System.Data.SqlClient


<HR>
string rq =
"ta requete";

// Creation d'une connexion
SqlConnection connection =
new
SqlConnection(
"Ta chaine de connexion");

// Creation d'un objet Command
SqlCommand sqlCmd =
new
SqlCommand(rq, connection);

try
{
connection.Open();
// Ouverture de la connexion
int maj = sqlCmd.ExecuteNonQuery();
// Exectution de la requete.
}

catch (
SqlException se) {
MessageBox.Show(se.Message); }

finally { connection.Close(); }

<HR>

Pour trouver la chaine de connexion qui correspond a sql server, direction ce site
A noter que pour executer une requete de type SELECT, il faudra executer la méthode ExecuteReader() a la place d'ExecuteNonQuery()

Mx
MVP C#
Messages postés
107
Date d'inscription
lundi 16 janvier 2006
Statut
Membre
Dernière intervention
15 juillet 2009

Je viens de me faire griller!! J'avais presque fini l'exemple

>> NiCoMpX <<
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Membre
Dernière intervention
30 octobre 2008
55
Si tu as un exemple qui différe du mien, il ne faut pas hésiter a le poster
Le but, c'est qu'un maximum de possibilités soient offertes aux développeurs qui ont des questions. Et souvent, on apprend d'autres techniques ainsi.
Bon bien sur, pour ce type de question, c'est difficile de faire très différent...



Mx
MVP C#
Messages postés
16
Date d'inscription
jeudi 22 septembre 2005
Statut
Membre
Dernière intervention
19 janvier 2006

Merci à tous pour vos réponses.
Je viens de tester et je bloque à sqlCmd.ExecuteNonQurey().
J'utilise un stream pour lire un fichier CSV et je place les valeurs dans un tableau num[]. C'est ses valeurs que je veux copier dans ma base mais l'execution de la requette plante, car il ne veux pas de variable. Comment faire ?
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Membre
Dernière intervention
30 octobre 2008
55
Tu pourrais nous donner un morceau de code, et la valeur que prend ta requete ?


Mx
MVP C#
Messages postés
16
Date d'inscription
jeudi 22 septembre 2005
Statut
Membre
Dernière intervention
19 janvier 2006

Voici mon code

while ((line = sr.ReadLine()) != null)
{
//Console.WriteLine(line);
num = line.Split(';');
for (int i = 0; i < num.Length; i++)
{
string strRequette = "INSERT INTO table (data1,data2,data3,data4,data5,data6,data7) VALUES (num[0],num[1],num[2],num[3],num[4],num[5],num[6]);";
string strConnexion = "Data Source=acer-ferrari\\sqlexpress; Integrated Security=SSPI;" + "Initial Catalog=loto";
SqlConnection oConnection = new SqlConnection(strConnexion);
SqlCommand oCommand = new SqlCommand(strRequette, oConnection);
oConnection.Open();
oCommand.ExecuteNonQuery();
oConnection.Close();
}
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Membre
Dernière intervention
30 octobre 2008
55
Oui c'est normal, car ta requete ne prend pas les valeurs de num[0], num[1], mais directement "num[0]", "num[1]" ... en valeur.

Pour faire vite :
string strRequette = string.format("INSERT INTO table (data1,data2,data3,data4,data5,data6,data7) VALUES ({0}, {1}, {2}, {3}, {4}, {5}, {6}, {7})", num[0],num[1],num[2],num[3],num[4],num[5],num[6]) );

Si data1, data2, etc ne sont pas de type numérique, n'oublie pas d'entourer les valeurs a prendre par des ' '

Mais tout ca n'est pas tres propre, il faut plutot utiliser une requete paramétrée : exemple ici


Mx
MVP C#
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
14 février 2014
38
évite aussi d'ouvrir et de fermer la connexion à chaque tour de ta boucle... tu vas donner mal au coeur à ton sqlServer

Sébastien FERRAND
[MVP Visual C#]
Messages postés
16
Date d'inscription
jeudi 22 septembre 2005
Statut
Membre
Dernière intervention
19 janvier 2006

J'ai essayé ta soluce, mais je me heurte à un pb de formattage de ta requette apres VALUES. Je ne suis pas familié avec les {0}....