如何使用C#通过OleDB和sql命令检索ACCESS数据库中的最后一个enty
本文关键字:数据库 ACCESS enty 最后一个 检索 命令 何使用 通过 OleDB sql | 更新日期: 2023-09-27 18:27:01
再次与我一起形成基本程序(使用visual C#2010)在我的大部分程序开始工作后,我开始添加一些小的"额外"
问题是:当我添加一个新项目时,我想打开一个MessageBox并写入新项目的id。
表=项目,字段=项目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");
}
替换:
cmd.CommandText = "SELECT LAST(item_id) FROM Item";
带有:
cmd.CommandText = "SELECT @@IDENTITY";
在我的情况下,"IDENTITY"的东西没有起作用(可能是因为字段不是PK或AI)。它总是id"0"
我使用了这个查询:
cmd.CommandText = "SELECT TOP 1 item_id FROM Item ORDER BY item_id DESC";
注意,"TOP 1"等于其他sql方言的"LIMIT 1"
简而言之,在不设置更多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作为数据库Id,通常以1开头。