C# вставка данных из формы в базу данных access

Я начал узнавать о C# и застряли с вставкой информации из текстовых полей в Access база данных при использовании кнопки щелчка.

проблема, которую я получаю, заключается в процессе добавления. Код выполняет Try... Catch часть, а затем возвращает сообщение об ошибке "Microsoft Access Database Engine" и не дает никаких подсказок.

вот код:

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:UserskennyDocumentsVisual Studio 2010ProjectsCopy CegeesCegeesCegeesLogin.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");
            }
        }
    }
}

5 ответов


Password это зарезервированное слово. Скобка это имя поля, чтобы избежать путаницы в DB engine.

INSERT into Login (Username, [Password])

этот ответ поможет в случае, если вы работаете с Базы Данных затем в основном воспользуйтесь помощью оператора try-catch block, который поможет и поможет вам с вашим кодом. Здесь я показываю вам, как вставить некоторые значения в базу данных с помощью события нажатия кнопки.

 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();
         }

и не дает никаких зацепок

Да, к сожалению, Ваш код игнорирует все эти подсказки. Взгляните на обработчик исключений:

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

все, что вы изучаете, это источник исключения. Который, в данном случае, является "Microsoft Access Database Engine". Вы не изучаете само сообщение об ошибке, или трассировку стека, или любое внутреннее исключение, или что-нибудь полезное о исключение.

не игнорируйте исключение, оно содержит информацию о том, что пошло не так и почему.

существуют различные инструменты ведения журнала (NLog, log4net и т. д.) который может помочь вам зарегистрировать полезную информацию об исключении. В противном случае вы должны по крайней мере захват сообщения об исключении, трассировки стека и любых внутренних исключений. В настоящее время вы игнорировать ошибка, поэтому вы не можете разрешить ошибка.

в отладчике поместите точку останова внутри catch заблокируйте и изучите детали исключения. Вы обнаружите, что он содержит много информации.


 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();
} 

  private void addToolStripMenuItem_Click(object sender, EventArgs e)
    {
        Form2 klass = new Form2();
        klass.ShowDialog();
        string my_querry = "INSERT INTO test(Sname,Ssurname,SNumber,SDNP,Sexam)VALUES('" + klass.getName() + "','" + klass.getSurname() + "','" + klass.getNumber() + "','" + klass.getDNP() + "','" + klass.getExam() + "')";
        dbconn = new OleDbConnection(conn + dbfile);
        dbconn.Open();
        try
        {
            OleDbCommand cmd = new OleDbCommand(my_querry, dbconn);
            cmd.ExecuteNonQuery();
            MessageBox.Show("success....");
        }
        catch(Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        dbconn.Close();
    }