Csharp et base de données Access

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

11 réponses

cs_nicolecastel Messages postés 21 Date d'inscription samedi 26 février 2011 Statut Membre Dernière intervention 16 mai 2011
9 mai 2011 à 12:45
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);
}
3
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
5 mai 2011 à 16:54
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.
0
cs_nicolecastel Messages postés 21 Date d'inscription samedi 26 février 2011 Statut Membre Dernière intervention 16 mai 2011
5 mai 2011 à 17:07
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?
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
5 mai 2011 à 17:15
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 ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_nicolecastel Messages postés 21 Date d'inscription samedi 26 février 2011 Statut Membre Dernière intervention 16 mai 2011
5 mai 2011 à 17:30
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
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
5 mai 2011 à 17:35
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.
0
cs_nicolecastel Messages postés 21 Date d'inscription samedi 26 février 2011 Statut Membre Dernière intervention 16 mai 2011
5 mai 2011 à 20:03
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();" :(
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
5 mai 2011 à 21:04
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
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
5 mai 2011 à 21:08
Apparemment c'est les crochets, comme sous SQL Server.
Essaie donc avec "[code alarme]=32" dans ta requête.
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
9 mai 2011 à 13:34
Si problème résolue, marque ton dernier message (qui contient la solution) comme "réponse acceptée" ;)
0
cs_nicolecastel Messages postés 21 Date d'inscription samedi 26 février 2011 Statut Membre Dernière intervention 16 mai 2011
9 mai 2011 à 13:38
Entendu :)
0
Rejoignez-nous