Как обновить базу данных MS Access - PullRequest
1 голос
/ 25 марта 2011

Мне нужна простая программа для обновления полей базы данных MS Access. Я следовал онлайн-учебнику , который был прост и имел работающий код. Но, кажется, это больше не работает, когда я переопределяю это. Вот мой код.

 public partial class Form1 : Form
 {
    public Form1()
    {
        InitializeComponent();
    }

    OleDbConnection conn;
    OleDbDataAdapter da;
    DataSet ds;
    OleDbCommandBuilder cb;
    DataRow row;

    private void Form1_Load(object sender, EventArgs e)
    {
        conn = new OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0; Data Source = C:\\test.mdb");
        da = new OleDbDataAdapter("select* from user", conn);
        ds = new DataSet();

        conn.Open();
        da.Fill(ds, "user");
        conn.Close();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        cb = new OleDbCommandBuilder(da);
        row = ds.Tables["user"].Rows[0];

        row[3] = "hello";

        da.Update(ds, "user");
    }
}

user - это имя таблицы моей базы данных. Я попытался обновить строку поля [0] (первая строка) и столбец [3] (четвертый столбец) строкой hello .. Я получаю ошибку Synatx error in FROM clause. После некоторого чтения в Интернете я обнаружил, что user должно быть в квадратных скобках. И я сделал это так.

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    OleDbConnection conn;
    OleDbDataAdapter da;
    DataSet ds;
    OleDbCommandBuilder cb;
    DataRow row;

    private void Form1_Load(object sender, EventArgs e)
    {
        conn = new OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0; Data Source = C:\\test.mdb");
        da = new OleDbDataAdapter("select* from [user]", conn);
        ds = new DataSet();

        conn.Open();
        da.Fill(ds, "user");
        conn.Close();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        cb = new OleDbCommandBuilder(da);
        row = ds.Tables["user"].Rows[0];

        row[3] = "hello";

        da.Update(ds, "user");
    }
}

Когда я это делаю, я получаю новую ошибку, Syntax error in UPDATE statement. Я много читал в интернете, но, похоже, никто не решает эту проблему. Все они использовали команду Update по-разному. Я знаю только так. Что не так в моем коде? Тем более, что это работало раньше. Или это не способ обновления правильной техники? Пожалуйста, помогите мне с кодом, а не с техническими условиями, которые я не соблюдаю. Или любая другая процедура для обновления в MS Access?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 25 марта 2011

Я никогда раньше не пытался получить доступ к базе данных Access с помощью .NET DataSet, но я думаю, что вы могли бы заменить код в button1_Click на что-то вроде этого:

private void button1_Click(object sender, EventArgs e)
{
   conn.Open();

   string query = "UPDATE [user] SET [columnname] = ? WHERE id = ?";
   var accessUpdateCommand = new OleDbCommand(query, conn);
   accessUpdateCommand.Parameters.AddWithValue("columnname", "hello");
   accessUpdateCommand.Parameters.AddWithValue("id", 123); // Replace "123" with the variable where your ID is stored. Maybe row[0] ?
   da.UpdateCommand = accessUpdateCommand;
   da.UpdateCommand.ExecuteNonQuery();

   conn.Close();
}

Да, я знаювы потеряете некоторые преимущества DataSet, но исследования показывают, что обычная функция OleDbDataAdapter.Update не очень хорошо работает с Access.

0 голосов
/ 18 сентября 2016
student = txtStudent.Text;
            age = txtAge.Text;
            address = txtAddress.Text;
            section = CBSection.Text;



            string ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\STI.accdb";
            string queryString = "UPDATE Details set StudentName='"+student+"',Age='"+age+"',Address='"+address+"' where Section/Course="+section+"";
            OleDbConnection connection = new OleDbConnection(ConnectionString);
            OleDbCommand command = new OleDbCommand();
            command.CommandType = CommandType.Text;
            command.CommandText = queryString;
            command.Connection = connection;
            connection.Open();
            {
                try
                {
                    command.ExecuteNonQuery();
                    MessageBox.Show("StudentName : " + student + "\nAge : " + age + "\nAddress : " + address + "\nSection : " + section + "\nHas been successfully Enrolled");
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }*strong text*
...