2009-12-15 4 views
2

Bonjour à tous je suis nouveau dans wpf. donc j'ai des problèmes avec ça. Si vous m'aidez, je serai si heureux. merci tout le monde à l'avance.insérer dans sql query dans wpf

Mon problème est, ne peut pas insérer dans le nom dans la base de données dans wpf. comment puis-je le réparer? mes codes comme suit;

private void button1_Click(object sender, RoutedEventArgs e) 
{  
    try 
    { 
     string SqlString = "Insert Into UserInformation(name) Values (?)"; 
     using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|Cell.mdb;Persist Security Info=True")) 
     { 
      using (OleDbCommand cmd = new OleDbCommand(SqlString, conn)) 
      { 
       cmd.CommandType = CommandType.Text; 
       cmd.Parameters.AddWithValue("name", textBox1.Text); 
       conn.Open(); 
       cmd.ExecuteNonQuery(); 

      } 
     } 
    } 
    catch (Exception ex) 
    { } 
} 
+3

Supprimez le 'catch (Exception ex) {}' et dites-nous quelle exception vous obtenez. Laisser tomber des exceptions comme vous le faites est une très mauvaise pratique, d'ailleurs, car cela rend le débogage beaucoup plus difficile. – Heinzi

+0

Pas si vite .. Catch devrait rester là où il est! Je ne sais pas pourquoi beaucoup de gens pensent que les blocs try-catch ont quelque chose à voir avec le débogage. Au lieu de le supprimer, vous devez indiquer au débogueur d'afficher les exceptions interceptées. Debug-> Exceptions et cochez tout dans la colonne "Thrown". En outre, cela est mal étiqueté - il n'a rien à voir avec WPF. Au lieu de cela, il doit être étiqueté ADO.NET – kubal5003

+2

@kubal: Ceci est un malentendu: les blocs try-catch sont très utiles, mais * droping * exceptions (ie faire une section * vide * catch) est mal, car toutes les informations sur * qui * erreur s'est produite et * pourquoi * cette erreur s'est produite est perdue. – Heinzi

Répondre

0

Essayez d'utiliser cmd.Parameters.AddWithValue("@name", textBox1.Text);

+0

D'après ceci: http://www.microsoft.com/poland/developer/net/programowanie/dostep_do_baz.mspx Le nom du paramètre doit rester sans @. (Je sais que c'est polonais, mais le code ne change pas) – kubal5003

+2

Je ne sais pas qui m'a voté vers le bas ... mais voici un lien vers un article MSDN: http://msdn.microsoft.com/fr-fr/ library/dw70f090.aspx – CSharpAtl

+0

@CSharpAtl bonne suggestion +1 –

-1

Le problème coud ici pour être le paramètre. Dans le texte de commande, vous ne spécifiez pas son nom, mais lorsque vous l'ajoutez, il a un nom. Changer le texte de commande:

Insert Into UserInformation(name) Values (@name)

En ligne: cmd.Parameters.AddWithValue("name", textBox1.Text);

le nom du paramètre doit rester sans @.

+0

Vous m'avez voté .... et vous avez tort ..... voici un article MSDB ..... http: //msdn.microsoft.com/ en-us/library/dw70f090.aspx – CSharpAtl

+0

qui est un article MSDN – CSharpAtl

+1

@name est la syntaxe SQL Server, '?' doit être utilisé avec OLE DB, décrit dans la page MSDN que vous avez liée à –

0

Ouvre-t-il le bon fichier de base de données? Comme les personnes l'ont suggéré dans les commentaires, définissez Visual Studio pour interrompre les exceptions de première chance ou supprimer la gestion des exceptions. Le fichier de base de données doit exister et vous avez besoin des pilotes JET appropriés.

J'ai essayé votre code et cela fonctionne sans aucun problème ici (dans une application WPF ou autre). Utiliser des paramètres nommés au lieu d'un point d'interrogation était une bonne suggestion, mais cela ne semble pas être le problème. (J'ai Office 2007 et .NET 3.5 SP1 installé, mais je doute que cela compte).

Utilisez-vous une application de navigateur WPF (cbap)? Parce que vous ne serez pas en mesure d'accéder au système de fichiers local (et donc la base de données) si vous êtes. Les applications de navigateur WPF s'exécutent avec des autorisations isolées, un peu comme une application de navigateur Silverlight.

+0

salut thoarin, j'ai Office 2007 et net 3.5 SP1. J'ai enlevé essayer les blocs de cacth.mais ça ne marche toujours pas. Je ne sais pas pourquoi il se comporte comme ça. et j'ai une autre fenêtre, je peux faire fonctionner la requête de sélection dans la même application. – neki

+0

@neki: sans exception, vous devriez pouvoir voir un message d'erreur si quelque chose ne va pas, à moins que le code ne soit pas exécuté du tout. Essayez de vérifier l'exécution en définissant un point d'arrêt sur la ligne 'chaîne SqlString' et en mode débogage. Suivez l'exécution avec F10 après la rupture du débogueur. S'il ne se casse pas, votre gestionnaire 'Click' n'est pas attaché au bouton. – Thorarin