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

Опять я со мной в программе базовых форм (с Visual C # 2010). После того, как большая часть моей программы заработала, я начал добавлять небольшие дополнения

Вот проблема: когда я добавляю новый элемент,Я хочу открыть MessageBox и написать идентификатор нового элемента.

Таблица = Элемент, поле = item_id

Пробовал с помощью:

cmd.CommandText = "SELECT LAST(item_id) FROM Item";
OleDbDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
    id = dr["item_id"].ToString();
}

Вот полная функция:

public void ItemInsert(string name,string creator,string publishing,string itemType,string genere, string year)
{
    string id ="";
    cmd.CommandText = "INSERT INTO Item  (item_name, creator_name,publishing_name,item_type,genre,year_publication,location) VALUES (@item_name, @creator_name,@publishing_name,@item_type,@genre,@year_publication,@location);";
    cmd.Parameters.AddWithValue("@item_name", name);
    cmd.Parameters.AddWithValue("@creator_name", creator);
    cmd.Parameters.AddWithValue("@publishing_name",publishing);
    cmd.Parameters.AddWithValue("@item_type", itemType);
    cmd.Parameters.AddWithValue("@genre",genere);
    cmd.Parameters.AddWithValue("@year_publication",year);
    cmd.Parameters.AddWithValue("@location", 0);//location=0 when in library

    con.Open(); // open the connection
    cmd.ExecuteNonQuery();
    //get item id
    cmd.CommandText = "SELECT LAST(item_id) FROM Item";
    OleDbDataReader dr = cmd.ExecuteReader();
    while (dr.Read())
    {
        id = dr["item_id"].ToString();
    }

    con.Close();
    MessageBox.Show("Item ID : " + id+"","Added new item");
}

Ответы [ 2 ]

3 голосов
/ 08 марта 2012

Заменить:

cmd.CommandText = "SELECT LAST(item_id) FROM Item";

С:

cmd.CommandText = "SELECT @@IDENTITY";
0 голосов
/ 13 сентября 2016

В моем случае материал "IDENTITY" не работал (возможно, потому что поле не было PK или AI). Это всегда был идентификатор "0"

Я использовал этот запрос:

cmd.CommandText = "SELECT TOP 1 item_id FROM Item ORDER BY item_id DESC";

Обратите внимание, что "TOP 1" совпадает с "LIMIT 1" других sql-диалектов

Короче,

, без установки дополнительных параметров cmd:

object scalarInt = new OleDbCommand("SELECT TOP 1 item_id FROM Item ORDER BY item_id DESC", con).ExecuteScalar();
int lastItemId = (int?) scalarInt ?? 0; 

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

...