Синтаксическая ошибка в инструкции INSERT - C #, Access 2013, VS Express 2013

1

Я пытался выяснить, почему моя программа продолжает давать мне ошибку. system.data.oledb.oledbexception(0x80040E14): Синтаксическая ошибка в инструкции INSERT INTO.

  • Имя таблицы: User
  • Колонки:

    Username
    AccountNumber
    FirstName
    LastName
    

Код:

namespace Library_System
{
    public partial class CreateAccountWindow : Form
    {
        OleDbConnection connect = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data         Source=C:\Users\Jc\Documents\Visual Studio 2013\Projects\Library System\Library     System\LibrarySystemDatabase.accdb;Persist Security Info=False;");
    OleDbCommand command = new OleDbCommand();
    //OleDbDataReader reader;

    public CreateAccountWindow()
    {
        InitializeComponent();
    }

    private void button2_Click(object sender, EventArgs e)
    {
        string Username = "", AccountNumber = "", FirstName = "", LastName = "";
        //int Borrowed = 0;
        bool hasValue1 = false, hasValue2 = false, hasValue3 = false, hasValue4 = false;
        if (textBox1.Text != "")
        {
            label1.Hide();
            Username = textBox1.Text;
            hasValue1 = true;
        }
        else
        {
            label1.Show();
            label1.Text = "Required";
        }

        if (textBox10.Text != "")
        {
            label21.Hide();

            AccountNumber = textBox8.Text;
            hasValue2 = true;
        }
        else
        {
            label21.Show();
            label21.Text = "Required";
        }

        if (textBox8.Text != "")
        {
            label13.Hide();

            FirstName = textBox10.Text;
            hasValue3 = true;
        }
        else
        {
            label13.Show();
            label13.Text = "Required";
        }

        if (textBox7.Text != "")
        {
            label12.Hide();
            label12.Text = "Required";
            LastName = textBox7.Text;
            hasValue4 = true;
        }
        else
        {
            label12.Show();
            label12.Text = "Required";
        }

        if (hasValue1 || hasValue2 || hasValue3 || hasValue4)
        {
            try
            {
                connect.Open();
                OleDbCommand command = new OleDbCommand();
                command.Connection = connect;
                command.CommandText = "insert into User (Username,AccountNumber,FirstName,LastName) values ('" + Username + "','" + AccountNumber + "','" + FirstName + "','" + LastName + "')";
                command.ExecuteNonQuery();
                MessageBox.Show("REGISTRATION COMPLETE !!", "DONE");
                connect.Close();
            }
            catch (Exception ex)
            {
                connect.Close();
                MessageBox.Show("Error:"+ex.ToString());
            }
        }
    }
}
  • 2
    Предупреждение о внедрении SQL - вам не следует объединять свои операторы SQL - вместо этого используйте параметризованные запросы, чтобы избежать внедрения SQL
  • 0
    Извините, но вы можете быть более конкретным. Я только начал C # в течение 3 недель. Я не слишком понимаю техническую терминологию
Показать ещё 2 комментария
Теги:
oledb
insert
ms-access-2013

3 ответа

1

Вы получаете ошибку, потому что USER является зарезервированным словом в Access SQL, поэтому вам нужно заключить имя таблицы в квадратные скобки. Кроме того, поскольку marc_s упоминается в комментарии к вопросу, вы должны использовать параметризованный запрос, например:

// test data
string Username = "gord";
string AccountNumber = "gt001";
string FirstName = "Gord";
string LastName = "Thompson";

command.CommandText =
        "INSERT INTO [User] (Username, AccountNumber, FirstName, LastName) VALUES (?,?,?,?)";
command.Parameters.AddWithValue("?", Username);
command.Parameters.AddWithValue("?", AccountNumber);
command.Parameters.AddWithValue("?", FirstName);
command.Parameters.AddWithValue("?", LastName);
command.ExecuteNonQuery();
0

вы пытались запустить запрос вставки непосредственно на консоли db? в вашем случае его доступ. у вас может быть некоторая орфографическая ошибка. вы дважды инициализировали объект oledbcommand. вам может не потребоваться инициализировать его сразу после объекта oledbconnection.

также в отношении подхода, который вы можете использовать валидаторы; проверить эту ссылку Практическое руководство. Проверка данных

для параметров oledbcommand проверьте ссылки ниже:

OleDBParams

Обновление данных с помощью OLEDB

Вставить данные с помощью OLEDB

0

В качестве первичного ключа вам понадобится поле UNIQUE. Поля, автоматически генерирующие числа в Access

SelectCommand = "select @@IDENTITY";
var id = (int)SelectCommand.ExecuteScalar();
  • 0
    Ошибка не имеет ничего общего с первичным ключом, и нет причины, по которой [Имя пользователя] не может быть первичным ключом для этой таблицы.
  • 0
    Вы должны проверить его вручную на наличие дубликатов. Вы не можете ввести повторяющееся имя в поля первичного ключа.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню