web-dev-qa-db-fra.com

C # Insertion de données d'un formulaire dans une base de données d'accès

J'ai commencé à découvrir C# et sont coincés avec l'insertion d'informations à partir de zones de texte dans une base de données Access lorsqu'un bouton de clic est utilisé.

Le problème que j'obtiens est pendant le processus d'ajout. Le code exécute le Try... Catch part, puis renvoie une erreur indiquant "Moteur de base de données Microsoft Access" et ne donne aucun indice.

Voici le code:

namespace WindowsFormsApplication1
{
    public partial class FormNewUser : Form
    {
        public FormNewUser()
        {
            InitializeComponent();
        }

        private void BTNSave_Click(object sender, EventArgs e)
        {
            OleDbConnection conn = new OleDbConnection();
            conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\kenny\Documents\Visual Studio 2010\Projects\Copy Cegees\Cegees\Cegees\Login.accdb";

            String Username = TEXTNewUser.Text;
            String Password = TEXTNewPass.Text;

            OleDbCommand cmd = new OleDbCommand("INSERT into Login (Username, Password) Values(@Username, @Password)");
            cmd.Connection = conn;

            conn.Open();

            if (conn.State == ConnectionState.Open)
            {
                cmd.Parameters.Add("@Username", OleDbType.VarChar).Value = Username;
                cmd.Parameters.Add("@Password", OleDbType.VarChar).Value = Password;

                try
                {
                    cmd.ExecuteNonQuery();
                    MessageBox.Show("Data Added");
                    conn.Close();
                }
                catch (OleDbException ex)
                {
                    MessageBox.Show(ex.Source);
                    conn.Close();
                }
            }
            else
            {
                MessageBox.Show("Connection Failed");
            }
        }
    }
}
12
Kentao

Password est un mot réservé . Mettez ce nom de champ entre crochets pour éviter de confondre le moteur de base de données.

INSERT into Login (Username, [Password])
9
HansUp

Cette réponse vous sera utile au cas où, si vous travaillez avec Bases de données alors prenez surtout l'aide de l'instruction try-catch block , qui vous aidera et vous guidera avec votre code. Ici, je vous montre comment insérer des valeurs dans la base de données avec un événement Click Button.

 private void button2_Click(object sender, EventArgs e)
    {
        System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection();
        conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;" +
    @"Data source= C:\Users\pir fahim shah\Documents\TravelAgency.accdb";

     try
       {
           conn.Open();
           String ticketno=textBox1.Text.ToString();                 
           String Purchaseprice=textBox2.Text.ToString();
           String sellprice=textBox3.Text.ToString();
           String my_querry = "INSERT INTO Table1(TicketNo,Sellprice,Purchaseprice)VALUES('"+ticketno+"','"+sellprice+"','"+Purchaseprice+"')";

            OleDbCommand cmd = new OleDbCommand(my_querry, conn);
            cmd.ExecuteNonQuery();

            MessageBox.Show("Data saved successfuly...!");
          }
         catch (Exception ex)
         {
             MessageBox.Show("Failed due to"+ex.Message);
         }
         finally
         {
             conn.Close();
         }
4
Pir Fahim Shah

et ne donne aucun indice

Oui, malheureusement, votre code ignore tous ces indices. Jetez un œil à votre gestionnaire d'exceptions:

catch (OleDbException  ex)
{
    MessageBox.Show(ex.Source);
    conn.Close();
}

Tout ce que vous examinez est le source de l'exception. Qui, dans ce cas, est "Moteur de base de données Microsoft Access". Vous n'examinez pas le message d'erreur lui-même, ou la trace de pile, ou toute exception interne, ou quelque chose d'utile à propos de l'exception.

N'ignorez pas l'exception, elle contient des informations sur ce qui s'est mal passé et pourquoi.

Il existe différents outils de journalisation (NLog, log4net, etc.) qui peuvent vous aider à consigner des informations utiles sur une exception. À défaut, vous devez au moins capturer le message d'exception, la trace de la pile et toute exception interne. Actuellement, vous ignorant l'erreur, c'est pourquoi vous n'êtes pas en mesure de résoudre l'erreur.

Dans votre débogueur, placez un point d'arrêt à l'intérieur du bloc catch et examinez les détails de l'exception. Vous constaterez qu'il contient beaucoup d'informations.

1
David
 private void Add_Click(object sender, EventArgs e) {
 OleDbConnection con = new OleDbConnection(@ "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\HP\Desktop\DS Project.mdb");
 OleDbCommand cmd = con.CreateCommand();
 con.Open();
 cmd.CommandText = "Insert into DSPro (Playlist) values('" + textBox1.Text + "')";
 cmd.ExecuteNonQuery();
 MessageBox.Show("Record Submitted", "Congrats");
 con.Close();
} 
0
Irtaza Ali