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

Signaler
Messages postés
21
Date d'inscription
samedi 26 février 2011
Statut
Membre
Dernière intervention
16 mai 2011
-
Messages postés
21
Date d'inscription
samedi 26 février 2011
Statut
Membre
Dernière intervention
16 mai 2011
-
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 :)

11 réponses

Messages postés
21
Date d'inscription
samedi 26 février 2011
Statut
Membre
Dernière intervention
16 mai 2011

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);
}
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
11
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.
Messages postés
21
Date d'inscription
samedi 26 février 2011
Statut
Membre
Dernière intervention
16 mai 2011

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?
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
11
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 ?
Messages postés
21
Date d'inscription
samedi 26 février 2011
Statut
Membre
Dernière intervention
16 mai 2011

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
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
11
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.
Messages postés
21
Date d'inscription
samedi 26 février 2011
Statut
Membre
Dernière intervention
16 mai 2011

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();" :(
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
11
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
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
11
Apparemment c'est les crochets, comme sous SQL Server.
Essaie donc avec "[code alarme]=32" dans ta requête.
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
11
Si problème résolue, marque ton dernier message (qui contient la solution) comme "réponse acceptée" ;)
Messages postés
21
Date d'inscription
samedi 26 février 2011
Statut
Membre
Dernière intervention
16 mai 2011

Entendu :)