Как использовать автоматическое индексирование в базе данных ACCESS с использованием OleDb в C # с помощью команд sql - PullRequest
0 голосов
/ 06 марта 2012

Я написал программу на основе форм на C #, которая использует базу данных MS Access для хранения своих данных.

В файле MDB у меня есть одна таблица с именем __item__ в таблице есть 7 полей, первое из которых называется __item_id__, и это автоматический индексатор таблицы, поэтому, когда я добавляю новую запись, она должна автоматически увеличиваться каждый раз, поэтому у меня не будет 2 записей с тот же идентификатор.

В программе я использую следующий код (это не полный код, а только соответствующий):

using System.Data.OleDb;

private OleDbConnection con; // create connection
private OleDbCommand cmd; // create command   

con = new OleDbConnection("Provider = Microsoft.Jet.OLEDB.4.0; Data Source = d:\\library0.1\\DB.mdb");
cmd = new OleDbCommand();
cmd.Connection = con;    

cmd.CommandText = "INSERT INTO Item VALUES (@item_name, @creator_name,@publishing_name,@item_type,@genre,@year_publication);";
con.Open(); // open the connection  
cmd.ExecuteNonQuery(); 
con.Close();

этот код выдаст мне ошибку __ExecuteNonQuery__, утверждая, что у меня слишком мало полей. Он хочет, чтобы я ввел __item_id__ вручную, например:

 cmd.CommandText = "INSERT INTO Item VALUES (@item_id, @item_name, @creator_name,@publishing_name,@item_type,@genre,@year_publication);";

Как можно избежать ручного ввода и сделать так, чтобы программа автоматически индексировала item_id для каждой новой записи?

1 Ответ

1 голос
/ 06 марта 2012

Если вы используете INSERT INTO без указания списка столбцов, вы должны предоставить параметр для всех столбцов.
Чтобы избежать ошибки, измените текст вашей команды на:

"INSERT INTO Item " + 
"(item_name, creator_name publishing_name, item_type, genre, year_publication) " +
"VALUES " + 
"(@item_name, @creator_name,@publishing_name,@item_type,@genre,@year_publication);";
...