Csharp et base de données Access [Résolu]

Messages postés
21
Date d'inscription
samedi 26 février 2011
Dernière intervention
16 mai 2011
- - Dernière réponse : cs_nicolecastel
Messages postés
21
Date d'inscription
samedi 26 février 2011
Dernière intervention
16 mai 2011
- 9 mai 2011 à 13:38
Bonjour

s'il vous plais est ce que vous pouvez me donner le code qui me permet de lire un fichier.wav ("alarme.wav") stocké dans une base de données,j'ai essayé le code suivant:
private void button1_Click(object sender, EventArgs e)
{
// OdbcDataReader dr;
OdbcConnection cn = new OdbcConnection("DSN=cp1");
cn.Open();
OdbcCommand cmd1 = new OdbcCommand("select chemin from Alarme where code alarme=32", cn);
cmd1.Connection = cn;
fileName =cmd1.ToString();
wave = new WaveOut();
wave.DeviceNumber = 0;
playSound(0);

Mais il m'a donné l'erreur suivante :

"Could not find file 'C:\Users\wafa\Documents\Visual Studio 2010\Projects\alarmee\alarmee\bin\Debug\System.Data.Odbc.OdbcCommand'."

A la ligne:
"waveReader = new NAudio.Wave.WaveFileReader(fileName);" de ma fonction "playSound":

public void playSound(int deviceNumber)
{
disposeWave();// stop previous sounds before starting
waveReader = new NAudio.Wave.WaveFileReader(fileName);
var waveOut = new NAudio.Wave.WaveOut();
waveOut.DeviceNumber = deviceNumber;
var output = waveOut;
output.Init(waveReader);
output.Play();
}

Merci d'avance.
Bonne journée :)
Afficher la suite 

Votre réponse

11 réponses

Meilleure réponse
Messages postés
21
Date d'inscription
samedi 26 février 2011
Dernière intervention
16 mai 2011
3
Merci
Bonjour

j'ai enfin trouver la solution,ça marche avec ce code:

private void button1_Click(object sender, EventArgs e)
{
OdbcDataReader dr;
OdbcConnection cn = new OdbcConnection("DSN=cp1");
cn.Open();
OdbcCommand cmd1 = new OdbcCommand("select chemin from alarme where code_alarme=41", cn);
cmd1.Connection = cn;

dr =cmd1.ExecuteReader();
dr.Read();
fileName = dr.GetString(0);
wave = new WaveOut();
wave.DeviceNumber = 0;
playSound(0);
}

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 105 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_nicolecastel
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Dernière intervention
1 août 2013
0
Merci
Salut,

juste avant la ligne incriminée fais un :
MessageBox.Show(filename);

pour savoir ce que contient cette variable, et s'assurer qu'il s'agit d'une URI valide vers un fichier WAV.
Commenter la réponse de cs_jopop
Messages postés
21
Date d'inscription
samedi 26 février 2011
Dernière intervention
16 mai 2011
0
Merci
Merci d'avoir répondu,j'ai ajouté cette ligne avant "waveReader = new NAudio.Wave.WaveFileReader(fileName);" mais j'ai toujours le même problème,que dois-je faire?
Commenter la réponse de cs_nicolecastel
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Dernière intervention
1 août 2013
0
Merci
Oui je me doute que tu as toujours le problème ^^
Ce que j'aimerai savoir c'est ce que t'affiche la MessageBox.
Connaitre précisément le contenu de la variable filename.

Et sinon as-tu essayé en écrivant le nom de ton fichier en dur, plutôt que d'aller le chercher en BDD ? ça fonctionne ?
Commenter la réponse de cs_jopop
Messages postés
21
Date d'inscription
samedi 26 février 2011
Dernière intervention
16 mai 2011
0
Merci
Oui ça fonctionne mais mon projet de fin d'étude consiste à maître les fichiers son dans une base de donnée.
Le message box affiche "System.Data.ODBC.ODBCCommand" puis j'obtient le message d'erreur
Commenter la réponse de cs_nicolecastel
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Dernière intervention
1 août 2013
0
Merci
D'accord, donc le problème est bien celui que je pensais :
tu essaies de lire le fichier WAV qui s'appelle System.Data.ODBC.ODBCCommand, y'a comme un souci, non ? ^^

Ah ! et je viens même de voir l'erreur ! Elle est ici :
fileName = cmd1.ToString(); 

Or cmd1.ToString() te renvoie le type de l'objet.
Il faut exécuter ta requête puis assigner la valeur trouvée à filename . Change cette ligne par :
filename = cmd1.ExecuteScalar().ToString();
Et ça devrait fonctionner.

Pour info ExecuteScalar va executer ta requête (SELECT ...) et renvoyer la valeur de la première colonne de la première ligne du résultat.
Commenter la réponse de cs_jopop
Messages postés
21
Date d'inscription
samedi 26 février 2011
Dernière intervention
16 mai 2011
0
Merci
Maintenant j'ai cette erreur "ERROR [42000] [Microsoft][Pilote ODBC Microsoft Access] Erreur de syntaxe (opérateur absent) dans l'expression 'code alarme=32'." à la ligne "filename = cmd1.ExecuteScalar().ToString();" :(
Commenter la réponse de cs_nicolecastel
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Dernière intervention
1 août 2013
0
Merci
Oui, l'erreur vient de ta requête.
Un nom de champ ne doit pas comporter d'espace, d'où ton souci avec 'code alarme'.
Je ne sais pas comment encapsuler l'expression sous Access, il faut chercher ... ou renommer le champ directement dans ta base de données
Commenter la réponse de cs_jopop
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Dernière intervention
1 août 2013
0
Merci
Apparemment c'est les crochets, comme sous SQL Server.
Essaie donc avec "[code alarme]=32" dans ta requête.
Commenter la réponse de cs_jopop
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Dernière intervention
1 août 2013
0
Merci
Si problème résolue, marque ton dernier message (qui contient la solution) comme "réponse acceptée" ;)
Commenter la réponse de cs_jopop
Messages postés
21
Date d'inscription
samedi 26 février 2011
Dernière intervention
16 mai 2011
0
Merci
Entendu :)
Commenter la réponse de cs_nicolecastel

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.